mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-04-10 21:03:01 +00:00
Slow down redraw rate
Slowing redraw to try and fix flicker
This commit is contained in:
23
src/clock.py
23
src/clock.py
@@ -21,6 +21,7 @@ class Clock:
|
|||||||
self.clock_config = self.config.get('clock', {})
|
self.clock_config = self.config.get('clock', {})
|
||||||
# Use configured timezone if available, otherwise try to determine it
|
# Use configured timezone if available, otherwise try to determine it
|
||||||
self.timezone = self._get_timezone()
|
self.timezone = self._get_timezone()
|
||||||
|
self.last_time = None
|
||||||
|
|
||||||
def _get_timezone(self) -> pytz.timezone:
|
def _get_timezone(self) -> pytz.timezone:
|
||||||
"""Get timezone based on location or config."""
|
"""Get timezone based on location or config."""
|
||||||
@@ -69,16 +70,20 @@ class Clock:
|
|||||||
def display_time(self) -> None:
|
def display_time(self) -> None:
|
||||||
"""Display the current time."""
|
"""Display the current time."""
|
||||||
current_time = self.get_current_time()
|
current_time = self.get_current_time()
|
||||||
logger.debug("Displaying time: %s", current_time)
|
|
||||||
|
|
||||||
# Center the text on the display
|
# Only update if the time has changed
|
||||||
text_width = self.display_manager.font.getlength(current_time)
|
if current_time != self.last_time:
|
||||||
x = (self.display_manager.matrix.width - text_width) // 2
|
logger.debug("Time changed, updating display from %s to %s", self.last_time, current_time)
|
||||||
y = (self.display_manager.matrix.height - 24) // 2
|
self.last_time = current_time
|
||||||
|
|
||||||
logger.debug("Drawing time at position (%d, %d)", x, y)
|
# Center the text on the display
|
||||||
self.display_manager.clear()
|
text_width = self.display_manager.font.getlength(current_time)
|
||||||
self.display_manager.draw_text(current_time, x, y)
|
x = (self.display_manager.matrix.width - text_width) // 2
|
||||||
|
y = (self.display_manager.matrix.height - 24) // 2
|
||||||
|
|
||||||
|
logger.debug("Drawing time at position (%d, %d)", x, y)
|
||||||
|
self.display_manager.clear()
|
||||||
|
self.display_manager.draw_text(current_time, x, y)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
clock = Clock()
|
clock = Clock()
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class DisplayController:
|
|||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
current_time = time.time()
|
current_time = time.time()
|
||||||
rotation_interval = self.config['display'].get('rotation_interval', 10)
|
rotation_interval = self.config['display'].get('rotation_interval', 15)
|
||||||
|
|
||||||
# Switch display if interval has passed
|
# Switch display if interval has passed
|
||||||
if current_time - self.last_switch > rotation_interval:
|
if current_time - self.last_switch > rotation_interval:
|
||||||
@@ -44,8 +44,8 @@ class DisplayController:
|
|||||||
logger.debug("Updating weather display")
|
logger.debug("Updating weather display")
|
||||||
self.weather.display_weather()
|
self.weather.display_weather()
|
||||||
|
|
||||||
# Small delay to prevent CPU overload
|
# Sleep for 0.5 seconds since we only need to check for second changes
|
||||||
time.sleep(0.1)
|
time.sleep(0.5)
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
print("\nDisplay stopped by user")
|
print("\nDisplay stopped by user")
|
||||||
|
|||||||
@@ -48,23 +48,8 @@ class WeatherManager:
|
|||||||
temp = round(weather_data['main']['temp'])
|
temp = round(weather_data['main']['temp'])
|
||||||
condition = weather_data['weather'][0]['main']
|
condition = weather_data['weather'][0]['main']
|
||||||
|
|
||||||
# Format the display string
|
# Format the display string with both temp and condition
|
||||||
display_text = self.weather_config.get('display_format', '{temp}°F\n{condition}')
|
display_text = f"{temp}°F\n{condition}"
|
||||||
display_text = display_text.format(temp=temp, condition=condition)
|
|
||||||
|
|
||||||
# Split text into lines
|
|
||||||
lines = display_text.split('\n')
|
|
||||||
|
|
||||||
# Calculate vertical spacing
|
# Draw both lines at once using the multi-line support in draw_text
|
||||||
total_height = len(lines) * 24 # Assuming 24px font height
|
self.display_manager.draw_text(display_text)
|
||||||
start_y = (self.display_manager.matrix.height - total_height) // 2
|
|
||||||
|
|
||||||
# Clear the display
|
|
||||||
self.display_manager.clear()
|
|
||||||
|
|
||||||
# Draw each line centered
|
|
||||||
for i, line in enumerate(lines):
|
|
||||||
text_width = self.display_manager.font.getlength(line)
|
|
||||||
x = (self.display_manager.matrix.width - text_width) // 2
|
|
||||||
y = start_y + (i * 24)
|
|
||||||
self.display_manager.draw_text(line, x, y)
|
|
||||||
Reference in New Issue
Block a user