ruban-neopixel.ino
Un dégradé bleu-vert sinusoïdal glisse sur 24 LED NeoPixel. Le CPU 32 bits très rapide du Teensy calcule les couleurs en flottant à 25 images/s sans effort, ce qu'un AVR ne peut pas se permettre.
Matériel requis
Un Teensy 4.0 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, logique 3,3 V) alimenté par USB. 1 ruban 24 LED NeoPixel (WS2812B) + alimentation 5 V externe.
Câblage
Data sur la broche 22 (résistance 330 Ω), VCC sur 5 V externe, GND commun avec le Teensy (3,3 V tolérant 5 V en data).
Fonctionnement
setPixelColor charge la mémoire tampon, show() envoie la trame WS2812. Le déphasage sinusoïdal par index crée une vague continue animée à 25 Hz.
Exécution
Avec Teensyduino dans l'Arduino IDE, choisir « Teensy 4.0 », Téléverser puis valider dans le Teensy Loader. Les broches sont en 3,3 V ; le 4.0 est pin-compatible avec le 3.2.
Variantes
Utiliser la bibliothèque Audio pour synchroniser les couleurs sur un microphone, ou FastLED pour des effets prêts à l'emploi.
ruban-neopixel.ino
// Ruban NeoPixel via la bibliotheque Adafruit_NeoPixel (core Teensy OK).
#include <Adafruit_NeoPixel.h>
const int PIN = 22;
const int NB = 24;
Adafruit_NeoPixel ruban(NB, PIN, NEO_GRB + NEO_KHZ800);
uint32_t bleu = ruban.Color(0, 0, 200);
uint32_t vert = ruban.Color(0, 200, 0);
unsigned long t0 = 0;
void setup() {
ruban.begin();
ruban.setBrightness(80);
Serial.begin(9600);
}
void loop() {
if (millis() - t0 < 40) return;
t0 = millis();
static float phase = 0;
phase += 0.08;
for (int i = 0; i < NB; i++) {
// Gradient deplace : interpolation sinusoidale bleu/vert.
float x = 0.5 + 0.5 * sinf(phase + i * 0.35);
uint8_t r = 0;
uint8_t g = (uint8_t)(x * 255);
uint8_t b = (uint8_t)((1.0 - x) * 255);
ruban.setPixelColor(i, ruban.Color(r, g, b));
}
ruban.show();
}