main: enforce event-driven behavior; run selected pattern once per message; clarify comments; fix pattern lookup
This commit is contained in:
27
src/main.py
27
src/main.py
@@ -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
|
||||
|
||||
|
||||
|
@@ -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"),
|
||||
|
Reference in New Issue
Block a user