feat(patterns): add colour cycle, flicker, and flame
Made-with: Cursor
This commit is contained in:
40
src/patterns/flicker.py
Normal file
40
src/patterns/flicker.py
Normal file
@@ -0,0 +1,40 @@
|
||||
import random
|
||||
import utime
|
||||
|
||||
|
||||
class Flicker:
|
||||
def __init__(self, driver):
|
||||
self.driver = driver
|
||||
|
||||
def run(self, preset):
|
||||
"""Random brightness between n1 (min) and b (max); delay d ms between updates."""
|
||||
colors = preset.c if preset.c else [(255, 255, 255)]
|
||||
color_index = 0
|
||||
last_update = utime.ticks_ms()
|
||||
|
||||
def brightness_bounds():
|
||||
lo = max(0, min(255, int(preset.n1)))
|
||||
hi = max(0, min(255, int(preset.b)))
|
||||
if lo > hi:
|
||||
lo, hi = hi, lo
|
||||
return lo, hi
|
||||
|
||||
if not preset.a:
|
||||
lo, hi = brightness_bounds()
|
||||
level = random.randint(lo, hi)
|
||||
base = colors[color_index % len(colors)]
|
||||
self.driver.fill(self.driver.apply_brightness(base, level))
|
||||
yield
|
||||
return
|
||||
|
||||
while True:
|
||||
current_time = utime.ticks_ms()
|
||||
delay_ms = max(1, int(preset.d))
|
||||
lo, hi = brightness_bounds()
|
||||
if utime.ticks_diff(current_time, last_update) >= delay_ms:
|
||||
level = random.randint(lo, hi)
|
||||
base = colors[color_index % len(colors)]
|
||||
self.driver.fill(self.driver.apply_brightness(base, level))
|
||||
color_index += 1
|
||||
last_update = utime.ticks_add(last_update, delay_ms)
|
||||
yield
|
||||
Reference in New Issue
Block a user