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