/*attiny double monostable non redéclenchable
27/11/2024
Dominique Hudry
lien: https://wokwi.com/projects/415706945891665921
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; // durée de l'allumage de la Led
bool etatBP1;// BP relaché: HIGH BP appuyé: LOW
bool etatBP2;// BP relaché: HIGH BP appuyé: LOW
bool precedentEtatBP1 = HIGH;
bool precedentEtatBP2 = HIGH;
bool validation1;
bool validation2;
unsigned long TempsDernierChangement1 = 0; // variable pour mémoriser le temps écoulé depuis le dernier changement de la LED
unsigned long TempsDernierChangement2 = 0;
unsigned long TempsActuel1;
unsigned long TempsActuel2;
const int interval = 500;
void setup() {
pinMode(PinBP1, INPUT_PULLUP);
pinMode(PinBP2, INPUT_PULLUP);
pinMode(Sortie1, OUTPUT);
pinMode(Sortie2, OUTPUT);
digitalWrite(Sortie1, LOW);
digitalWrite(Sortie2, LOW);
} // fin setup
void loop() {
etatBP1 = digitalRead (PinBP1); // lecture de l'état du BP1
delay(50); // pour anti rebond
if (etatBP1 == HIGH ) {
validation1 = true;
}
if (etatBP1 == LOW && validation1 == true) { // conditions pour un déclenchement
digitalWrite(Sortie1, HIGH); // la Led1 s'allume durant une durée déterminée
TempsActuel1 = millis(); // stocke la valeur actuelle de la fonction millis()
if (TempsActuel1 - TempsDernierChangement1 > interval) {
TempsDernierChangement1 = TempsActuel1; // mémorise la valeur de la fonction millis()
digitalWrite(Sortie1, LOW);
validation1 = false; // les redéclenchements sont bloqués
}
}
etatBP2 = digitalRead (PinBP2); // lecture de l'état du BP2
delay(50); // pour anti rebond
if (etatBP2 == HIGH ) {
validation2 = true;
}
if (etatBP2 == LOW && validation2 == true) { // conditions pour un déclenchement
digitalWrite(Sortie2, HIGH); // la Led2 s'allume durant une durée déterminée
TempsActuel2 = millis(); // stocke la valeur actuelle de la fonction millis()
if (TempsActuel2 - TempsDernierChangement2 > interval) {
TempsDernierChangement2 = TempsActuel2; // mémorise la valeur de la fonction millis()
digitalWrite(Sortie2, LOW);
validation2 = false; // les redéclenchements sont bloqués
}
}
} // fin loop