import utime class Blink: def __init__(self, driver): self.driver = driver def run(self, preset): """Blink pattern: toggles LEDs on/off using preset delay, cycling through colors.""" # Use provided colors, or default to white if none colors = preset.c if preset.c else [(255, 255, 255)] color_index = 0 state = True # True = on, False = off last_update = utime.ticks_ms() while True: current_time = utime.ticks_ms() # Re-read delay each loop so live updates to preset.d take effect delay_ms = max(1, int(preset.d)) if utime.ticks_diff(current_time, last_update) >= delay_ms: if state: base_color = colors[color_index % len(colors)] color = self.driver.apply_brightness(base_color, preset.b) self.driver.fill(color) # Advance to next color for the next "on" phase color_index += 1 else: # "Off" phase: turn all LEDs off self.driver.fill((0, 0, 0)) state = not state last_update = current_time # Yield once per tick so other logic can run yield