""" 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 cp src/*.py : mpremote connect cp src/patterns/*.py :patterns mpremote connect cp lib/*.py : mpremote connect cp test/roll.py : mpremote connect 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()