#include <Adafruit_NeoPixel.h>
// Définir le nombre de LED, la broche de données et la durée de chaque mode
#define NUM_LEDS 25
#define DATA_PIN 6
#define MODE_DURATION 5000 // Durée de chaque mode en millisecondes (5 secondes)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800);
int effect = 0; // Variable pour suivre l'effet actuel
unsigned long previousMillis = 0; // Stocker le temps précédent
void setup() {
strip.begin();
strip.show(); // Initialiser toutes les LEDs à 'off'
strip.setBrightness(50); // Ajuster la luminosité
// Initialiser la communication série
Serial.begin(9600);
Serial.println("Mode initial: 0 - Balayage rouge");
}
void loop() {
unsigned long currentMillis = millis();
// Changer de mode toutes les 5 secondes
if (currentMillis - previousMillis >= MODE_DURATION) {
previousMillis = currentMillis;
// Indicateur de changement de mode : toutes les LEDs passent au blanc
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, strip.Color(255, 255, 255));
}
strip.show();
delay(200); // Attendre 200 ms
effect = (effect + 1) % 6; // Passer à l'effet suivant
Serial.print("Mode actuel: ");
Serial.println(effect);
}
// Appliquer l'effet en fonction de la variable effect
switch (effect) {
case 0:
Serial.println("Mode 0 - Balayage rouge");
colorWipe(strip.Color(255, 0, 0), 50); // Effet de balayage rouge
break;
case 1:
Serial.println("Mode 1 - Cycle arc-en-ciel");
rainbowCycle(20); // Effet de cycle arc-en-ciel
break;
case 2:
Serial.println("Mode 2 - Théâtre bleu");
theaterChase(strip.Color(0, 0, 255), 50); // Effet de théâtre bleu
break;
case 3:
Serial.println("Mode 3 - Balayage vert");
colorWipe(strip.Color(0, 255, 0), 50); // Effet de balayage vert
break;
case 4:
Serial.println("Mode 4 - Arc-en-ciel simple");
rainbow(10); // Effet arc-en-ciel simple
break;
case 5:
Serial.println("Mode 5 - Théâtre arc-en-ciel");
theaterChaseRainbow(50); // Effet de théâtre arc-en-ciel
break;
}
}
// Fonction pour l'effet de balayage de couleur
void colorWipe(uint32_t color, int wait) {
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, color);
strip.show();
delay(wait);
}
}
// Fonction pour l'effet de cycle arc-en-ciel
void rainbowCycle(int wait) {
for (int j = 0; j < 256 * 5; j++) { // 5 cycles de toutes les couleurs
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}
strip.show();
delay(wait);
}
}
// Fonction pour l'effet de théâtre
void theaterChase(uint32_t color, int wait) {
for (int j = 0; j < 10; j++) { // 10 cycles de clignotement
for (int q = 0; q < 3; q++) {
for (int i = 0; i < strip.numPixels(); i += 3) {
strip.setPixelColor(i + q, color); // Allumer chaque troisième LED
}
strip.show();
delay(wait);
for (int i = 0; i < strip.numPixels(); i += 3) {
strip.setPixelColor(i + q, 0); // Éteindre chaque troisième LED
}
}
}
}
// Fonction pour l'effet arc-en-ciel simple
void rainbow(int wait) {
for (int j = 0; j < 256; j++) {
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i + j) & 255));
}
strip.show();
delay(wait);
}
}
// Fonction pour l'effet de théâtre arc-en-ciel
void theaterChaseRainbow(int wait) {
for (int j = 0; j < 256; j++) {
for (int q = 0; q < 3; q++) {
for (int i = 0; i < strip.numPixels(); i += 3) {
strip.setPixelColor(i + q, Wheel((i + j) % 255)); // Allumer chaque troisième LED avec une couleur arc-en-ciel
}
strip.show();
delay(wait);
for (int i = 0; i < strip.numPixels(); i += 3) {
strip.setPixelColor(i + q, 0); // Éteindre chaque troisième LED
}
}
}
}
// Fonction pour générer des couleurs arc-en-ciel
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}