#include <FastLED.h>
#include <OneButton.h>
const byte bandeBleuePin = 7;
const byte bandeRougePin = 8;
const byte bandeStripPin = 9;
const byte boutonBleuPin = 2;
const byte boutonRougePin = 3;
const byte boutonBlancPin = A4;
const int nbLedsScore = 3;
const int nbledBlanches = 10;
CRGB ledsBleues[nbLedsScore];
CRGB ledsRouges[nbLedsScore];
CRGB ledBlanches[nbledBlanches];
OneButton boutonBleu(boutonBleuPin, true);
OneButton boutonRouge(boutonRougePin, true);
int nbBleu = 0; // Nombre de leds bleues allumées
int nbRouge = 0; // Nombre de leds rouges allumées
int nbBlanc = 0; //nombre de led blanche/rouges alluméés
void appuiBleu() {
if (nbBleu < nbLedsScore) nbBleu++;
for (int i = nbBleu; i < nbLedsScore; i++) ledsBleues[i] = CRGB::Black;
if (nbBleu != 0)
for (int i = 0; i < nbBleu; i++) ledsBleues[i] = CRGB::Blue;
FastLED.show();
}
void appuiBleuLong() {
nbBleu = 0;
fill_solid(ledsBleues, nbLedsScore, CRGB::Black);
FastLED.show();
}
void appuiRouge() {
if (nbRouge < nbLedsScore) nbRouge++;
for (int i = nbRouge; i < nbLedsScore; i++) ledsRouges[i] = CRGB::Black;
if (nbRouge != 0)
for (int i = 0; i < nbRouge; i++) ledsRouges[i] = CRGB::Red;
FastLED.show();
}
void appuiRougeLong() {
nbRouge = 0;
fill_solid(ledsRouges, nbLedsScore, CRGB::Black);
FastLED.show();
}
void testBoutonBlanc() {
static bool boutonAppuye = false;
if (digitalRead(boutonBlancPin) == LOW) { // bouton en appui
if (! boutonAppuye) { // changement d'état
boutonAppuye = true;
fill_solid(ledBlanches, nbledBlanches, CRGB::Red);
FastLED.show();
delay(20); // anti bounce du pauvre
}
} else { // bouton pas appuyé
if (boutonAppuye) { // c'est le relâchement
boutonAppuye = false;
fill_solid(ledBlanches, nbledBlanches, CRGB::White);
FastLED.show();
delay(20); // anti bounce du pauvre
}
}
}
void setup() {
pinMode(boutonBlancPin, INPUT_PULLUP);
FastLED.addLeds<WS2812B, bandeBleuePin, GRB>(ledsBleues, nbLedsScore);
FastLED.addLeds<WS2812B, bandeRougePin, GRB>(ledsRouges, nbLedsScore);
FastLED.addLeds<WS2812B, bandeStripPin, GRB>(ledBlanches, nbledBlanches);
boutonBleu.attachClick(appuiBleu);
boutonRouge.attachClick(appuiRouge);
boutonBleu.attachLongPressStart(appuiBleuLong);
boutonRouge.attachLongPressStart(appuiRougeLong);
fill_solid(ledBlanches, nbledBlanches, CRGB::White);
FastLED.show();
Serial.begin(115200);
Serial.println("PRET");
}
void loop() {
boutonBleu.tick();
boutonRouge.tick();
testBoutonBlanc();
// ici vous pouvez faire autre chose de non bloquant
}