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 Pro Mini (ATmega328P, existe en 5 V/16 MHz y 3,3 V/8 MHz) conectado a un convertidor USB-serie (FTDI) o un programador ICSP. 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
Elige « Arduino Pro Mini » en el IDE (5 V/16 MHz o 3,3 V/8 MHz según tu modelo), el procesador ATmega328P, el puerto correcto y Subir. El convertidor debe estar cableado DTR-DTR, RX-TX, TX-RX, VCC-VCC, GND-GND.
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);
}