Bonjour,
Voici mon problème : J'utilise un bandeau led adressable de 85 leds en tant que matrice led (17 par 5). J'essaye de faire un programme qui me permet de changer d'animation (que j'ai créé) avec une télécommande IR. J'ai déjà pu améliorer mon code en enlevant tout les delay() qui m'empêchait de lire le bouton de la télécommande en même temps qu'une animation. Mais mon problème est toujours présent : je n'arrive pas à changer l'animation de la matrice avec ma télécommande. Enfin, je peux seulement si l'animation est à une vitesse lente, mais si j'augmente la vitesse d'animation, c'est comme si le programme n'avait pas le temps de lire l'information de la télécommande. (les variables de vitesses des animation sont : "const long interval_remplir = 200;" et "const long interval_scan = 200;"
Voici le code :
//Librairie
#include <FastLED.h>
#include <IRremote.h>
//====== FastLED ========
#define NUM_LEDS 85
#define DATA_PIN 3
CRGB leds[NUM_LEDS];
//=======================
//====== IRremote ========
const char DIN_RECEPTEUR_IR = 4;
IRrecv recepteurIR(DIN_RECEPTEUR_IR);
decode_results messageRecu;
//========================
//====== Variables de temps ======
unsigned long previousMillis_remplir = 0;
const long interval_remplir = 200;
int start_remplir = 0;
unsigned long previousMillis_scan = 0;
const long interval_scan = 200;
int start_scan = 0;
//================================
//====== Variables de States ======
int State_remplir;
int State_scan;
//=================================
//====== Variables effectState ======
int effectState;
const int remplir = 1;
const int scan = 2;
//===================================
void setup() {
recepteurIR.enableIRIn();
recepteurIR.blink13(true);
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
FastLED.clear(); // éteint toutes les leds
Serial.begin(9600);
noEffectFunc();
}
void loop() {
read_IR_remote();
switch (effectState) {
case 1:
remplirFunc();
break;
case 2:
scanFunc();
break;
}
}
void noEffectFunc() {
for (int i; i < NUM_LEDS; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
Serial.println("Reset Leds");
}
void remplirFunc() {
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() {
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;
}
}
//====== Fonction pour lire les touches de la télécommandes ======
void read_IR_remote() {
Serial.println("test");
if (recepteurIR.decode(&messageRecu)) {
if (messageRecu.value == 0xFFA25D) {
Serial.println("Touche 1 appuyée");
State_remplir = 0;
noEffectFunc();
effectState = remplir;
}
else if (messageRecu.value == 0xFF629D) {
Serial.println("Touche 2 appuyée");
State_scan = 0;
noEffectFunc();
effectState = scan;
}
recepteurIR.resume();
}
}
//================================================================