Bon je te propose cette version :
#include <IRremote.h> //bibliotheque de decodage, ATTENTION ne fonctionne qu'avec la bibliothèque "Arduino-IRremote-master" à installer (j'ai les deux d'installés !!!)
#include <FastLED.h>
//déclaration des constantes :
const int IR_BROCHE = 5; //shield IR de sunfounder sur broche 5
#define LED_BROCHE 11 // Numéro de broche de la bande de LEDs
#define LED_TYPE WS2812B // Définition du type de LEDs
#define COLOR_ORDER GRB // Définition de l'ordre des couleurs
#define NOMBRE_LED 60 // Définition du nombre de leds (ici 60)
int sortir;
// Chaque led représente un élément d'un tableau. Pour modifier les données d'une led on viendra modifier l'élément correspondant dans le tableau led.
CRGB led[NOMBRE_LED]; //tableau à 60 colonne, numérotation à partir de 0
// Définition d'une liste "Couleur", qui contiendra les "couleurs" nécessaires à nos scénaris (dans le setup) :
CRGB Couleur[5];
//Déclaration des variables, objet (Capteur IR) :
IRrecv irrecv(IR_BROCHE); //création de l'objet "irrecv"
decode_results resultat; //mettre le résultat du décodage dans resultat
//déclaratin des variables :
int luminosite = 0; //luminosité de la led (0 : éteinte, 255 max)
uint32_t ref_temps; //pour la gestion du temps
uint8_t scenario = 0;
//***************fin entête déclarative**************************
void setup()
{
Serial.begin(9600); //initialisation du moniteur série
Serial.println("Début setup");
irrecv.enableIRIn(); //activation de la bibliothèque IR
FastLED.addLeds<LED_TYPE, LED_BROCHE, COLOR_ORDER>(led, NOMBRE_LED).setCorrection( TypicalLEDStrip ); //mise en place générateur de scénario
//Mise en place de la liste des "couleurs" utilisées dans le programme :
Couleur[0] = CRGB(255, 0, 0); // Rouge
Couleur[1] = CRGB(0, 255, 0); // Vert
Couleur[2] = CRGB(0, 0, 255); // Bleu
Couleur[3] = CRGB(255, 255, 255); // Blanc
Couleur[4] = CRGB(0, 0, 0); // Éteint
Serial.println("Fin setup");
}//***************************fin du setup***********************************
void loop() {
// put your main code here, to run repeatedly:
switch (scenario) {
case 0:
//erreur
scenario = IRcode();
break;
case 1 :
scenario1();
break;
case 2:
//scenario2();
break;
case 3 :
//scenario3();
break;
case 4 :
// Arrêt
scenario = IRcode();
break;
}
}
uint8_t IRcode() {
static uint8_t result = 0;
//sortir: //retour ici si demande d'arrêt scénario par télécommande
//choix scénario par télécommande à IR :
if (irrecv.decode(&resultat)) //si le récepteur IR reçoit des données
{
//Serial.print("Commande IR reçue, code hexa : ");
//Serial.println ( resultat.value , HEX) ;
//code 1 = 0xFF30CF, code 2 = 0xFF18E7, code 3 = 0xFF7A85, code arrêt = 0xFFA25D, code pause/lecture = 0xFF22DD
if (resultat.value == 0xFF30CF) result = 1;
else if (resultat.value == 0xFF18E7) result = 2;
else if (resultat.value == 0xFF7A85) result = 3;
else if (resultat.value == 0xFFA25D) result = 4;
else resultat = 0;
irrecv.resume(); //reset le récepteur et le prépare pour recevoir un autre code
}
return result;
}
//**********************sous programmes***********************************
//scénario 1****************************************************************************************************
void scenario1()
{
uint8_t change = 0;
for (int i = 0; i < 4 ; i++) //pour les 4 premières couleurs définies en setup
{
for (int z = 0; z < 60 ; z++) //pour les 60 leds (n° 0 à 59)
{
led[z] = Couleur[i]; //affectation leds <-> couleur (la même ici)
}
// Boucle for permettant d'augmenter progressivement la luminosité
for ( luminosite = 0; luminosite <= 250; luminosite++)
{
FastLED.setBrightness(luminosite);
FastLED.show();
ref_temps = millis();
while ((millis() - ref_temps <= 20) & !change)
{
scenario = IRcode();
if(scenario != 1){
change = 1;
break;
}
}
if (change) break;
}
// Boucle for permettant de diminuer progressivement la luminosité
for ( luminosite = 250; luminosite >= 0; luminosite = --)
{
FastLED.setBrightness(luminosite);
FastLED.show();
ref_temps = millis();
while ((millis() - ref_temps <= 20) & !change)
{
scenario = IRcode();
if(scenario != 1){
change = 1;
break;
}
}
if (change) {
for (int i=0;i<=NOMBRE_LED;i++) //optionnel on éteint la lumière avant de partir
{
led[i]=CRGB::Black;
}
break;
}
}
}//fin boucle for
Serial.println("Fin scenario 1");
}//fin scénario 1