12_neopixel_led_strip
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| 12_neopixel_led_strip [2026/08/01 19:39] – walkeradmin | 12_neopixel_led_strip [2026/08/02 13:48] (current) – [Knight Rider Lights] walkeradmin | ||
|---|---|---|---|
| Line 373: | Line 373: | ||
| Here is the full code: | Here is the full code: | ||
| - | <code | download> | + | <code: |
| # WS2812 / NeoPixel Example | # WS2812 / NeoPixel Example | ||
| # Raspberry Pi Pico + MicroPython | # Raspberry Pi Pico + MicroPython | ||
| Line 434: | Line 434: | ||
| \\ | \\ | ||
| ---- | ---- | ||
| + | ==== Knight Rider Lights ==== | ||
| + | Who remembers these? | ||
| + | \\ | ||
| + | \\ | ||
| + | {{ : | ||
| + | \\ | ||
| + | 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: | ||
| + | < | ||
| + | # Backward direction | ||
| + | for i in range(NUM_LEDS - 2, 0, -1): | ||
| + | clear() | ||
| + | np[i] = color | ||
| + | np.write() | ||
| + | time.sleep(delay) | ||
| + | </ | ||
| + | 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. | ||
| + | |||
| + | < | ||
| + | # 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), | ||
| + | |||
| + | # ------------------------------- | ||
| + | # Helper Functions | ||
| + | # ------------------------------- | ||
| + | |||
| + | def clear(): | ||
| + | """ | ||
| + | for i in range(NUM_LEDS): | ||
| + | np[i] = (0, 0, 0) | ||
| + | np.write() | ||
| + | |||
| + | def chase_bounce(color, | ||
| + | """ | ||
| + | # 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, | ||
| + | </ | ||
| + | |||
| + | So, what does this extra code do? and how? | ||
| + | \\ | ||
| + | \\ | ||
| + | Here is an explanation of the reverse code block in general. | ||
| + | |||
| + | < | ||
| + | # 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() | ||
| + | |||
| + | np[i] = color # Light the current LED at position i | ||
| + | |||
| + | np.write() | ||
| + | |||
| + | time.sleep(delay) | ||
| + | </ | ||
| + | |||
| + | And this is what the line that makes the count to backwards actually does. | ||
| + | |||
| + | < | ||
| + | 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) | ||
| + | </ | ||
| + | |||
| + | 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.1785613199.txt.gz · Last modified: by walkeradmin
