// Définir les pins pour le bouton et les relais
const int buttonPin = 2; // Pin pour le bouton
const int relay1Pin = 8; // Pin pour le relais 1
const int relay2Pin = 9; // Pin pour le relais 2
// Variables pour suivre le temps d'activation des relais
unsigned long relay1StartTime = 0;
unsigned long relay2StartTime = 0;
// Variables pour suivre l'état des relais
bool relay1Active = false;
bool relay2Active = false;
// Variables pour le délai de réinitialisation
unsigned long relay1ResetTime = 0;
unsigned long relay2ResetTime = 0;
void setup() {
// Initialiser les pins des relais comme sorties
pinMode(relay1Pin, OUTPUT);
pinMode(relay2Pin, OUTPUT);
// Initialiser la pin du bouton comme entrée avec pull-up interne
pinMode(buttonPin, INPUT_PULLUP);
// Désactiver les relais au démarrage
digitalWrite(relay1Pin, LOW);
digitalWrite(relay2Pin, LOW);
}
void loop() {
// Lire l'état du bouton
int buttonState = digitalRead(buttonPin);
unsigned long currentTime = millis();
// Vérifier si le délai de réinitialisation est écoulé pour le relais 1
if (relay1ResetTime != 0 && (currentTime - relay1ResetTime >= 10000)) {
relay1ResetTime = 0;
}
// Vérifier si le délai de réinitialisation est écoulé pour le relais 2
if (relay2ResetTime != 0 && (currentTime - relay2ResetTime >= 10000)) {
relay2ResetTime = 0;
}
// Si le bouton est appuyé (LOW avec pull-up interne)
if (buttonState == LOW) {
// Gérer le relais 1
if (!relay1Active && relay1ResetTime == 0) {
relay1StartTime = currentTime;
relay1Active = true;
digitalWrite(relay1Pin, HIGH);
}
// Gérer le relais 2
if (!relay2Active && relay2ResetTime == 0) {
relay2StartTime = currentTime;
relay2Active = true;
digitalWrite(relay2Pin, HIGH);
}
}
// Vérifier le temps de fonctionnement du relais 1
if (relay1Active && (currentTime - relay1StartTime >= 9000)) {
digitalWrite(relay1Pin, LOW);
relay1Active = false;
relay1ResetTime = currentTime;
}
// Vérifier le temps de fonctionnement du relais 2
if (relay2Active && (currentTime - relay2StartTime >= 10000)) {
digitalWrite(relay2Pin, LOW);
relay2Active = false;
relay2ResetTime = currentTime;
}
// Si le bouton n'est pas appuyé, désactiver les relais immédiatement
if (buttonState == HIGH) {
if (relay1Active) {
digitalWrite(relay1Pin, LOW);
relay1Active = false;
}
if (relay2Active) {
digitalWrite(relay2Pin, LOW);
relay2Active = false;
}
}
}