- patterns/: sample dynamic pattern modules for OTA - esp32/msg.json: example bridge message shape - models/http_driver.py, wifi_peer.py: Wi-Fi driver HTTP poll helpers - tests: pattern OTA send script and UDP discovery echo server - Submodule led-driver: http_poll and test utilities Made-with: Cursor
34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
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
|