import utime class Marquee: def __init__(self, driver): self.driver = driver def run(self, preset): colors = preset.c if preset.c else [(255, 255, 255)] on_len = max(1, int(preset.n1) if int(preset.n1) > 0 else 3) off_len = max(1, int(preset.n2) if int(preset.n2) > 0 else 2) step = max(1, int(preset.n3) if int(preset.n3) > 0 else 1) phase = self.driver.step % (on_len + off_len) last = utime.ticks_ms() while True: d = max(1, int(preset.d)) now = utime.ticks_ms() if utime.ticks_diff(now, last) >= d: c = self.driver.apply_brightness(colors[0], preset.b) for i in range(self.driver.num_leds): m = (i + phase) % (on_len + off_len) self.driver.n[i] = c if m < on_len else (0, 0, 0) self.driver.n.write() phase = (phase + step) % (on_len + off_len) self.driver.step = phase last = utime.ticks_add(last, d) if not preset.a: yield return yield