12_neopixel_led_strip

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
12_neopixel_led_strip [2026/08/01 19:29] – [Using NeoPixel Strip for Traffic Lights] walkeradmin12_neopixel_led_strip [2026/08/02 13:48] (current) – [Knight Rider Lights] walkeradmin
Line 363: Line 363:
 We call this chase function 3 times: We call this chase function 3 times:
  
 +<code:python | download>
 +    # Chase effect
 +    chase((255, 0, 0), 0.08)
 +    chase((0, 255, 0), 0.08)
 +    chase((0, 0, 255), 0.08)
 +</code>
 +
 +First we set LEDs to Red, then second time it's Green then lastly we set Blue.
 +
 +Here is the full code:
 +<code:python | download>
 # WS2812 / NeoPixel Example # WS2812 / NeoPixel Example
 # Raspberry Pi Pico + MicroPython # Raspberry Pi Pico + MicroPython
Line 412: Line 423:
     chase((0, 255, 0), 0.08)     chase((0, 255, 0), 0.08)
     chase((0, 0, 255), 0.08)     chase((0, 0, 255), 0.08)
-     +</code> 
-Here is the full code:+ 
 +Here is a short video showing the sequence. 
 +\\  
 +\\  
 +{{ :neopixel-chase-led-example-001.mp4?640 |}} 
 +\\  
 +It's a nice effect to see the LEDs chasing like this. 
 +\\  
 +\\  
 +---- 
 +==== Knight Rider Lights ==== 
 + 
 +Who remembers these? 
 +\\  
 +\\  
 +{{ :knight-rider-001.mp4?640 |}} 
 +\\  
 +Well I do :) and we can replicate this effect with our Pico and NeoPixel LEDs. The code for this is almost identical to the previous project where we have the running LEDs. 
 +\\  
 +\\  
 +The major change is the addition of this part: 
 +<code:python | download> 
 +    # Backward direction 
 +    for i in range(NUM_LEDS - 2, 0, -1): 
 +        clear() 
 +        np[i] = color 
 +        np.write() 
 +        time.sleep(delay) 
 +</code> 
 + 
 +In our previous project, the LEDs ran forward, then cycled colour, in this project we are not cycling the colour and the additional code runs the LEDs in reverse. 
 +\\  
 +\\  
 +Here is the full code, explanation for how this works is at the end of this wiki page. 
 + 
 +<code:python | download> 
 +# WS2812 / NeoPixel Example 
 +# Raspberry Pi Pico + MicroPython 
 +
 +# Controls a strip of 12 LEDs connected to GP8. 
 + 
 +from machine import Pin 
 +import neopixel 
 +import time 
 + 
 +# ------------------------------- 
 +# Configuration 
 +# ------------------------------- 
 + 
 +LED_PIN = 8          # GPIO connected to DIN 
 +NUM_LEDS = 12        # Number of LEDs, 0-11 is used, not 1-12 
 + 
 +# Create the NeoPixel object 
 +np = neopixel.NeoPixel(Pin(LED_PIN), NUM_LEDS) 
 + 
 +# ------------------------------- 
 +# Helper Functions 
 +# ------------------------------- 
 + 
 +def clear(): 
 +    """Turn all LEDs off.""" 
 +    for i in range(NUM_LEDS): 
 +        np[i] = (0, 0, 0) 
 +    np.write() 
 + 
 +def chase_bounce(color, delay=0.1): 
 +    """Move one LED up and down the strip.""" 
 +    # Forward direction 
 +    for i in range(NUM_LEDS): 
 +        clear() 
 +        np[i] = color 
 +        np.write() 
 +        time.sleep(delay) 
 + 
 +    # Backward direction 
 +    for i in range(NUM_LEDS - 2, 0, -1): 
 +        clear() 
 +        np[i] = color 
 +        np.write() 
 +        time.sleep(delay) 
 + 
 +# ------------------------------- 
 +# Main Program 
 +# ------------------------------- 
 + 
 +while True: 
 + 
 +    # Chase effect 
 +    chase_bounce((255, 0, 0), 0.08) 
 +</code> 
 + 
 +So, what does this extra code do? and how? 
 +\\  
 +\\ 
 +Here is an explanation of the reverse code block in general. 
 + 
 +<code:python | download> 
 +# Backward direction (move the lit LED from right to left) 
 +# range(NUM_LEDS - 2, 0, -1) generates: 
 +# For 12 LEDs → 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 
 +# - Start at LED 10 (second-to-last) 
 +# - Stop at LED 1 (LED 0 is skipped to avoid repeating the end LED) 
 +# - Step backwards by -1 each time 
 +for i in range(NUM_LEDS - 2, 0, -1): 
 + 
 +    clear()              # Turn all LEDs off before lighting the next one 
 + 
 +    np[i] = color        # Light the current LED at position i 
 + 
 +    np.write()           # Send the updated LED data to the strip 
 + 
 +    time.sleep(delay)    # Pause so the movement is visible 
 +</code> 
 + 
 +And this is what the line that makes the count to backwards actually does. 
 + 
 +<code:python | download> 
 +range(NUM_LEDS - 2, 0, -1) 
 +#Breakdown for NUM_LEDS = 12: 
 + 
 +Start: NUM_LEDS - 2 → 10 
 +#(LED 11 was already lit in the forward chase)
  
 +Stop: 0 
 +#(but Python stops before 0, so last value is 1)
  
 +Step: -1
 +#(count backwards)
 +</code>
  
 +For the reverse sequence, we don't need to worry about the first (0) or last (11) LEDs as these are already set by the forward sequence.
 +\\ 
 +\\ 
 +That's it! Oh, and don't worry, I won't be fitting these to my car :)
 +\\ 
 +\\ 
 +----
12_neopixel_led_strip.1785612544.txt.gz · Last modified: by walkeradmin