erreurs dans un programme pour telecomande

bonsoir a tous,

suite a mon précédent post avec votre aide j ais enfin réussi a installer la librairie IR remote

mon petit projet que j’essaye de faire c’est avec une led infrarouge de télévision

ses de commander deux leds avec deux telecomande différente !

je m’explique :smiley:

en utilisant une touche(on) de une telecomande j’allume une led pendant 5 seconde

et avec une autre telecomande(touche ON differente une en NEC et l autre en RC5) je peut également allumer cette même led pendant le même temps
bien entendu pas en même temps!

puis en avec une autre touche OFF de la première telecomande j’allume l’autre led pendant 5secondes
et avec la deuxième toujours sur la touche OFF j’allume cette meme led pendant le même temps!

donc j ais essayer a plusieur reprise d’ecrire un petit programme tous seul en me servant des info un peu partout mais voilaa!!

forcement sa ne compile pas !! :confused: (sa m’aurais etonner du contraire) :slight_smile:

je vous post se que j ais realisé et si vous pouvez jeté un coup d’oeil pour me dire se qui ne va

sa serais le top ! :slight_smile:

#include <boarddefs.h>                    //inclue les librairie
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>



const byte  LED3  =3;  //led sur la pin3
const byte  LED4  =4;  //led sur la pin 4
int bright;
int before;
int RECV_PIN = 11;    //ir sur la led 11
decode_results results;

 void setup(){

    before =0;
    bright=255;
    pinMode(out,OUTPUT);

    void loop(){

  if (irrecv.decode(&results)){
    if (results.value==0xfb9, 12){            //si la valeur lue est fb9  (12bits)
    }
      if (results.value==0x40bf50af, 32){     //si la valeur lue est 40bf50af  (32bits)
        digitalWrite (LED3,HIGH);             // alors on allime la led 3
        delay (5100);                         //pendant 5seconde1
        digitalWrite (LED,LOW);               //et on l'eteint

  if (results.value==0x7ba, 12){              //si la valeur lue est 7ba  (12bits)
    if (results.value==0x40bf906f, 32){       //si la valeur lue est 40bf906f  (32bits)
      digitalWrite (LED4,HIGH);               //on allume la led 4
      delay (5100);                           //pendant 5 seconde 1
      digitalWrite (LED4,LOW);                //puis on l'eteint
    }
  }

        
      }
    }
  }
 }

merci d’avance! :wink:

bonjour,
déjà c'est quoi l'erreur à la compile?

il manque un } en fin de setup

réorganise ton code et mets toutes les } au bon endroit, là c'est le foutoir :wink:

Hmmm ça fait beaucoup de bibliothèques pour allumer une led!
Des if qui s'emboîtent les uns dans les autres, ça sent pas super bon ^^
Quand tu es dans IDE, tu fais Ctrl+T, ça va organiser un peu mieux tout ça et faciliter la relecture.

Où avez vous lu que

if (results.value==0xfb9, 12){            //si la valeur lue est fb9  (12bits)
}

effectuait un test sur 12 bits???

Ce test là, tel qu’ecrit Revient à faireif (12){}ce qui est toujours vrai…mais bon avec les 2 accolades {} juste après de toutes façons vous ne faites rien… ce if ne sert donc strictement à rien et le compilateur va virer purement et simplement ce code :slight_smile:

Par contre ça va mal se passer pour

