commit b948e31198ebd7b1587c2e5155c94fafa7d71cde Author: Kolossos Date: Thu Jan 27 20:02:23 2022 +0100 initial diff --git a/main.py b/main.py new file mode 100644 index 0000000..e525cae --- /dev/null +++ b/main.py @@ -0,0 +1,100 @@ +import machine +import utime + +import array, time +from machine import Pin +import rp2 + +# Configure the number of WS2812 LEDs. +NUM_LEDS = 3 +PIN_NUM = 22 +brightness = 0.1 + + +@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24) +def ws2812(): + T1 = 2 + T2 = 5 + T3 = 3 + wrap_target() + label("bitloop") + out(x, 1) .side(0) [T3 - 1] + jmp(not_x, "do_zero") .side(1) [T1 - 1] + jmp("bitloop") .side(1) [T2 - 1] + label("do_zero") + nop() .side(0) [T2 - 1] + wrap() + + +# Create the StateMachine with the ws2812 program, outputting on pin +sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(PIN_NUM)) + +# Start the StateMachine, it will wait for data on its FIFO. +sm.active(1) + + +# Display a pattern on the LEDs via an array of LED RGB values. +ar = array.array("I", [0 for _ in range(NUM_LEDS)]) + +########################################################################## +def pixels_show(): + dimmer_ar = array.array("I", [0 for _ in range(NUM_LEDS)]) + for i,c in enumerate(ar): + r = int(((c >> 8) & 0xFF) * brightness) + g = int(((c >> 16) & 0xFF) * brightness) + b = int((c & 0xFF) * brightness) + dimmer_ar[i] = (g<<16) + (r<<8) + b + sm.put(dimmer_ar, 8) + time.sleep_ms(10) + +def pixels_set(i, color): + ar[i] = (color[1]<<16) + (color[0]<<8) + color[2] + +def pixels_fill(color): + for i in range(len(ar)): + pixels_set(i, color) + +def color_chase(color, wait): + for i in range(NUM_LEDS): + pixels_set(i, color) + time.sleep(wait) + pixels_show() + time.sleep(0.2) + +def wheel(pos): + # Input a value 0 to 255 to get a color value. + # The colours are a transition r - g - b - back to r. + if pos < 0 or pos > 255: + return (0, 0, 0) + if pos < 85: + return (255 - pos * 3, pos * 3, 0) + if pos < 170: + pos -= 85 + return (0, 255 - pos * 3, pos * 3) + pos -= 170 + return (pos * 3, 0, 255 - pos * 3) + +def sensor2color(sens,color, wait,mini=12000,maxi=64000): + BLACK = (0, 0, 0) + RED = (255, 0, 0) + LEDS_on=NUM_LEDS*((sens-mini)/maxi) + print("LEDS: ",LEDS_on) + for i in range(NUM_LEDS): + if LEDS_on