""" On-device test for the Spin pattern using mpremote and Presets. 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 presets.json : mpremote connect cp test/test_spin.py : mpremote connect run test_spin.py This script: - Instantiates Presets - Creates a few in-memory spin presets with different parameters - Runs each one for a short time so you can visually compare behaviour """ import utime from presets import Presets, Preset def make_spin_preset( name, color_inner, color_outer, rate=4, delay_ms=30, margin=0, brightness=255, ): """Helper to build a Preset dict for the spin pattern.""" data = { "p": "spin", "c": [color_inner, color_outer], "b": brightness, "d": delay_ms, "n1": rate, # expansion step per tick "n2": margin, # margin from strip ends "a": True, } return name, Preset(data) def run_preset(presets, name, preset_obj, duration_ms): """Run a given spin preset for duration_ms using the existing tick loop.""" # Start each preset from a blank frame so both sides are balanced. presets.select("off") presets.tick() presets.presets[name] = preset_obj presets.select(name) 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() # Ensure we start from a blank frame. presets.select("off") presets.tick() print("Starting spin pattern test...") # Use strip 0 length to derive a reasonable margin. ref_len = presets.strip_length(0) margin_small = ref_len // 16 if ref_len > 0 else 0 margin_large = ref_len // 8 if ref_len > 0 else 0 spin_presets = [] # 1. Slow spin, warm white to orange, small margin spin_presets.append( make_spin_preset( "spin_slow_warm", color_inner=(255, 200, 120), color_outer=(255, 100, 0), rate=2, delay_ms=40, margin=margin_small, brightness=255, ) ) # 2. Medium spin, cyan to magenta, larger margin spin_presets.append( make_spin_preset( "spin_medium_cyan_magenta", color_inner=(0, 255, 180), color_outer=(255, 0, 180), rate=4, delay_ms=30, margin=margin_large, brightness=255, ) ) # 3. Fast spin, white to off (fade outwards), no margin spin_presets.append( make_spin_preset( "spin_fast_white", color_inner=(255, 255, 255), color_outer=(0, 0, 0), rate=6, delay_ms=20, margin=0, brightness=255, ) ) # Run each spin preset for about 6 seconds for name, preset_obj in spin_presets: print("Running spin preset:", name) run_preset(presets, name, preset_obj, duration_ms=6000) print("Spin pattern test finished. Turning off LEDs.") presets.select("off") presets.tick() if __name__ == "__main__": main()