Quantcast
Channel: Raspberry Pi Forums
Viewing all articles
Browse latest Browse all 4406

General • Using multiple strings of WS2811 lights

$
0
0
We are working on a Halloween decoration with multiple skeleton heads that we want to use multiple strands of 2 WS2811 lights in each head to flash in the eyes. I am relatively new working with the Raspberry pico and doing pretty well on my lessons with normal LED's. I found code that works for the WS2811 as it did not react as well to the neopixel code that works with WS2812 which is more common.

Code:

# Example using PIO to drive a set of WS2812 LEDs.import array, timefrom machine import Pinimport rp2# Configure the number of LEDs.NUM_LEDS = 2PIN_NUM = 1brightness = 0.5@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 pinsm = 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)BLACK = (0, 0, 0)RED = (0, 255, 0)YELLOW = (155, 250, 0)GREEN = (255, 0, 0)CYAN = (255, 0, 255)BLUE = (0, 0, 255)PURPLE = (0, 180, 255)WHITE = (255, 255, 255)COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE)while True:        for color in COLORS:               pixels_fill(color)        pixels_show()        time.sleep(2) 
My question is, am I able to use multiple strands? The pin number is set way at the top of the code and then used when the State machine is created under variable sm. So, I don't see how I can add more sets of 2 lights for each head on another pin. If we can't figure this out and make it work with the WS2811, we will do it with other LED's but these are bigger and fully weather resistant already. They would be perfect for the project.

Statistics: Posted by Chakora — Thu Sep 19, 2024 8:25 pm — Replies 0 — Views 49



Viewing all articles
Browse latest Browse all 4406

Trending Articles