/*attiny monostable non redéclenchable tempo reglable millis V2
Dominique Hudry
06/03/2025
lien:
A la mise sous tension la led est éteinte
si appui furtif ou maintenu du BP la led s'allume durant une temporisation réglable puis s'éteint
le BP doit être relaché puis appuyé pour relancer une nouvelle temporisation
*/
const byte PinBP = 0; // branchement du BP
const byte Sortie = 1; // branchement de la Led
const byte PinPot = A2; // branchement curseur du potentiomètre
bool etatBP; // BP relâché: HIGH BP appuyé: LOW
bool tempoActive = false;
unsigned long tempoDepart = 0;
bool validation = false;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50; // délai de débounce en millisecondes
void setup() {
pinMode(Sortie, OUTPUT);
digitalWrite(Sortie, LOW);
pinMode(PinBP, INPUT_PULLUP);
}
void loop() {
int temporisation = analogRead(PinPot);
temporisation = map(temporisation, 0, 1023, 1, 10) * 1000; // tempo comprise entre 1 et 10s
etatBP = digitalRead(PinBP); // lecture de l'état du BP
if ((millis() - lastDebounceTime) > debounceDelay) {
if (etatBP == HIGH) {
validation = true;
}
if (etatBP == LOW && validation && !tempoActive) { // conditions pour un déclenchement
digitalWrite(Sortie, HIGH); // la Led s'allume durant la durée réglée
tempoActive = true; // la temporisation est activée
tempoDepart = millis();
validation = false; // bloquer les redéclenchements
}
lastDebounceTime = millis();
}
if (tempoActive && (millis() - tempoDepart) >= temporisation) { // Si la temporisation est active et écoulée
digitalWrite(Sortie, LOW);
tempoActive = false;
}
}
tiny:PB5
tiny:PB3
tiny:PB4
tiny:GND
tiny:PB0
tiny:PB1
tiny:PB2
tiny:VCC
led1:A
led1:C
r1:1
r1:2
pot1:GND
pot1:SIG
pot1:VCC
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r