#include <Toggle.h>
#include <FastLED.h>
const byte pinBouton20s = 2;
const byte pinBouton30s = 3;
Toggle bouton20s(pinBouton20s);
Toggle bouton30s(pinBouton30s);
unsigned long debut, chrono, duree;
const size_t NbPixels = 60;
size_t nbPixelsAllumes = 0;
CRGB leds[NbPixels];
enum {REPOS, COMPTE, ANIMATION_FIN} etat = REPOS;
void setup() {
Serial.begin(115200);
bouton20s.begin(pinBouton20s);
bouton30s.begin(pinBouton30s);
FastLED.addLeds<WS2811, A0, GRB>(leds, NbPixels);
FastLED.setBrightness(255);
fill_solid(leds, NbPixels, CRGB::Black);
FastLED.show();
}
void loop() {
bouton20s.poll();
bouton30s.poll();
switch (etat) {
case REPOS:
if (bouton20s.onPress()) {
debut = millis();
duree = 20000;
etat = COMPTE;
} else if (bouton30s.onPress()) {
debut = millis();
duree = 30000;
etat = COMPTE;
}
break;
case COMPTE:
if (bouton20s.onPress() || bouton30s.onPress()) {// un appui pendant le décompte annule la séquence
etat = ANIMATION_FIN;
} else {
unsigned long deltaT = millis() - debut;
size_t nouveauNbPixelsAllumes = map(deltaT, 0, duree, 0, NbPixels);
if (nouveauNbPixelsAllumes != nbPixelsAllumes) {
nbPixelsAllumes = nouveauNbPixelsAllumes;
fill_solid(leds, nbPixelsAllumes, CRGB::Red); FastLED.show();
Serial.print(deltaT / 1000.0, 1); Serial.print(F("s\t=>\t"));
Serial.print(nbPixelsAllumes); Serial.println(F(" pixels"));
if (nbPixelsAllumes >= NbPixels) etat = ANIMATION_FIN;
}
}
break;
case ANIMATION_FIN:
Serial.println(F("FIN"));
fill_solid(leds, NbPixels, CRGB::Green); FastLED.show();
delay(200);
fill_solid(leds, NbPixels, CRGB::Black); FastLED.show();
nbPixelsAllumes = 0;
etat = REPOS;
break;
}
}
20s
30s