Bonjour à tous !
J'avance un peu dans mon projet, et je vous partagerai tout une fois ce dernier terminé.
Je rencontre néanmoins un problème lors de l'utilisation d'une télécommande et d'un récepteur infrarouge au sein d'un programme de manipulation de bandeaux LEDs.
En effet, "à blanc", quand je cherche le code hexa correspondant aux différentes touches, ces derniers apparaissent constants sur le moniteur série.
Cependant, lorsque je l'utilise dans mon code, les résultats (pour une même touche), changent constamment, ce qui rend l'utilisation impossible... J'ai beau jongler avec les différentes versions et syntaxes de la librairie, rien n'y fait.
Exemple en appuyant une dizaine de fois sur "2" :
Voici mon code (je mets deux codes de LEDs pour exemple) :
#include <FastLED.h>
#include <IRremote.h>
//=========================
//Definition pour IRremote
//=========================
const int RECV_PIN = 12;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long key_value = 0;
int currentFunction = 1; // start with function1()
//=========================
//Definition pour FastLED
//=========================
// On définit les PINS sur lesquels sont connectés les bandeaux
const int ledStrip1 = 2;
const int ledStrip2 = 4;
const int ledStrip3 = 6;
const int ledStrip4 = 8;
const int ledStrip5 = 10;
// Nombre de LEDs par bandeau
const int numLEDs = 29;
// Define the starting values
int hue = 0;
int frame = 0;
// Define the arrays of LED colors for each strip
CRGB leds1[numLEDs];
CRGB leds2[numLEDs];
CRGB leds3[numLEDs];
CRGB leds4[numLEDs];
CRGB leds5[numLEDs];
//==========================
//==========SETUP===========
//==========================
void setup() {
delay(2000); // sanity delay
//Setup pour IRremote
//=====================
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
//Setup pour FastLED
//=====================
FastLED.addLeds<WS2812B, ledStrip1, GRB>(leds1, numLEDs);
FastLED.addLeds<WS2812B, ledStrip2, GRB>(leds2, numLEDs);
FastLED.addLeds<WS2812B, ledStrip3, GRB>(leds3, numLEDs);
FastLED.addLeds<WS2812B, ledStrip4, GRB>(leds4, numLEDs);
FastLED.addLeds<WS2812B, ledStrip5, GRB>(leds5, numLEDs);
}
void loop()
{
if (irrecv.decode(&results)){
Serial.println(results.value, HEX);
if (results.value == 0XFFFFFFFF){
results.value = key_value;}
switch (results.value) {
case 0xFF30CF:
currentFunction = 1;
break;
case 0xFF18E7:
currentFunction = 2;
break;
case 0xFF7A85:
propulsion() ; // pour tester si le problème n'était pas le switch, mais ce n'est pas le cas...
break;
case 0xFF10EF:
currentFunction = 4;
break;
case 0xFF38C7:
currentFunction = 5;
break;
case 0xFF5AA5:
currentFunction = 6;
break;
case 0xFF42BD:
currentFunction = 7;
break;
case 0xFF4AB5:
currentFunction = 8;
break;
case 0xFF52AD:
currentFunction = 9;
break;
case 0xFF6897:
currentFunction = 10;
break;
case 0xFFE01F:
currentFunction--;
if (currentFunction < 1) {
currentFunction = 10;
}
break;
case 0xFF906F:
currentFunction++;
if (currentFunction > 10) {
currentFunction = 1;
}
break;
}
key_value = results.value;
irrecv.resume();
}
// call the current function
switch (currentFunction) {
case 1:
uniforme(0, 255, 255) ;
break;
case 2:
uniforme_flashs(255, 255, 255) ;
break;
case 3:
propulsion() ;
break;
case 4:
spirale(255, 0, 0, 255, 255, 255);
break;
case 5:
rainbow() ;
break;
case 6:
gradBlancOrangeAlt() ;
break;
case 7:
gradJauneOrangeRougeAlt() ;
break;
case 8:
bizarre() ;
break;
case 9:
HautBas() ;
break;
case 10:
flickering();
break;
}
//=====================================================================
//=====================================================================
//==========================COULEUR UNIFORME===========================
//=====================================================================
//=====================================================================
void uniforme(int r, int g, int b)
{
for (int i = 0; i < numLEDs ; i++)
{
leds1[i] = CRGB(r, g, b);
leds2[i] = CRGB(r, g, b);
leds3[i] = CRGB(r, g, b);
leds4[i] = CRGB(r, g, b);
leds5[i] = CRGB(r, g, b);
FastLED.show();
FastLED.setBrightness(100);
delay(10);
}
}
//=====================================================================
//=====================================================================
//===============================RAINBOW===============================
//=====================================================================
//=====================================================================
void rainbow()
{
// Set all LEDs to a color based on their position and the current hue value
for (int i = 0; i < numLEDs; i++) {
//leds[numLEDs - 1 - i] = CHSV(0 + (i * 60 / numLEDs), 255, 255);
//leds[numLEDs - 1 - i] = CHSV((hue + 128 + (i * 256 / numLEDs)) % 256, 200, 200);
leds1[numLEDs - 1 - i] = CHSV(hue + (i * 256 / numLEDs), 255, 200);
leds2[numLEDs - 1 - i] = CHSV(hue + (i * 256 / numLEDs), 255, 200);
leds3[numLEDs - 1 - i] = CHSV(hue + (i * 256 / numLEDs), 255, 200);
leds4[numLEDs - 1 - i] = CHSV(hue + (i * 256 / numLEDs), 255, 200);
leds5[numLEDs - 1 - i] = CHSV(hue + (i * 256 / numLEDs), 255, 200);
}
// Update the LED strips
FastLED.show();
// Increase the hue value and wrap around if necessary
hue+=2;
if (hue > 255) {
hue = 0;
}
// Delay for a short period of time
delay(10);
}