ruban-neopixel.ino
Les WS2812 exigent des timing serrés : le core R4 les génère proprement via les timers du RA4M1. Une tête blanche suivie d'une traînée colorée sert de premier banc d'essai d'adresseables sur la carte.
Matériel requis
Une Arduino UNO R4 Minima (Renesas RA4M1, Cortex-M4 @ 14 MHz, 5 V, DAC 12 bits, sans radio) alimentée par USB ou 6-24 V. 1 ruban 16 LED NeoPixel + alimentation 5 V externe.
Câblage
Data sur D6 via résistance 330 Ω, VCC sur 5 V externe, GND commun avec le R4.
Fonctionnement
setPixelColor remplit le tampon, show() envoie la trame WS2812 d'un bloc. Le modulo fait tourner la tête le long du ruban à ~14 Hz.
Exécution
Arduino IDE 2.x (core « Arduino UNO R4 Boards » installé), choisir « Arduino UNO R4 Minima », sélectionner le port et Téléverser. Le moniteur série est à 9600.
Variantes
Synchroniser le ruban avec le DAC (sortie audio) ou la matrice LED (R4 WiFi) pour un spectacle lumineux combiné.
ruban-neopixel.ino
// Ruban NeoPixel 16 LED sur D6 (Adafruit_NeoPixel sur core R4).
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel ruban(16, 6, NEO_GRB + NEO_KHZ800);
unsigned long t0 = 0;
int tete = 0;
void setup() {
ruban.begin();
ruban.setBrightness(60);
Serial.begin(9600);
}
void loop() {
if (millis() - t0 < 70) return;
t0 = millis();
ruban.clear();
ruban.setPixelColor(tete, ruban.Color(255, 255, 255));
for (int i = 1; i <= 4; i++) {
int pos = (tete - i + 16) % 16;
ruban.setPixelColor(pos, ruban.Color(255 - i * 55, 40, 120));
}
ruban.show();
tete = (tete + 1) % 16;
}
// La trame WS2812 est generee par timers/DMA du RA4M1 :
// le rendu est impeccable meme a pleine vitesse.