/* pour ATtiny 85
Restet VCC
PB3/A3 PB2/A1/SCL
PB4/A2 PB1
GND PB0/SDA
============== */
#include <Bounce2.h>
Bounce2::Button BPDetection = Bounce2::Button();
const int dureeAntiRebond = 10;
const byte pinDetection = PB2;
const byte pinLedsRouge1 = A2; // feux rouge A A2
const byte pinLedsRouge2 = A3; // feux rouge B A3
const int incrementLuminositeRouges = 2; // * Pas d'incrémentation de la luminosité. Plus la valeur est grande, moins la variation de luminosité sera progressive
const int intervalRouges = 6; // * Délai entre 2 incrémentations
const int luminositeMiniRouges = 0; // *
const int luminositeMaxiRouges = 250; // *
int luminositeLedsRouges = luminositeMiniRouges;
uint32_t previousMillisRouges = 0ul; // Temps précédent état led rouge en millisecondes
enum etatRouges {
Rouges_INIT,
Rouges_UP,
Rouges_DOWN,
};
etatRouges etatLedsRouges = Rouges_INIT;
bool flagExtinction = false;
void afficheLedsRouges(){
uint32_t currentMillisRouges = millis();
if (currentMillisRouges - previousMillisRouges >= intervalRouges) {
previousMillisRouges = currentMillisRouges;
switch (etatLedsRouges) {
case Rouges_UP:
luminositeLedsRouges += incrementLuminositeRouges;
if (luminositeLedsRouges >= luminositeMaxiRouges) {
etatLedsRouges = Rouges_DOWN;
}
break;
case Rouges_DOWN:
luminositeLedsRouges -= incrementLuminositeRouges;
if (luminositeLedsRouges <= luminositeMiniRouges) {
if (flagExtinction) {
flagExtinction = false;
etatLedsRouges = Rouges_INIT;
} else {
etatLedsRouges = Rouges_UP;
} // Fin de if (flagExtinction)
} // Fin de if (luminositeLedsRouges <= luminositeMiniRouges)
break;
} // Fin de switch (etatLedsRouges)
analogWrite(pinLedsRouge1, luminositeLedsRouges);
analogWrite(pinLedsRouge2, luminositeLedsRouges);
} // Fin de if (currentMillisRouges - previousMillisRouges >= tempoRouges)
} // Fin de procédure afficheLedRouge()
void setup() {
BPDetection.attach(pinDetection, INPUT_PULLUP);
BPDetection.interval(dureeAntiRebond);
pinMode(pinLedsRouge1, OUTPUT);
pinMode(pinLedsRouge2, OUTPUT);
} // Fin de Setup()
void loop() {
BPDetection.update();
if (BPDetection.changed()){
if (BPDetection.fell()){ // Si le bouton est enfoncé
flagExtinction = false;
etatLedsRouges = Rouges_UP; // Allumer les LEDs rouges
} else if (BPDetection.rose()){ // Si le bouton est relâché
flagExtinction = true; // Éteindre les LEDs rouges
}
}
afficheLedsRouges();
} // Fin de loop()