feat(espnow): groups filter and v1 select list on driver
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>
This commit is contained in:
@@ -1,35 +1,74 @@
|
||||
#!/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
|
||||
from machine import WDT
|
||||
from settings import Settings
|
||||
from presets import Presets, run_tick
|
||||
|
||||
|
||||
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():
|
||||
s = Settings()
|
||||
pin = s.get("led_pin", 10)
|
||||
num = s.get("num_leds", 30)
|
||||
|
||||
p = Presets(pin=pin, num_leds=num)
|
||||
settings = Settings()
|
||||
presets = Presets(settings.get("led_pin", 10), settings.get("num_leds", 30))
|
||||
wdt = WDT(timeout=10000)
|
||||
|
||||
# Create blink preset (use short-key fields: p=pattern, b=brightness, d=delay, c=colors)
|
||||
p.edit("test_blink", {
|
||||
"p": "blink",
|
||||
"b": 64,
|
||||
"d": 200,
|
||||
"c": [(255, 0, 0), (0, 0, 255)],
|
||||
})
|
||||
p.select("test_blink")
|
||||
|
||||
start = utime.ticks_ms()
|
||||
while utime.ticks_diff(utime.ticks_ms(), start) < 1500:
|
||||
wdt.feed()
|
||||
run_tick(p)
|
||||
utime.sleep_ms(10)
|
||||
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()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user