main: enforce event-driven behavior; run selected pattern once per message; clarify comments; fix pattern lookup

This commit is contained in:
2025-09-17 20:20:41 +12:00
parent 8cfb3e156b
commit d8e853183b
2 changed files with 18 additions and 18 deletions

View File

@@ -29,14 +29,21 @@ def main():
wdt = machine.WDT(timeout=10000)
wdt.feed()
while True:
# patterns.tick()
# advance pattern based on its own returned schedule
# due = patterns.tick(due)
wdt.feed()
host, msg = e.recv(0)
if msg:
try:
data = json.loads(msg)
print(data)
# Drain all pending packets and only process the latest
last_msg = None
while True:
host, msg = e.recv(0)
if not msg:
break
last_msg = msg
if last_msg:
try:
data = json.loads(last_msg)
defaults = data.get("d", {})
bar = data.get(settings.get("name"), {})
@@ -44,18 +51,18 @@ def main():
patterns.delay = bar.get("delay", defaults.get("delay", patterns.delay))
colors = bar.get("colors", defaults.get("colors", patterns.colors))
patterns.colors = [tuple(int(color[i:i+2], 16) for i in settings.color_order) for color in colors]
# patterns.select(bar.get("pattern", defaults.get("pattern", "off")))
patterns.n1 = bar.get("n1", defaults.get("n1", patterns.n1))
patterns.n2 = bar.get("n2", defaults.get("n2", patterns.n2))
patterns.step = bar.get("pattern_step", defaults.get("step", patterns.step))
selected_pattern = bar.get("pattern", defaults.get("pattern", "off"))
if selected_pattern in patterns.patterns:
# Run the selected pattern ONCE in response to this message. Do not auto-tick elsewhere.
patterns.patterns[selected_pattern]()
else:
print(f"Pattern {selected_pattern} not found")
except:
print(f"Failed to load espnow data {msg}")
except Exception as ex:
print(f"Failed to load espnow data {last_msg}: {ex}")
continue

View File

@@ -18,10 +18,6 @@ PATTERN_SUITE = [
{"pattern": "n_chase", "n1": 5, "n2": 5, "delay": 250, "iterations": 40, "repeat_delay": 120, "colors": ["#00ff88"]},
{"pattern": "alternating", "n1": 6, "n2": 6, "delay": 300, "iterations": 20, "repeat_delay": 300, "colors": ["#ff8800"]},
{"pattern": "pulse", "delay": 200, "iterations": 6, "repeat_delay": 300, "colors": ["#ffffff"]},
# Specto sweep demo: increase n1 from 0 to 30 repeatedly
{"pattern": "specto", "delay": 80, "iterations": 32, "repeat_delay": 80, "colors": ["#00ff00"], "n1_sequence": list(range(0, 31)) + [30]},
# Radiate demo: origins every 8 LEDs, moderate speed
{"pattern": "radiate", "delay": 60, "iterations": 6, "repeat_delay": 600, "colors": ["#ffffff"], "n1": 8},
]
@@ -74,9 +70,6 @@ async def run_suite(uri: str):
interval_ms = int(cfg.get("interval_ms", cfg.get("delay", 100) or 100))
repeat_ms = int(cfg.get("repeat_delay", interval_ms))
for i in range(iterations):
# Optional per-iteration n1 for specto
seq = cfg.get("n1_sequence")
n1_val = (seq[i % len(seq)] if seq else cfg.get("n1"))
msg = build_message(
cfg.get("pattern", "off"),
i,
@@ -84,7 +77,7 @@ async def run_suite(uri: str):
colors=cfg.get("colors"),
brightness=cfg.get("brightness", 127),
num_leds=cfg.get("num_leds"),
n1=n1_val,
n1=cfg.get("n1"),
n2=cfg.get("n2"),
name=cfg.get("name", "0"),
pattern_step=cfg.get("pattern_step"),