/*arduino tempo non bloquante
25/10/2022
temporisation unique faite avec millis pour remplacer delay
lien: https://forum.arduino.cc/t/temporiser-une-ventilation-avec-millis/409414/
pour exemple:
la temporisation visualisée par l'allumage d'une led commence quand un BP initialement à la masse est relaché
test: ok
*/
const byte Led = 13; // utilisation de la led intégrée
const byte BP = 4; // au repos il envoie une masse
const unsigned long ValeurTempo = 3000;
unsigned long tempoDepart = 0;
bool finTempo; // indique qu'une tempo ne s'est pas terminée
bool validationTempo; // autorise le lancement de la temporisation
void setup() {
Serial.begin(9600);
pinMode(Led , OUTPUT);
digitalWrite (Led, LOW); // led éteinte
pinMode(BP, INPUT_PULLUP);
finTempo = false;
} // fin setup
void loop() {
while (digitalRead(BP) == HIGH) { // tant que le BP est relaché tout est bloqué
digitalWrite (Led, LOW);
tempoDepart = millis();
}
///// le BP est pressé la temporisation va se faire 1 seule fois
if (finTempo == false) { // si une tempo n'a pas déja eu lieu
validationTempo = true; // alors on autorise son déroulement
digitalWrite (Led, HIGH); // pour indiquer le déroulement de la temporisation
Serial.println(" tempo en cours");
}
else { // finTempo == true
validationTempo = false;
} // fin else
if (validationTempo == true) {
if ( ( millis() - tempoDepart ) >= ValeurTempo ) { // Et si il s'est écoulé au moins la valeur de la temporisation
digitalWrite(Led, LOW);
validationTempo = false; // Et on désactive la temporisation puisque l'action a été faite
finTempo = true; // on indique que la temporisation est terminée
Serial.println("fin tempo");
}
}
/*
on place ici la suite du programme
Serial.println("la boucle continue" );
*/
}// fin loop