/*attiny double monostable non redéclenchable millis
  27/11/2024
  Dominique Hudry
  lien: https://wokwi.com/projects/415718805341184001

             ATtiny85

           =|1  U  8|= VCC
  BP2 -->3 =|2     7|= 2
  BP1 -->4 =|3     6|= 1--> Sortie2
       GND =|4     5|= 0--> Sortie1
*/


const byte PinBP1 = 4; // branchement du BP1
const byte PinBP2 = 3; // branchement du BP2
const byte Sortie1 = 0; // branchement de la Led1
const byte Sortie2 = 1; // branchement de la Led2
const int Temporisation = 1000;
bool validation1 = false;
bool validation2 = false;
bool tempoActive1 = false;
bool tempoActive2 = false;
unsigned long tempoDepart1 = 0;
unsigned long tempoDepart2 = 0;

void setup() {
  pinMode(Sortie1, OUTPUT);
  pinMode(Sortie2, OUTPUT);
  digitalWrite(Sortie1, LOW);
  digitalWrite(Sortie2, LOW);
  pinMode(PinBP1, INPUT_PULLUP);
  pinMode(PinBP2, INPUT_PULLUP);
} // fin setup

void loop() {  
  bool etatBP1 = digitalRead (PinBP1); // lecture de l'état du BP1
  delay(50); // pour anti rebond
  if (etatBP1 == HIGH ) {
    validation1 = true;
  } 

  if (etatBP1 == LOW && validation1 == true && tempoActive1== false) { // conditions pour un déclenchement
    digitalWrite(Sortie1, HIGH); // la Led1 s'allume durant la temporisation
    tempoActive1 = true;         // la temporisation est activée
    tempoDepart1 = millis();
  }

  if (tempoActive1) { // Si la temporisation est active,
    if (( millis() - tempoDepart1) >= Temporisation ) { // Et si la temporisation est écoulée
      digitalWrite(Sortie1, LOW);
      tempoActive1 = false;
      validation1= false; // les redéclenchements sont bloqués
    }
  }

  bool etatBP2 = digitalRead (PinBP2); // lecture de l'état du BP2
  delay(50); // pour anti rebond
  if (etatBP2 == HIGH ) {
    validation2 = true;
  } 

  if (etatBP2 == LOW && validation2 == true && tempoActive2 == false) { // conditions pour un déclenchement
    digitalWrite(Sortie2, HIGH); // la Led2 s'allume durant la temporisation
    tempoActive2 = true;     // la temporisation est activée
    tempoDepart2 = millis();
  }

  if (tempoActive2) { // Si la temporisation est active,
    if (( millis() - tempoDepart2) >= Temporisation ) { // Et si la temporisation est écoulée
      digitalWrite(Sortie2, LOW);
      tempoActive2 = false;
      validation2= false; // les redéclenchements sont bloqués
    }
  }
} // fin loop
ATTINY8520PU