Update patterns_base.py
This commit is contained in:
@@ -5,7 +5,6 @@ import random
|
|||||||
import _thread
|
import _thread
|
||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
from presets import Presets
|
|
||||||
|
|
||||||
# Short-key parameter mapping for convenience setters
|
# Short-key parameter mapping for convenience setters
|
||||||
param_mapping = {
|
param_mapping = {
|
||||||
@@ -27,7 +26,7 @@ param_mapping = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class Patterns:
|
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.n = NeoPixel(Pin(pin, Pin.OUT), num_leds)
|
||||||
self.num_leds = num_leds
|
self.num_leds = num_leds
|
||||||
self.pattern_step = 0
|
self.pattern_step = 0
|
||||||
@@ -64,28 +63,44 @@ class Patterns:
|
|||||||
self.n6 = 0
|
self.n6 = 0
|
||||||
|
|
||||||
def select(self, pattern):
|
def select(self, pattern):
|
||||||
|
|
||||||
if pattern in self.patterns:
|
if pattern in self.patterns:
|
||||||
self.selected = pattern
|
self.selected = pattern
|
||||||
return True
|
return True
|
||||||
|
# If pattern doesn't exist, default to "off"
|
||||||
|
if "off" in self.patterns:
|
||||||
|
self.selected = "off"
|
||||||
return False
|
return False
|
||||||
|
|
||||||
async def run(self):
|
async def run(self):
|
||||||
print(f"Stopping pattern")
|
|
||||||
await self.stop()
|
await self.stop()
|
||||||
self.running = True
|
# 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("No patterns available")
|
||||||
|
self.running = False
|
||||||
|
self.stopped = True
|
||||||
|
return
|
||||||
print(f"Starting pattern {self.selected}")
|
print(f"Starting pattern {self.selected}")
|
||||||
if self.selected in self.patterns:
|
_thread.start_new_thread(self.patterns[self.selected], ())
|
||||||
_thread.start_new_thread(self.patterns[self.selected], ())
|
|
||||||
else:
|
|
||||||
print(f"Pattern {self.selected} not found")
|
|
||||||
|
|
||||||
async def stop(self):
|
async def stop(self):
|
||||||
|
if not self.running:
|
||||||
|
# Already stopped
|
||||||
|
self.stopped = True
|
||||||
|
return
|
||||||
self.running = False
|
self.running = False
|
||||||
start = utime.ticks_ms()
|
start = utime.ticks_ms()
|
||||||
while not self.stopped and utime.ticks_diff(utime.ticks_ms(), start) < 1000:
|
timeout = 2000 # Increased timeout to 2 seconds
|
||||||
await asyncio.sleep_ms(0)
|
while not self.stopped and utime.ticks_diff(utime.ticks_ms(), start) < timeout:
|
||||||
self.stopped = True
|
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):
|
def set_param(self, key, value):
|
||||||
if key in param_mapping:
|
if key in param_mapping:
|
||||||
|
|||||||
Reference in New Issue
Block a user