commander 2 relais avec télécommande ir

bonjour à tous et à toute,

mon projet consiste à commander 2 relais avec un arduino et une télécommande ir.

voici mon programme:

#include <IRremote.h>
#include <IRremoteInt.h>

int relais1 = 6; 
int relais2 = 7;
int receptionIr = 11;          //La sortie du signal du récepteur Infrarouge (patte de gauche pour ce modéle) est connecté a la broche 2 
int etat = 0;                 //l'état de la LED (0 pour éteinte et 1 pour allumé

IRrecv irrecv(receptionIr);   //Initialisation de la récepteion du réceptur Infrarouge 

decode_results resultat;      //Stock le code reçus dans resultat  

void setup()
  {
  irrecv.enableIRIn();        //Activation de la réception 
  pinMode(relais1, OUTPUT);
  pinMode(relais2, OUTPUT);   //Declaration de relais en sortie
  etat=0;                     //etat indique si la LED est éteinte (etat=0) ou si elle est allumé (etat=1)
  }

void loop() 
{
  
  if (irrecv.decode(&resultat))       //Si il y a reception d'un code qui est stocké dans resulat 
 {

  if (resultat.value==0xFF30CF)       //Si le code reçus vaut le code du bouton que vous avez programmés (ici c'est 0xFF30CF qui est égale au bouton 1 de ma télécommande)
  
  //Ici l'Arduino vas basculer d'une position a une autre
  { 
    
  if(etat==0)                      //si etat=0
   {
      digitalWrite(relais1,HIGH);   //Ici le relais est a l'état haut (il est alimenté)
      etat=1;                      //etat est maintenant a 1
      
   } //fin du if

   else if(etat==1)             //sinon, si etat=1
   {
    digitalWrite(relais1,LOW);   //Ici le relais est a l'etat bas (il n'est pas alimenté)
    etat=0;                     //etat est maintenant a 0
    
   }    //fin du else if
   
  }   //Fin du if 
   
    
     
     
  
   
   
   
   
   
   
   
   
   if (irrecv.decode(&resultat))       //Si il y a reception d'un code qui est stocké dans resulat 
 {

  if (resultat.value==0xFF18E7)       //Si le code reçus vaut le code du bouton que vous avez programmés (ici c'est 0xFF18E7 qui est égale au bouton 2 de ma télécommande)
  
  //Ici l'Arduino vas basculer d'une position a une autre
  { 
    
  if(etat==0)                      //si etat=0
   {
      digitalWrite(relais2,HIGH);   //Ici le relais est a l'état haut (il est alimenté)
      etat=1;                      //etat est maintenant a 1
      
   } //fin du if

   else if(etat==1)             //sinon, si etat=1
   {
    digitalWrite(relais2,LOW);   //Ici le relais est a l'etat bas (il n'est pas alimenté)
    etat=0;                     //etat est maintenant a 0
    
   }    //fin du else if
   
  }   //Fin du if 
   
    irrecv.resume();          //Il ce prépare a recevoir le prochain code  
     
 }    //Fin du if 


  
 } //fin boucle 
}

Celui-ci fonctionne très bien, mis a part qu'il faut que j'appuis plusieurs fois sur les touches pour que l'action se produise.
je voudrais donc connaitre l'erreur ainsi qu'un moyen pour y remédier.
Merci d'avance! :smiley:

Bonjour,
Ici c'est la rubrique des projets finis.
Fait déplacer ton topic dans la bonne rubrique en cliquant sur le lien report to moderator.
@+

Bonjour,

A première vue, d'après le programme ça devrait fonctionner.
Affiche les codes que tu reçois sur le moniteur série pour voir si tu reçoit bien les touches.

bonjour,
il faut que tu appuie plusieurs fois, car si tu appuie trop longtemps, tu vas recevoir plusieurs fois la même commande.
donc il va dire, ben je recois 0xFF30CF0xFF30CF0xFF30CF donc pas bon
je dois recevoir juste 0xFF30CF

ca fait comme un rebond
donc un petit delay ou la fonction millis pour palier à ca.

après, ton code peut être simplifié largement

int etat = 0; // en début de code

if (resultat.value==0xFF30CF){
etat =!etat;
digitalWrite(relais1,etat);
}

ou encore

etat =!etat;
digitalWrite((relais1 etat ? HIGH : LOW);
dump(&results);