Apply group membership on RX, accept select as [preset_id, step?], and fix identify/off plus presets layout for manual beat stepping. Co-authored-by: Cursor <cursoragent@cursor.com>
75 lines
1.7 KiB
Python
75 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Standalone blink pattern demo (WDT-fed tick loop).
|
|
|
|
Run on device::
|
|
|
|
mpremote connect <port> run tests/patterns/blink.py
|
|
"""
|
|
import sys
|
|
import utime
|
|
|
|
|
|
def _bootstrap_import_path():
|
|
"""Find ``settings`` / ``presets`` on device or when run via mpremote."""
|
|
try:
|
|
import uos as os
|
|
except ImportError:
|
|
import os
|
|
|
|
candidates = []
|
|
try:
|
|
here = __file__.rsplit("/", 1)[0]
|
|
if here:
|
|
candidates.append(here)
|
|
tests = here.rsplit("/", 1)[0]
|
|
if tests:
|
|
candidates.append(tests)
|
|
root = tests.rsplit("/", 1)[0]
|
|
if root:
|
|
candidates.append(root)
|
|
candidates.append(root + "/src")
|
|
except NameError:
|
|
pass
|
|
for p in (".", "..", "/", "src", "/src"):
|
|
candidates.append(p)
|
|
for p in candidates:
|
|
if p and p not in sys.path:
|
|
sys.path.insert(0, p)
|
|
|
|
|
|
_bootstrap_import_path()
|
|
|
|
from machine import WDT # noqa: E402
|
|
from settings import Settings # noqa: E402
|
|
from presets import Presets # noqa: E402
|
|
|
|
|
|
def _run_ms(presets, wdt, duration_ms, sleep_ms=10):
|
|
start = utime.ticks_ms()
|
|
while utime.ticks_diff(utime.ticks_ms(), start) < duration_ms:
|
|
wdt.feed()
|
|
presets.tick()
|
|
utime.sleep_ms(sleep_ms)
|
|
|
|
|
|
def main():
|
|
settings = Settings()
|
|
presets = Presets(settings.get("led_pin", 10), settings.get("num_leds", 30))
|
|
wdt = WDT(timeout=10000)
|
|
|
|
presets.edit(
|
|
"test_blink",
|
|
{
|
|
"p": "blink",
|
|
"b": 64,
|
|
"d": 200,
|
|
"c": [(255, 0, 0), (0, 0, 255)],
|
|
},
|
|
)
|
|
presets.select("test_blink")
|
|
_run_ms(presets, wdt, 1500)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|