J'en pense que j'ai pas de bol
Normalement, il attend que tu appuies sur une touche. Les LEDs ne s'allument que si tu appuies sur une touche.
On va debuguer et ajouter des Serial.print un peu partout : Essaye ça
#include <IRremote.h>
int IR = 11; // Récepteur IR en broche 11
const byte LED3 = 3; // led rouge en broche 3
const byte LED4 = 4; // led verte en broche 4
IRrecv RCEP(IR);
decode_results RIR; //
/*
On définit 4 états :
état 0 : attente d'une touche
état 1 : LED verte allumée, rouge éteinte, durée 2 sec puis retour à 0
état 2 : LED rouge allumée, verte étaeinte, durée 3 sec puis retour à 0
état 3 : on éteint les LED, retour à état 0
*/
int etat = 0;
unsigned long dureeEtat1 = 2000;
unsigned long dureeEtat2 = 3000;
unsigned long chrono1 = 0;
unsigned long chrono2 = 0;
void setup() {
Serial.begin(115200);
RCEP.enableIRIn(); // Commencement de la réception
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
digitalWrite (LED3, LOW);
digitalWrite (LED4, LOW);
}
void loop() {
Serial.print("Etat : ");
Serial.println(etat);
switch (etat) {
case 0:
if (RCEP.decode(&RIR)) // si il y a une réception sur le capteur
{
unsigned long valeur = RIR.value;
Serial.print("Valeur: ");
Serial.println(valeur);
if (valeur == 0xfb9 || valeur == 0x40bf50af) {
etat = 1;
digitalWrite(LED3, HIGH);
chrono1 = millis();
} else
if (valeur == 0x40bf906f || valeur == 0x7ba) {
etat = 2;
digitalWrite(LED4, HIGH);
chrono2 = millis();
} else
if (valeur == 0x40bf00ff) etat = 3;
} else Serial.println ("Touche non reconnue");
break;
case 1:
if (RCEP.decode(&RIR)) // si il y a une réception sur le capteur
{
unsigned long valeur = RIR.value;
Serial.print("Valeur: ");
Serial.println(valeur);
if (valeur == 0x40bf00ff) etat = 3;
}
else if (millis() - chrono1 > dureeEtat1) {
digitalWrite(LED3, LOW); // Les LED s'éteignent
digitalWrite(LED4, LOW);
etat = 0;
}
break;
case 2:
if (RCEP.decode(&RIR)) // si il y a une réception sur le capteur
{
unsigned long valeur = RIR.value;
Serial.print("Valeur: ");
Serial.println(valeur);
if (valeur == 0x40bf00ff) etat = 3;
}
else if (millis() - chrono2 > dureeEtat2) {
digitalWrite(LED3, LOW); // Les LED s'éteignent
digitalWrite(LED4, LOW);
etat = 0;
}
break;
case 3: // Interruption des commandes 1 et 2 uniquement
Serial.println("Extinection LEDs ");
digitalWrite(LED3, LOW); // Les LED s'éteignent
digitalWrite(LED4, LOW);
etat = 0;
break;
default:
Serial.println("Probleme : etat non reconnu.");
etat = 0;
break;
}
RCEP.resume(); // Réception de la prochaine valeur
}