Rework roll pattern to use gradient palette and add preset-based tests
Made-with: Cursor
This commit is contained in:
114
pico/test/roll.py
Normal file
114
pico/test/roll.py
Normal file
@@ -0,0 +1,114 @@
|
||||
"""
|
||||
On-device visual test for the Roll pattern via Presets.
|
||||
|
||||
This exercises src/patterns/roll.py (gradient from color1 to color2 across strips),
|
||||
not the low-level WS2812 driver.
|
||||
|
||||
Usage (from pico/ dir or project root with adjusted paths):
|
||||
|
||||
mpremote connect <device> cp src/*.py :
|
||||
mpremote connect <device> cp src/patterns/*.py :patterns
|
||||
mpremote connect <device> cp lib/*.py :
|
||||
mpremote connect <device> cp test/roll.py :
|
||||
mpremote connect <device> run roll.py
|
||||
"""
|
||||
|
||||
import utime
|
||||
|
||||
from presets import Presets, Preset
|
||||
|
||||
|
||||
def make_roll_preset(name, color1, color2, delay_ms=60, brightness=255, direction=0):
|
||||
"""
|
||||
Helper to build a Preset for the 'roll' pattern.
|
||||
|
||||
- color1: head color (full intensity)
|
||||
- color2: tail color (end of gradient)
|
||||
- direction: 0 = clockwise, 1 = anti-clockwise
|
||||
"""
|
||||
data = {
|
||||
"p": "roll",
|
||||
"c": [color1, color2],
|
||||
"b": brightness,
|
||||
"d": delay_ms,
|
||||
"n4": direction,
|
||||
"a": True, # animated
|
||||
}
|
||||
return name, Preset(data)
|
||||
|
||||
|
||||
def run_for(presets, duration_ms):
|
||||
"""Tick the current pattern for duration_ms."""
|
||||
start = utime.ticks_ms()
|
||||
while utime.ticks_diff(utime.ticks_ms(), start) < duration_ms:
|
||||
presets.tick()
|
||||
utime.sleep_ms(10)
|
||||
|
||||
|
||||
def main():
|
||||
presets = Presets()
|
||||
presets.load()
|
||||
|
||||
num_leds = presets.strip_length(0)
|
||||
if num_leds <= 0:
|
||||
print("No strips; aborting roll test.")
|
||||
return
|
||||
|
||||
print("Starting roll pattern gradient tests via Presets...")
|
||||
|
||||
# A few different roll presets to compare:
|
||||
roll_presets = []
|
||||
|
||||
# 1. White → off, clockwise (50% brightness, faster)
|
||||
roll_presets.append(
|
||||
make_roll_preset(
|
||||
"roll_white_off_cw",
|
||||
color1=(255, 255, 255),
|
||||
color2=(0, 0, 0),
|
||||
delay_ms=120,
|
||||
brightness=128,
|
||||
direction=0,
|
||||
)
|
||||
)
|
||||
|
||||
# 2. Warm white → cool blue, clockwise (50% brightness, faster)
|
||||
roll_presets.append(
|
||||
make_roll_preset(
|
||||
"roll_warm_cool_cw",
|
||||
color1=(255, 200, 100),
|
||||
color2=(0, 0, 255),
|
||||
delay_ms=130,
|
||||
brightness=128,
|
||||
direction=0,
|
||||
)
|
||||
)
|
||||
|
||||
# 3. Red → green, counter-clockwise (50% brightness, faster)
|
||||
roll_presets.append(
|
||||
make_roll_preset(
|
||||
"roll_red_green_ccw",
|
||||
color1=(255, 0, 0),
|
||||
color2=(0, 255, 0),
|
||||
delay_ms=110,
|
||||
brightness=128,
|
||||
direction=1,
|
||||
)
|
||||
)
|
||||
|
||||
# Register presets and run them one after another
|
||||
for name, preset_obj in roll_presets:
|
||||
presets.presets[name] = preset_obj
|
||||
|
||||
for name, _preset in roll_presets:
|
||||
print("Running roll preset:", name)
|
||||
presets.select(name)
|
||||
run_for(presets, duration_ms=8000)
|
||||
|
||||
print("Roll pattern Presets test finished. Turning off LEDs.")
|
||||
presets.select("off")
|
||||
presets.tick()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user