#include <OneButton.h>
const uint8_t nbLeds = 10;
uint8_t nbLedsAllumees = 0;
const uint8_t pinBPpause = 10;
const uint8_t pinBP30s = 11;
const uint8_t pinBP20s = 12;
const unsigned long tempsClignotageNouvelleLed20s = 2000; // deux seconde
const unsigned long tempsClignotageNouvelleLed30s = 3000; // trois seconde
unsigned long chrono;
enum {REPOS, MODE20s, MODE30s} etat = REPOS;
OneButton buttonPause(pinBPpause);
OneButton button20s(pinBP20s);
OneButton button30s(pinBP30s);
void eteindre() {
// à écrire
// ...
nbLedsAllumees = 0;
Serial.println("extinction de LEDs");
}
void callback20s() {
eteindre();
chrono = millis() - tempsClignotageNouvelleLed20s;
etat = MODE20s;
Serial.println("Passage en mode 20s");
}
void callback30s() {
eteindre();
chrono = millis() - tempsClignotageNouvelleLed30s;
etat = MODE30s;
Serial.println("Passage en mode 30s");
}
void pause() {
eteindre();
etat = REPOS;
Serial.println("Passage en Pause");
}
void gestionAnimation() {
switch (etat) {
case REPOS: break; // rien à faire
// on pourrait regrouper les 2 modes si on prenait une variable qu'on initialisait
// pour la durée dans le call back puisque tout le reste est identique.
// ici ce n'est pas fait pour simplifier la vision de la machine à états
case MODE20s:
if (millis() - chrono >= tempsClignotageNouvelleLed20s) {
if (++nbLedsAllumees > nbLeds) {
Serial.println("Toutes les LEDs on été allumées");
pause();
} else {
Serial.print("Mode 20s - #leds = ");
Serial.println(nbLedsAllumees);
}
chrono = millis();
}
break;
case MODE30s:
if (millis() - chrono >= tempsClignotageNouvelleLed30s) {
if (++nbLedsAllumees > nbLeds) {
Serial.println("Toutes les LEDs on été allumées");
pause();
} else {
Serial.print("Mode 30s - #leds = ");
Serial.println(nbLedsAllumees);
}
chrono = millis();
}
break;
}
}
void setup() {
Serial.begin(115200);
button20s.attachClick(callback20s);
button30s.attachClick(callback30s);
buttonPause.attachClick(pause);
Serial.println("C'EST PARTI !!");
}
void loop() {
buttonPause.tick();
button20s.tick();
button30s.tick();
gestionAnimation();
}
PAUSE
20s
30s