bool transmissions[] = {false, false, false, false};
bool etapes[] = {false, false, false, false};
int capteurs[] = {5, 6, 7, 4};
int actions[] = {8, 9, 10, 11};
bool fincycle;
int nbetape = sizeof(etapes)-1;
unsigned long capteur2Time = 0;
bool capteur2Active = false;
const unsigned long capteur2Delay = 3000; // 3 secondes de temporisation pour le capteur 2
void setup() {
for(int i=0; i<=nbetape; i++){
pinMode(capteurs[i], INPUT_PULLUP);
pinMode(actions[i], OUTPUT);
}
etapes[0] = true;
fincycle = false;
}
void loop() {
cpt_listener();
activeetape();
actionner();
}
void cpt_listener(){
unsigned long currentMillis = millis();
// Vérifie si le temps écoulé est supérieur ou égal au délai du capteur 2
if(currentMillis - capteur2Time >= capteur2Delay) {
capteur2Active = true;
} else {
capteur2Active = false;
}
// Mise à jour de l'état des transmissions en fonction des capteurs
transmissions[0] = !digitalRead(capteurs[0]);
transmissions[1] = capteur2Active; // Utilisation du temporisateur pour le capteur 2
transmissions[2] = !digitalRead(capteurs[2]);
transmissions[3] = !digitalRead(capteurs[3]);
// Si capteur 2 est actif, passer au capteur suivant après 3 secondes
if (capteur2Active) {
capteur2Time = currentMillis; // Met à jour le temps pour le prochain déclenchement
}
}
void actionner(){
for(int i=0; i<=nbetape; i++){
digitalWrite(actions[i], etapes[i]);
}
}
void activeetape(){
for(int i=nbetape; i>0; i--){
etapes[i] = etapes[i-1] && transmissions[i-1] || etapes[i] && !transmissions[i];
}
etapes[0] = fincycle && transmissions[nbetape] || etapes[0] && !transmissions[0];
fincycle = etapes[nbetape];
}