ruban-neopixel.ino
Una cabeza luminosa se desplaza por una tira de 16 LED NeoPixel (WS2812B) con una estela roja. Cada LED es direccionable individualmente mediante un protocolo de un solo hilo, controlado por la librería Adafruit_NeoPixel.
Hardware
Un Arduino Uno R3 (ATmega328P, 5 V, 16 MHz) alimentado por USB o jack de 7-12 V. 1 tira o anillo NeoPixel (WS2812B), alimentación de 5V dedicada recomendada + condensador de 470-1000 µF en la alimentación.
Cableado
Data (DIN) de la tira al pin 6 (resistencia de 330 Ω aconsejable), VCC a 5V (o 5V externo), GND común con la placa.
Funcionamiento
setPixelColor() acumula colores en un búfer, show() envía el trama completa. La posición de la cabeza avanza y da la vuelta con el módulo.
Ejecución
En el Arduino IDE, elige la placa « Arduino Uno » y el puerto serie correspondiente y pulsa Subir. Abre el monitor serie a 9600 baudios para seguir los mensajes.
Variantes
La librería FastLED para efectos más ricos (Chase, Rainbow), o controlar el color con una orden serie recibida por Serial.
ruban-neopixel.ino
// Animation "marche" sur ruban NeoPixel (WS2812B).
#include <Adafruit_NeoPixel.h>
const int PIN = 6;
const int NB_LED = 16;
Adafruit_NeoPixel ruban(NB_LED, PIN, NEO_GRB + NEO_KHZ800);
int tete = 0;
void setup() {
ruban.begin();
ruban.setBrightness(60); // attention : 255 = jusque 3 A pour 60 LED !
Serial.begin(9600);
}
void loop() {
ruban.clear(); // eteint tout
// Une tete blanche + 4 cometes rouges qui se deplacent.
ruban.setPixelColor(tete, ruban.Color(255, 255, 255));
for (int i = 1; i <= 4; i++) {
int pos = (tete - i + NB_LED) % NB_LED;
ruban.setPixelColor(pos, ruban.Color(255 - i * 50, 0, 0));
}
ruban.show(); // une seule trame serial vers les LED
tete = (tete + 1) % NB_LED;
delay(80);
}