Button feedback, HDD colors, improved animation
This commit is contained in:
53
matrix.py
53
matrix.py
@@ -39,6 +39,13 @@ except:
|
||||
# Number of views
|
||||
NUM_VIEWS = 3
|
||||
|
||||
# View names (Spanish)
|
||||
VIEW_NAMES = {
|
||||
0: "Principal",
|
||||
1: "Discos",
|
||||
2: "Fecha",
|
||||
}
|
||||
|
||||
# Spanish day names fallback
|
||||
SPANISH_DAYS = {
|
||||
'Monday': 'Lunes', 'Tuesday': 'Martes', 'Wednesday': 'Miércoles',
|
||||
@@ -84,6 +91,20 @@ def get_temperature_color(temp):
|
||||
return graphics.Color(255, 255, 255)
|
||||
|
||||
|
||||
def get_hdd_color(temp):
|
||||
"""Color for HDD temps: green <32, yellow 32-40, red >40."""
|
||||
try:
|
||||
temp_value = int(temp)
|
||||
if temp_value < 32:
|
||||
return graphics.Color(0, 255, 80) # Green
|
||||
elif temp_value <= 40:
|
||||
return graphics.Color(255, 200, 0) # Yellow
|
||||
else:
|
||||
return graphics.Color(255, 50, 50) # Red
|
||||
except:
|
||||
return graphics.Color(255, 255, 255)
|
||||
|
||||
|
||||
def get_spanish_day(now):
|
||||
"""Get day name in Spanish."""
|
||||
day_en = now.strftime("%A")
|
||||
@@ -145,6 +166,7 @@ class Matrix64Display(SampleBase):
|
||||
if not self.button1.is_held:
|
||||
self.current_view = (self.current_view + 1) % NUM_VIEWS
|
||||
self.last_view_change = time.time()
|
||||
self.show_feedback(VIEW_NAMES[self.current_view], 1.5)
|
||||
print(f"View: {self.current_view}")
|
||||
|
||||
def on_button2_press(self):
|
||||
@@ -152,6 +174,7 @@ class Matrix64Display(SampleBase):
|
||||
if not self.button2.is_held:
|
||||
self.current_view = (self.current_view - 1) % NUM_VIEWS
|
||||
self.last_view_change = time.time()
|
||||
self.show_feedback(VIEW_NAMES[self.current_view], 1.5)
|
||||
print(f"View: {self.current_view}")
|
||||
|
||||
def on_button_held(self):
|
||||
@@ -212,8 +235,9 @@ class Matrix64Display(SampleBase):
|
||||
now = datetime.datetime.now()
|
||||
time_str = f"{now.hour:02d}:{now.minute:02d}:{now.second:02d}"
|
||||
|
||||
# Weather Icon (with animation offset)
|
||||
anim_offset = (self.animation_frame % 4) - 2 # -2 to 1
|
||||
# Weather Icon (with smooth sine wave animation)
|
||||
import math
|
||||
anim_offset = int(math.sin(self.animation_frame * 0.3) * 2)
|
||||
draw_weather_icon(canvas, anim_offset, 0, self.weather_desc)
|
||||
|
||||
# Vertical separator
|
||||
@@ -257,26 +281,26 @@ class Matrix64Display(SampleBase):
|
||||
time_color, humidity_color, hdd_color, label_color, line_color = colors
|
||||
|
||||
# Title
|
||||
graphics.DrawText(canvas, data_font, 4, 8, time_color, "HDD Temps")
|
||||
graphics.DrawText(canvas, data_font, 4, 8, time_color, "Discos")
|
||||
graphics.DrawLine(canvas, 0, 10, 63, 10, line_color)
|
||||
|
||||
if self.hdd_temps and len(self.hdd_temps) > 1:
|
||||
temps = [(i+1, int(t[0])) for i, t in enumerate(self.hdd_temps[1:7]) if t]
|
||||
|
||||
# Two columns: left (1-3), right (4-6)
|
||||
# Two columns: left (1-3), right (4-6) with bigger font
|
||||
y = 20
|
||||
for idx, (num, temp_val) in enumerate(temps[:3]):
|
||||
temp_color = get_temperature_color(temp_val)
|
||||
graphics.DrawText(canvas, small_font, 2, y, label_color, f"{num}:")
|
||||
graphics.DrawText(canvas, small_font, 12, y, temp_color, f"{temp_val}C")
|
||||
y += 9
|
||||
temp_color = get_hdd_color(temp_val)
|
||||
graphics.DrawText(canvas, data_font, 0, y, label_color, f"{num}:")
|
||||
graphics.DrawText(canvas, data_font, 14, y, temp_color, f"{temp_val}C")
|
||||
y += 10
|
||||
|
||||
y = 20
|
||||
for idx, (num, temp_val) in enumerate(temps[3:6]):
|
||||
temp_color = get_temperature_color(temp_val)
|
||||
graphics.DrawText(canvas, small_font, 34, y, label_color, f"{num}:")
|
||||
graphics.DrawText(canvas, small_font, 44, y, temp_color, f"{temp_val}C")
|
||||
y += 9
|
||||
temp_color = get_hdd_color(temp_val)
|
||||
graphics.DrawText(canvas, data_font, 34, y, label_color, f"{num}:")
|
||||
graphics.DrawText(canvas, data_font, 48, y, temp_color, f"{temp_val}C")
|
||||
y += 10
|
||||
|
||||
# Auto-cycle indicator
|
||||
if self.auto_cycle:
|
||||
@@ -299,8 +323,9 @@ class Matrix64Display(SampleBase):
|
||||
|
||||
graphics.DrawLine(canvas, 0, 28, 63, 28, line_color)
|
||||
|
||||
# Weather icon with animation
|
||||
anim_offset = (self.animation_frame % 4) - 2
|
||||
# Weather icon with smooth animation
|
||||
import math
|
||||
anim_offset = int(math.sin(self.animation_frame * 0.3) * 2)
|
||||
draw_weather_icon(canvas, 4 + anim_offset, 32, self.weather_desc)
|
||||
|
||||
# Temperature
|
||||
|
||||
Reference in New Issue
Block a user