if (results.value==0x40bf50af, 32){     //si la valeur lue est 40bf50af  (32bits)
...

car ce test revient à faire tel qu’ecritif (32){...ce qui est toujours vrai…

il faut juste écrire

if (results.value == 0x40bf50af){     //si la valeur lue est 0x40bf50af
...

et idéalement vous auriez déclaré un

#define BOUTON_ON (0x40bf50af)
// ou alors 
// const uint32_t BOUTON_ON = 0x40bf50af; // code bouton ON de a télécommande ...

et faire ensuite un

if (results.value == BOUTON_ON){     //si on appuie sur le bouton ON de la télécommande #1 (ou ce que ça représente je ne sais pas quel code vous avez là)
...

bonsoir a tous,

tous d’abord merci pour vos réponses,j’ais essayer de refaire un autre programme avec l 'aide

d’exemple qu il y a sur le net et j 'ais presque trouvé celui qui me convient mais je n’arrive

pas a le modifié ! :confused:

quand je compile j’ais toujour l’erreur

"exit statut 1

expected ‘;’ before ‘digitalWrite’ "

j ais beau regarder mais je ne vois pas ou j’ais oublié le point virgule!!

voici le code:

merci d’avance.

#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; //

void setup()
{
 Serial.begin(9600); // permet de vérifier sur le moniteur série si le code de la touche est le bon
 // sinon cette ligne n'est pas nécessaire
 RCEP.enableIRIn(); // Commencement de la réception
 pinMode(LED3, OUTPUT);
 pinMode(LED4, OUTPUT);
 digitalWrite (LED3,LOW);
 digitalWrite (LED4,LOW);
}

void loop()
{
 if (RCEP.decode(&RIR)) // si il y a une réception sur le capteur
 {
 Serial.println(RIR.value, DEC); // vérification du code de la touche actionnée sur le moniteur série
 // sinon cette ligne n'est pas nécessaire
 if (RIR.value == 16738455) // si touche 0 actionnée
 {
 digitalWrite(LED3, LOW); // Les LED s'éteignent
 digitalWrite(LED4, LOW);
 }

 if(RIR.value == 16724175) // si touche 1 actionnée
 {
 digitalWrite(LED3, HIGH); // La LED verte s'allume
 delay (5100)
 digitalWrite(LED3, LOW);
 delay (500);
 }

 if(RIR.value == 16718055) // si touche 2 actionnée
 {
 digitalWrite(LED4, HIGH); // La LED Rouge s'allume
 }
 RCEP.resume(); // Réception de la prochaine valeur

 }
}

Regarde mieux : delay (5100)

bonsoir lesept

oui merci !!!

justement j’allais vous renvoyer un post en vous disant que j avais vue mon erreur!! :slight_smile:

en regardant de plus prés et en relisant toute les lignes effectivement je me suis aperçu que j’ais oublié celle ci!!! :stuck_out_tongue:

je vous poste le programme fini et fonctionne a merveille pour ceux ou celle a qui cela pourrait interésser!!

merci encore de vôtres aide et surtout de votre patience je me doute que pour des gens comme vous qualifié en

la matière nous les débutants faut ce les tartiné…!! :smiley:

(j’ais enlever les delays a la fin de chaque bloc ses plus reactif :wink: )

#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; //

void setup()
{
 Serial.begin(9600); // permet de vérifier sur le moniteur série si le code de la touche est le bon
 // sinon cette ligne n'est pas nécessaire
 RCEP.enableIRIn(); // Commencement de la réception
 pinMode(LED3, OUTPUT);
 pinMode(LED4, OUTPUT);
 digitalWrite (LED3,LOW);
 digitalWrite (LED4,LOW);
}

void loop()
{
 if (RCEP.decode(&RIR)) // si il y a une réception sur le capteur
 {
 Serial.println(RIR.value, DEC); // vérification du code de la touche actionnée sur le moniteur série
 // sinon cette ligne n'est pas nécessaire
 if (RIR.value == 16738455) // si touche 0 actionnée
 {
 digitalWrite(LED3, LOW); // Les LED s'éteignent
 digitalWrite(LED4, LOW);
 }

 if(RIR.value ==0xfb9) // si touche 1 actionnée
 {
 digitalWrite(LED3, HIGH); // La LED verte s'allume
 delay (5100);
 digitalWrite(LED3, LOW);
 
 }
 if(RIR.value ==0x40bf50af)
 {
  digitalWrite(LED3,HIGH);
  delay (5100);
  digitalWrite(LED3,LOW);
  
 }
 if(RIR.value ==0x40bf906f)
 {
  digitalWrite(LED4,HIGH);
  delay (5100);
  digitalWrite(LED4,LOW);
  
 }

 if(RIR.value ==0x7ba) // si touche 2 actionnée
 {
 digitalWrite(LED4, HIGH); // La LED Rouge s'allume
 delay (5100);
 digitalWrite(LED4,LOW);
 
 }
 RCEP.resume(); // Réception de la prochaine valeur

 }
}

pour information portée de la télécommande 55metres! :wink:

claas900:

 if (RIR.value == 16738455) // si touche 0 actionnée

vous pourriez améliorer la lisibilité de votre code comme mentionné plus haut en déclarant des constantes avec un petit nom sympa..

const unsigned long toucheZero = 16738455ul;
...
if (RIR.value == toucheZero) // C'EST BCP PLUS LISIBLE COMME CELA

Vous devriez aussi être cohérent dans l'usage du décimal ou de l'hexa pour vos constantes (même si ça change rien, c'est pour la lisibilité)

claas900:

 if(RIR.value ==0xfb9) // si touche 1 actionnée

Pour voir le code en hexadécimal de la touche zéro si vous ne le connaissez pas vous pouvez modifier votre ligne

 Serial.println(RIR.value, DEC); // vérification du code de la touche actionnée sur le moniteur série

et la transformer en

 Serial.print("0x");
Serial.println(RIR.value, HEX); // vérification du code de la touche actionnée sur le moniteur série EN HEXA

vous devriez aussi appuyer sur ctrl-T dans l'éditeur pour indenter correctement le code... là c'est pas beau.... :slight_smile: