#include <FastLED.h>
#include <OneButton.h>
//====== FastLED ========
#define NUM_LEDS 85
#define DATA_PIN 3
CRGB leds[NUM_LEDS];
//=======================
const byte pinEffet1 = 4;
const byte pinEffet2 = 5;
OneButton b1(pinEffet1), b2(pinEffet2);
//================================
// les animations
void noEffectFunc();
void remplirFunc();
void scanFunc();
void (*ptrToAnimation)() = noEffectFunc;
void choixEffet1() {
ptrToAnimation = remplirFunc;
}
void choixEffet2() {
ptrToAnimation = scanFunc;
}
void setup() {
b1.attachClick(choixEffet1);
b2.attachClick(choixEffet2);
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
FastLED.clear(); // éteint toutes les leds
Serial.begin(115200);
}
void loop() {
b1.tick();
b2.tick();
ptrToAnimation();
}
void noEffectFunc() {
for (int i; i < NUM_LEDS; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
}
void remplirFunc() {
static unsigned long previousMillis_remplir = 0;
static const long interval_remplir = 200;
static int State_remplir = 0;
unsigned long currentMillis_remplir = millis();
if ((currentMillis_remplir - previousMillis_remplir) >= interval_remplir) {
switch (State_remplir) {
case 0:
FastLED.clear();
leds[0] = CRGB::Red;
leds[33] = CRGB::Red;
leds[34] = CRGB::Red;
leds[67] = CRGB::Red;
leds[68] = CRGB::Red;
State_remplir = 1;
break;
case 1:
leds[1] = CRGB::Red;
leds[32] = CRGB::Red;
leds[35] = CRGB::Red;
leds[66] = CRGB::Red;
leds[69] = CRGB::Red;
State_remplir = 2;
break;
case 2:
leds[2] = CRGB::Red;
leds[31] = CRGB::Red;
leds[36] = CRGB::Red;
leds[65] = CRGB::Red;
leds[70] = CRGB::Red;
State_remplir = 3;
break;
case 3:
leds[3] = CRGB::Red;
leds[30] = CRGB::Red;
leds[37] = CRGB::Red;
leds[64] = CRGB::Red;
leds[71] = CRGB::Red;
State_remplir = 4;
break;
case 4:
leds[4] = CRGB::Red;
leds[29] = CRGB::Red;
leds[38] = CRGB::Red;
leds[63] = CRGB::Red;
leds[72] = CRGB::Red;
State_remplir = 5;
break;
case 5:
leds[5] = CRGB::Red;
leds[28] = CRGB::Red;
leds[39] = CRGB::Red;
leds[62] = CRGB::Red;
leds[73] = CRGB::Red;
State_remplir = 6;
break;
case 6:
leds[6] = CRGB::Red;
leds[27] = CRGB::Red;
leds[40] = CRGB::Red;
leds[61] = CRGB::Red;
leds[74] = CRGB::Red;
State_remplir = 7;
break;
case 7:
leds[7] = CRGB::Red;
leds[26] = CRGB::Red;
leds[41] = CRGB::Red;
leds[60] = CRGB::Red;
leds[75] = CRGB::Red;
State_remplir = 8;
break;
case 8:
leds[8] = CRGB::Red;
leds[25] = CRGB::Red;
leds[42] = CRGB::Red;
leds[59] = CRGB::Red;
leds[76] = CRGB::Red;
State_remplir = 9;
break;
case 9:
leds[9] = CRGB::Red;
leds[24] = CRGB::Red;
leds[43] = CRGB::Red;
leds[58] = CRGB::Red;
leds[77] = CRGB::Red;
State_remplir = 10;
break;
case 10:
leds[10] = CRGB::Red;
leds[23] = CRGB::Red;
leds[44] = CRGB::Red;
leds[57] = CRGB::Red;
leds[78] = CRGB::Red;
State_remplir = 11;
break;
case 11:
leds[11] = CRGB::Red;
leds[22] = CRGB::Red;
leds[45] = CRGB::Red;
leds[56] = CRGB::Red;
leds[79] = CRGB::Red;
State_remplir = 12;
break;
case 12:
leds[12] = CRGB::Red;
leds[21] = CRGB::Red;
leds[46] = CRGB::Red;
leds[55] = CRGB::Red;
leds[80] = CRGB::Red;
State_remplir = 13;
break;
case 13:
leds[13] = CRGB::Red;
leds[20] = CRGB::Red;
leds[47] = CRGB::Red;
leds[54] = CRGB::Red;
leds[81] = CRGB::Red;
State_remplir = 14;
break;
case 14:
leds[14] = CRGB::Red;
leds[19] = CRGB::Red;
leds[48] = CRGB::Red;
leds[53] = CRGB::Red;
leds[82] = CRGB::Red;
State_remplir = 15;
break;
case 15:
leds[15] = CRGB::Red;
leds[18] = CRGB::Red;
leds[49] = CRGB::Red;
leds[52] = CRGB::Red;
leds[83] = CRGB::Red;
State_remplir = 16;
break;
case 16:
leds[16] = CRGB::Red;
leds[17] = CRGB::Red;
leds[50] = CRGB::Red;
leds[51] = CRGB::Red;
leds[84] = CRGB::Red;
State_remplir = 17;
break;
case 17:
fill_solid(leds, NUM_LEDS, CRGB::Black);
previousMillis_remplir = 0;
State_remplir = 0;
break;
}
FastLED.show();
previousMillis_remplir = currentMillis_remplir;
}
}
void scanFunc() {
static unsigned long previousMillis_scan = 0;
static const long interval_scan = 200;
static int State_scan = 0;
unsigned long currentMillis_scan = millis();
if ((currentMillis_scan - previousMillis_scan) >= interval_scan) {
switch (State_scan) {
case 0:
FastLED.clear();
leds[0] = CRGB::Red;
leds[33] = CRGB::Red;
leds[34] = CRGB::Red;
leds[67] = CRGB::Red;
leds[68] = CRGB::Red;
State_scan = 1;
break;
case 1:
leds[1] = CRGB::Red;
leds[32] = CRGB::Red;
leds[35] = CRGB::Red;
leds[66] = CRGB::Red;
leds[69] = CRGB::Red;
leds[0] = CRGB::Black;
leds[33] = CRGB::Black;
leds[34] = CRGB::Black;
leds[67] = CRGB::Black;
leds[68] = CRGB::Black;
State_scan = 2;
break;
case 2:
leds[2] = CRGB::Red;
leds[31] = CRGB::Red;
leds[36] = CRGB::Red;
leds[65] = CRGB::Red;
leds[70] = CRGB::Red;
leds[1] = CRGB::Black;
leds[32] = CRGB::Black;
leds[35] = CRGB::Black;
leds[66] = CRGB::Black;
leds[69] = CRGB::Black;
State_scan = 3;
break;
case 3:
leds[3] = CRGB::Red;
leds[30] = CRGB::Red;
leds[37] = CRGB::Red;
leds[64] = CRGB::Red;
leds[71] = CRGB::Red;
leds[2] = CRGB::Black;
leds[31] = CRGB::Black;
leds[36] = CRGB::Black;
leds[65] = CRGB::Black;
leds[70] = CRGB::Black;
State_scan = 4;
break;
case 4:
leds[4] = CRGB::Red;
leds[29] = CRGB::Red;
leds[38] = CRGB::Red;
leds[63] = CRGB::Red;
leds[72] = CRGB::Red;
leds[3] = CRGB::Black;
leds[30] = CRGB::Black;
leds[37] = CRGB::Black;
leds[64] = CRGB::Black;
leds[71] = CRGB::Black;
State_scan = 5;
break;
case 5:
leds[5] = CRGB::Red;
leds[28] = CRGB::Red;
leds[39] = CRGB::Red;
leds[62] = CRGB::Red;
leds[73] = CRGB::Red;
leds[4] = CRGB::Black;
leds[29] = CRGB::Black;
leds[38] = CRGB::Black;
leds[63] = CRGB::Black;
leds[72] = CRGB::Black;
State_scan = 6;
break;
case 6:
leds[6] = CRGB::Red;
leds[27] = CRGB::Red;
leds[40] = CRGB::Red;
leds[61] = CRGB::Red;
leds[74] = CRGB::Red;
leds[5] = CRGB::Black;
leds[28] = CRGB::Black;
leds[39] = CRGB::Black;
leds[62] = CRGB::Black;
leds[73] = CRGB::Black;
State_scan = 7;
break;
case 7:
leds[7] = CRGB::Red;
leds[26] = CRGB::Red;
leds[41] = CRGB::Red;
leds[60] = CRGB::Red;
leds[75] = CRGB::Red;
leds[6] = CRGB::Black;
leds[27] = CRGB::Black;
leds[40] = CRGB::Black;
leds[61] = CRGB::Black;
leds[74] = CRGB::Black;
State_scan = 8;
break;
case 8:
leds[8] = CRGB::Red;
leds[25] = CRGB::Red;
leds[42] = CRGB::Red;
leds[59] = CRGB::Red;
leds[76] = CRGB::Red;
leds[7] = CRGB::Black;
leds[26] = CRGB::Black;
leds[41] = CRGB::Black;
leds[60] = CRGB::Black;
leds[75] = CRGB::Black;
State_scan = 9;
break;
case 9:
leds[9] = CRGB::Red;
leds[24] = CRGB::Red;
leds[43] = CRGB::Red;
leds[58] = CRGB::Red;
leds[77] = CRGB::Red;
leds[8] = CRGB::Black;
leds[25] = CRGB::Black;
leds[42] = CRGB::Black;
leds[59] = CRGB::Black;
leds[76] = CRGB::Black;
State_scan = 10;
break;
case 10:
leds[10] = CRGB::Red;
leds[23] = CRGB::Red;
leds[44] = CRGB::Red;
leds[57] = CRGB::Red;
leds[78] = CRGB::Red;
leds[9] = CRGB::Black;
leds[24] = CRGB::Black;
leds[43] = CRGB::Black;
leds[58] = CRGB::Black;
leds[77] = CRGB::Black;
State_scan = 11;
break;
case 11:
leds[11] = CRGB::Red;
leds[22] = CRGB::Red;
leds[45] = CRGB::Red;
leds[56] = CRGB::Red;
leds[79] = CRGB::Red;
leds[10] = CRGB::Black;
leds[23] = CRGB::Black;
leds[44] = CRGB::Black;
leds[57] = CRGB::Black;
leds[78] = CRGB::Black;
State_scan = 12;
break;
case 12:
leds[12] = CRGB::Red;
leds[21] = CRGB::Red;
leds[46] = CRGB::Red;
leds[55] = CRGB::Red;
leds[80] = CRGB::Red;
leds[11] = CRGB::Black;
leds[22] = CRGB::Black;
leds[45] = CRGB::Black;
leds[56] = CRGB::Black;
leds[79] = CRGB::Black;
State_scan = 13;
break;
case 13:
leds[13] = CRGB::Red;
leds[20] = CRGB::Red;
leds[47] = CRGB::Red;
leds[54] = CRGB::Red;
leds[81] = CRGB::Red;
leds[12] = CRGB::Black;
leds[21] = CRGB::Black;
leds[46] = CRGB::Black;
leds[55] = CRGB::Black;
leds[80] = CRGB::Black;
State_scan = 14;
break;
case 14:
leds[14] = CRGB::Red;
leds[19] = CRGB::Red;
leds[48] = CRGB::Red;
leds[53] = CRGB::Red;
leds[82] = CRGB::Red;
leds[13] = CRGB::Black;
leds[20] = CRGB::Black;
leds[47] = CRGB::Black;
leds[54] = CRGB::Black;
leds[81] = CRGB::Black;
State_scan = 15;
break;
case 15:
leds[15] = CRGB::Red;
leds[18] = CRGB::Red;
leds[49] = CRGB::Red;
leds[52] = CRGB::Red;
leds[83] = CRGB::Red;
leds[14] = CRGB::Black;
leds[19] = CRGB::Black;
leds[48] = CRGB::Black;
leds[53] = CRGB::Black;
leds[82] = CRGB::Black;
State_scan = 16;
break;
case 16:
leds[16] = CRGB::Red;
leds[17] = CRGB::Red;
leds[50] = CRGB::Red;
leds[51] = CRGB::Red;
leds[84] = CRGB::Red;
leds[15] = CRGB::Black;
leds[18] = CRGB::Black;
leds[49] = CRGB::Black;
leds[52] = CRGB::Black;
leds[83] = CRGB::Black;
State_scan = 17;
break;
case 17:
leds[16] = CRGB::Black;
leds[17] = CRGB::Black;
leds[50] = CRGB::Black;
leds[51] = CRGB::Black;
leds[84] = CRGB::Black;
State_scan = 18;
break;
case 18:
fill_solid(leds, NUM_LEDS, CRGB::Black);
previousMillis_scan = 0;
State_scan = 0;
break;
}
FastLED.show();
previousMillis_scan = currentMillis_scan;
}
}