fix(patterns): remove blocking sleeps from pattern loops
Replace sleep-based timing in pattern generators with non-blocking tick checks so long delays do not block the main loop and risk watchdog resets. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -7,15 +7,23 @@ class BarGraph:
|
||||
|
||||
def run(self, preset):
|
||||
colors = preset.c if preset.c else [(0, 255, 0), (255, 80, 0)]
|
||||
level = max(0, min(100, int(preset.n1) if int(preset.n1) >= 0 else 50))
|
||||
target = (self.driver.num_leds * level) // 100
|
||||
lit = self.driver.apply_brightness(colors[0], preset.b)
|
||||
unlit = self.driver.apply_brightness(colors[1] if len(colors) > 1 else (0, 0, 0), preset.b)
|
||||
last_update = utime.ticks_ms()
|
||||
while True:
|
||||
for i in range(self.driver.num_leds):
|
||||
self.driver.n[i] = lit if i < target else unlit
|
||||
self.driver.n.write()
|
||||
delay_ms = max(1, int(preset.d))
|
||||
now = utime.ticks_ms()
|
||||
if utime.ticks_diff(now, last_update) >= delay_ms:
|
||||
level = max(0, min(100, int(preset.n1) if int(preset.n1) >= 0 else 50))
|
||||
target = (self.driver.num_leds * level) // 100
|
||||
lit = self.driver.apply_brightness(colors[0], preset.b)
|
||||
unlit = self.driver.apply_brightness(
|
||||
colors[1] if len(colors) > 1 else (0, 0, 0),
|
||||
preset.b,
|
||||
)
|
||||
for i in range(self.driver.num_leds):
|
||||
self.driver.n[i] = lit if i < target else unlit
|
||||
self.driver.n.write()
|
||||
last_update = utime.ticks_add(last_update, delay_ms)
|
||||
if not preset.a:
|
||||
yield
|
||||
return
|
||||
yield
|
||||
if not preset.a:
|
||||
return
|
||||
utime.sleep_ms(max(1, int(preset.d)))
|
||||
|
||||
Reference in New Issue
Block a user