/*attiny adaptation FC51 sortie inversée
   27/11/2024
   Dominique Hudry
      double monostable commandé par des niveaux HIGH
   - au repos la sortie des capteurs sont au niveau LOW, les leds sont éteintes
   - si détection, la sortie du capteur passe au niveau HIGH et création d'une impulsion
     en sortie de niveau LOW qui allume la led reliée au +
   lien: 
   
              ATtiny85

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


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 = 2000;
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, HIGH); // les leds sont éteintes
  digitalWrite(Sortie2, HIGH);
  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 == LOW ) { // si le capteur est au repos
    validation1 = true;
  }

    if (etatBP1 == HIGH && validation1 == true && tempoActive1 == false) { // conditions pour un déclenchement
    digitalWrite(Sortie1, LOW);  // la Led1 s'allume durant la temporisatio
    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, HIGH); // la Led1 s'éteint
      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 == LOW ) {  // si le capteur est au repos
    validation2 = true;
  }

  if (etatBP2 == HIGH && validation2 == true && tempoActive2 == false) { // conditions pour un déclenchement
    digitalWrite(Sortie2, LOW); // 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, HIGH); // la Led2 s'éteint
      tempoActive2 = false;
      validation2 = false; // les redéclenchements sont bloqués
    }
  }
  
} // fin loop
ATTINY8520PU