const int buttonPin = 2; // Broche du bouton poussoir
int buttonState = 0; // Variable pour lire l'état du bouton
int lastButtonState = 0; // Variable pour stocker l'état précédent du bouton // Variable pour suivre l'effet actuel
////////////////////////////////////////////////////////////////////////////////////////////
#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 15
#define DATA_PIN 9
#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
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
strip.begin();
strip.show(); // Initialiser toutes les LEDs à 'off'
strip.setBrightness(50); // Ajuster la luminosité
// Initialiser la communication série
Serial.println("Mode initial: 0 - Balayage rouge");
}
void loop() {
buttonState = digitalRead(buttonPin);
// Détection du relâchement du bouton (passage de HIGH à LOW)
if (lastButtonState == HIGH && buttonState == LOW) {
effect++;
Serial.print("Mode actuel: ");
Serial.println(effect);
if (effect > 5) {
effect = 0;
}
delay(200); // Anti-rebond pour éviter les multiples détections
}
// Mise à jour de l'état précédent du bouton
lastButtonState = buttonState;
// Affichage des variables sur le moniteur série
Serial.print("LastButton: ");
Serial.print(lastButtonState);
Serial.print("|");
Serial.print("Button State: ");
Serial.print(buttonState);
Serial.print("|");
// 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 - Balayage vert");
colorWipe(strip.Color(0, 255, 0), 50); // Effet de balayage vert
break;
case 2:
Serial.println("Mode 2 - Balayage bleu");
colorWipe(strip.Color(0, 0, 255), 50); // Effet de balayage vert
break;
case 3:
Serial.println("Mode 3 - Théâtre bleu");
theaterChase(strip.Color(0, 0, 255), 50); // Effet de théâtre bleu
break;
case 4:
Serial.println("Mode 4 - Théâtre vert");
theaterChase(strip.Color(0, 255, 0), 50); // Effet de théâtre vert
break;
case 5:
Serial.println("Mode 5 - Théâtre Rouge");
theaterChase(strip.Color(255, 0, 0), 50); // Effet de théâtre rouge
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 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
}
}
}
}