#include <Adafruit_NeoPixel.h>
#define PIN_NEOPIXEL 6 // Broche connectée au DIN de l'anneau
#define NUM_LEDS 12 // Nombre de LED sur l'anneau
// Temps d'attente entre deux animations (en millisecondes)
const unsigned long TEMPS_ATTENTE = 10000; // 10 secondes
Adafruit_NeoPixel pixels(NUM_LEDS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin();
pixels.setBrightness(50);
pixels.clear();
pixels.show();
// Initialise le générateur de nombres aléatoires sur une broche non connectée (A0)
randomSeed(analogRead(A0));
}
void loop() {
// 1. CHOIX DE LA COULEUR ALÉATOIRE
// On génère un nombre entre 0 et 5 pour choisir une couleur
int choixCouleur = random(0, 6);
uint32_t couleurPrincipale;
uint32_t couleurTrainee;
switch (choixCouleur) {
case 0: // Vert Alien
couleurPrincipale = pixels.Color(0, 255, 0);
couleurTrainee = pixels.Color(0, 80, 0);
break;
case 1: // Bleu Futuriste
couleurPrincipale = pixels.Color(0, 0, 255);
couleurTrainee = pixels.Color(0, 0, 80);
break;
case 2: // Rouge Alerte
couleurPrincipale = pixels.Color(255, 0, 0);
couleurTrainee = pixels.Color(80, 0, 0);
break;
case 3: // Violet Plasma
couleurPrincipale = pixels.Color(200, 0, 255);
couleurTrainee = pixels.Color(60, 0, 80);
break;
case 4: // Cyan Hyperespace
couleurPrincipale = pixels.Color(0, 255, 255);
couleurTrainee = pixels.Color(0, 80, 80);
break;
case 5: // Jaune Énergie
couleurPrincipale = pixels.Color(255, 200, 0);
couleurTrainee = pixels.Color(80, 60, 0);
break;
}
// 2. DÉBUT DE L'ANIMATION (5 rotations avec la couleur choisie)
for (int tours = 0; tours < 5; tours++) {
for (int i = 0; i < NUM_LEDS; i++) {
pixels.clear();
// LED principale
pixels.setPixelColor(i, couleurPrincipale);
// Traînée lumineuse arrière
int prev = (i - 1 + NUM_LEDS) % NUM_LEDS;
pixels.setPixelColor(prev, couleurTrainee);
pixels.show();
delay(60); // Vitesse de rotation
}
}
// 3. FIN DE L'ANIMATION : On éteint tout
pixels.clear();
pixels.show();
// 4. PAUSE INTERMÉDIAIRE avant le prochain changement de couleur
delay(TEMPS_ATTENTE);
}