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