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