Align pattern background rendering to use preset.background_or(...) and update pulse/radiate single-step behaviour to preserve visible frames and step progression.
30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
import utime
|
|
|
|
|
|
class BarGraph:
|
|
def __init__(self, driver):
|
|
self.driver = driver
|
|
|
|
def run(self, preset):
|
|
colors = preset.c if preset.c else [(0, 255, 0), (255, 80, 0)]
|
|
last_update = utime.ticks_ms()
|
|
while True:
|
|
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(
|
|
preset.background_or(colors),
|
|
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
|