""" On-device test for the Segments pattern using mpremote. 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/test_segments.py : mpremote connect run test_segments.py This script: - Instantiates Presets - Creates a few in-memory 'point' (Segments) presets with different ranges/colors - Selects each one so you can visually confirm the segments """ from presets import Presets, Preset def make_segments_preset(name, colors, n_values, brightness=255): """ Helper to build a Preset for the 'segments' pattern (key 'point'). colors: list of up to 4 (r,g,b) tuples n_values: list/tuple of 8 ints [n1..n8] """ # Pad or trim colors to 4 entries cs = list(colors)[:4] while len(cs) < 4: cs.append((0, 0, 0)) n1, n2, n3, n4, n5, n6, n7, n8 = n_values data = { "p": "segments", # pattern key for Segments "c": cs, "b": brightness, "n1": n1, "n2": n2, "n3": n3, "n4": n4, "n5": n5, "n6": n6, "n7": n7, "n8": n8, # 'a' is not used by segments; it's static } return name, Preset(data) def show_and_wait(presets, name, preset_obj, wait_ms): """Select a static segments preset and hold it for wait_ms.""" presets.presets[name] = preset_obj presets.select(name) # Segments draws immediately in run(), then just yields; one tick is enough. presets.tick() import utime start = utime.ticks_ms() while utime.ticks_diff(utime.ticks_ms(), start) < wait_ms: # Keep ticking in case other logic ever depends on it presets.tick() def main(): presets = Presets() presets.load() num_leds = presets.strip_length(0) if num_leds <= 0: print("No strips; aborting segments test.") return print("Starting segments pattern test...") quarter = num_leds // 4 half = num_leds // 2 segments_presets = [] # 1. Single band: first quarter, red segments_presets.append( make_segments_preset( "segments_red_q1", colors=[(255, 0, 0)], n_values=[0, quarter - 1, 0, -1, 0, -1, 0, -1], ) ) # 2. Two bands: red first half, green second half segments_presets.append( make_segments_preset( "segments_red_green_halves", colors=[(255, 0, 0), (0, 255, 0)], n_values=[0, half - 1, half, num_leds - 1, 0, -1, 0, -1], ) ) # 3. Three bands: R, G, B quarters segments_presets.append( make_segments_preset( "segments_rgb_quarters", colors=[(255, 0, 0), (0, 255, 0), (0, 0, 255)], n_values=[ 0, quarter - 1, # red quarter, 2 * quarter - 1, # green 2 * quarter, 3 * quarter - 1, # blue 0, -1, ], ) ) # Show each for ~4 seconds for name, preset_obj in segments_presets: print("Showing segments preset:", name) show_and_wait(presets, name, preset_obj, wait_ms=4000) print("Segments pattern test finished. Turning off LEDs.") presets.select("off") presets.tick() if __name__ == "__main__": main()