Update patterns_base.py
This commit is contained in:
@@ -5,7 +5,6 @@ import random
|
||||
import _thread
|
||||
import asyncio
|
||||
import json
|
||||
from presets import Presets
|
||||
|
||||
# Short-key parameter mapping for convenience setters
|
||||
param_mapping = {
|
||||
@@ -27,7 +26,7 @@ param_mapping = {
|
||||
}
|
||||
|
||||
class Patterns:
|
||||
def __init__(self, pin, num_leds, color1=(0,0,0), color2=(0,0,0), brightness=127, selected="rainbow_cycle", delay=100):
|
||||
def __init__(self, pin, num_leds, color1=(0,0,0), color2=(0,0,0), brightness=127, selected="off", delay=100):
|
||||
self.n = NeoPixel(Pin(pin, Pin.OUT), num_leds)
|
||||
self.num_leds = num_leds
|
||||
self.pattern_step = 0
|
||||
@@ -64,27 +63,43 @@ class Patterns:
|
||||
self.n6 = 0
|
||||
|
||||
def select(self, pattern):
|
||||
|
||||
if pattern in self.patterns:
|
||||
self.selected = pattern
|
||||
return True
|
||||
# If pattern doesn't exist, default to "off"
|
||||
if "off" in self.patterns:
|
||||
self.selected = "off"
|
||||
return False
|
||||
|
||||
async def run(self):
|
||||
print(f"Stopping pattern")
|
||||
await self.stop()
|
||||
self.running = True
|
||||
print(f"Starting pattern {self.selected}")
|
||||
if self.selected in self.patterns:
|
||||
_thread.start_new_thread(self.patterns[self.selected], ())
|
||||
# Ensure we wait a bit more to let the thread fully terminate
|
||||
# If selected pattern doesn't exist, default to "off"
|
||||
if self.selected not in self.patterns:
|
||||
print(f"Pattern {self.selected} not found, defaulting to 'off'")
|
||||
if "off" in self.patterns:
|
||||
self.selected = "off"
|
||||
else:
|
||||
print(f"Pattern {self.selected} not found")
|
||||
print("No patterns available")
|
||||
self.running = False
|
||||
self.stopped = True
|
||||
return
|
||||
print(f"Starting pattern {self.selected}")
|
||||
_thread.start_new_thread(self.patterns[self.selected], ())
|
||||
|
||||
async def stop(self):
|
||||
if not self.running:
|
||||
# Already stopped
|
||||
self.stopped = True
|
||||
return
|
||||
self.running = False
|
||||
start = utime.ticks_ms()
|
||||
while not self.stopped and utime.ticks_diff(utime.ticks_ms(), start) < 1000:
|
||||
await asyncio.sleep_ms(0)
|
||||
timeout = 2000 # Increased timeout to 2 seconds
|
||||
while not self.stopped and utime.ticks_diff(utime.ticks_ms(), start) < timeout:
|
||||
await asyncio.sleep_ms(10) # Check every 10ms instead of 0ms
|
||||
if not self.stopped:
|
||||
# Timeout reached, force stop
|
||||
print("Warning: Pattern did not stop within timeout")
|
||||
self.stopped = True
|
||||
|
||||
def set_param(self, key, value):
|
||||
|
||||
Reference in New Issue
Block a user