/*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