// Définition des broches pour les relais
const int relais1 = 2;
const int relais2 = 3;
const int relais3 = 4;
const int relais4 = 5;
const int relais5 = 6;
// Définition des broches pour les boutons
const int button1 = 7;
const int button2 = 8;
const int button3 = 9;
// Définition de la broche du potentiomètre
const int potPin = A0;
// Variables pour stocker l'état des boutons et du potentiomètre
bool button1State = false;
bool button2State = false;
bool button3State = false;
int potValue = 0;
// Variable pour garder une trace de l'animation en cours
unsigned long previousMillis = 0;
int currentStep = 0;
// Intervalle de temps pour l'animation
int interval = 0;
// Variable pour l'état du relais 5
bool relais5State = false;
bool lastButton3State = false;
// Variable pour savoir si l'animation était en cours avant l'activation du relais 5
bool animationWasRunning = false;
// Fonction d'initialisation
void setup() {
// Initialisation des broches relais comme sortie
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(relais3, OUTPUT);
pinMode(relais4, OUTPUT);
pinMode(relais5, OUTPUT);
// Initialisation des broches boutons comme entrée
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP);
}
// Fonction de boucle principale
void loop() {
// Lire l'état des boutons
button1State = digitalRead(button1) == LOW;
button2State = digitalRead(button2) == LOW;
button3State = digitalRead(button3) == LOW;
// Lire la valeur du potentiomètre
potValue = analogRead(potPin);
interval = map(potValue, 0, 1023, 100, 2000); // Mapping de la valeur pour obtenir un intervalle entre 100ms et 1000ms
// Gestion des relais en fonction de l'état des boutons
if (button1State && !relais5State) {
// Animation des relais 1, 2 et 3
animationWasRunning = true;
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
currentStep = (currentStep + 1) % 3;
digitalWrite(relais1, currentStep == 0);
digitalWrite(relais2, currentStep == 1);
digitalWrite(relais3, currentStep == 2);
}
} else {
// Désactivation des relais 1, 2 et 3
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
digitalWrite(relais3, LOW);
if (!button1State) {
animationWasRunning = false;
currentStep = 0;
}
}
if (button2State) {
// Activation du relais 4 comme un stroboscope
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
digitalWrite(relais3, LOW);
digitalWrite(relais4, millis() % 200 < 100); // Clignote toutes les 100ms
} else {
// Désactivation du relais 4
digitalWrite(relais4, LOW);
}
if (button3State && !lastButton3State) {
// Inverser l'état du relais 5
relais5State = !relais5State;
if (relais5State) {
// Désactiver l'animation si le relais 5 est activé
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
digitalWrite(relais3, LOW);
digitalWrite(relais4, LOW);
animationWasRunning = button1State; // Sauvegarder si l'animation était en cours
} else {
// Reprendre l'animation si elle était en cours
if (animationWasRunning && button1State) {
previousMillis = millis(); // Reprendre l'animation au même endroit
}
}
}
lastButton3State = button3State;
digitalWrite(relais5, relais5State);
}