Problème variable/IRremote

Bonjour/Bonsoir, j’aimerai savoir pourquoi l’IDE m’affiche “‘avance’ was not declared in this scope” lorsque je compile mon code*, de plus parfois quand le code est bon et que je compile, il m’affiche “exit status 1, Arduino/Genuino Uno n’est pas compatible”

#include <IRremote.h>
HEX pause=2FD50AF;
HEX reculer=2FD847;
HEX avancer=FFFFFFFF;
int pin1Moteur1=12; //pin de commande moteur 1
int pin2Moteur1=8; // pin de commande moteur 1
int pinPMoteur1=11;// pin PWM moteur 1
const char DIN_RECEPTEUR_INFRAROUGE = 2;

IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);

decode_results messageRecu;

void setup() {

Serial.begin(9600);
monRecepteurInfraRouge.enableIRIn();
monRecepteurInfraRouge.blink13(true);

pinMode(pin1Moteur1,OUTPUT);
pinMode(pin2Moteur1,OUTPUT);
pinMode(pinPMoteur1,OUTPUT);
}

void loop() {

if (monRecepteurInfraRouge.decode(&messageRecu)==pause){
Serial.println(“Le moteur s’arrete !”);
actionMoteur(1,-1,0); //moteur 1 100% puissance sens -1
monRecepteurInfraRouge.resume();

}
else if (monRecepteurInfraRouge.decode(&messageRecu)==avancer){
Serial.println(“Le moteur avance !”);
actionMoteur(1,1,100); //moteur 1 100% puissance sens 1
//attente de 5 secondes

}

else if (monRecepteurInfraRouge.decode(&messageRecu)==reculer){
actionMoteur(1,-1,100); //moteur 1 100% puissance sens -1
delay(500);

}
delay(1);
}

void actionMoteur(int moteur,int sens,int pourcentage){
int pin1,etat1,pin2,etat2,pinP,puissance; //variable de la fonction
//test numéro du moteur
if (moteur==1){
pin1=pin1Moteur1;
pin2=pin2Moteur1;
pinP=pinPMoteur1;
}
//test sens du moteur 1,-1 (sens contrainre) ou tout autre valeur (stoppe le moteur)
if (sens==1){
etat1=1;
etat2=0;
}
else if (sens==-1){
etat1=0;
etat2=1;
}
else {
etat1=0;
etat2=0;
}
puissance=map(pourcentage,0,100,0,255);
analogWrite(pinP,puissance);
digitalWrite(pin1,etat1);
digitalWrite(pin2,etat2);
//affichage sur le moniteur série (facultatif)
Serial.print("Moteur : “);
Serial.print(moteur);
if (sens==-1 || sens==1){
Serial.print(” sens : “);
Serial.print(sens);
}
else {
Serial.print(” ! stop ! “);
}
Serial.print(” puissance : ");
Serial.println(pourcentage);

}

I would like to know why the IDE shows me "'advance' was not declared in this scope" when I compile my code

Have you posted the correct code ? It does not have a variable named advance in it but it does have this

  monRecepteurInfraRouge.

which causes an error

UKHeliBob:
Have you posted the correct code ? It does not have a variable named advance in it but it does have this

  monRecepteurInfraRouge.

which causes an error

J’ai trouvé le problème, merci quand même, cependant lorsque je téléverse le code tout se passe bien, j’ouvre le moniteur de série et appuie sur une touche de la télécommande mais… Rien n’apparaît, sais-tu pourquoi ?

"#include <IRremote.h>

String hexIr = “” ;
int pin1Moteur1=12; //pin de commande moteur 1
int pin2Moteur1=8; // pin de commande moteur 1
int pinPMoteur1=11;// pin PWM moteur 1
const char DIN_RECEPTEUR_INFRAROUGE = 2;

IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);

decode_results messageRecu;

void setup() {

Serial.begin(9600);
monRecepteurInfraRouge.enableIRIn();
monRecepteurInfraRouge.blink13(true);

pinMode(pin1Moteur1,OUTPUT);
pinMode(pin2Moteur1,OUTPUT);
pinMode(pinPMoteur1,OUTPUT);
}

void loop() {
hexIr = String(messageRecu.value, HEX);
if (hexIr==“2FD50AF”){
Serial.println(“Le moteur s’arrete !”);
actionMoteur(1,-1,0); //moteur 1 100% puissance sens -1
monRecepteurInfraRouge.resume();

}
else if (hexIr==“FFFFFFFF”){
Serial.println(“Le moteur avance !”);
actionMoteur(1,1,100); //moteur 1 100% puissance sens 1
//attente de 5 secondes

}

else if (hexIr==“2FD847”){
actionMoteur(1,-1,100); //moteur 1 100% puissance sens -1
delay(500);

}
delay(1);
}

void actionMoteur(int moteur,int sens,int pourcentage){
int pin1,etat1,pin2,etat2,pinP,puissance; //variable de la fonction
//test numéro du moteur
if (moteur==1){
pin1=pin1Moteur1;
pin2=pin2Moteur1;
pinP=pinPMoteur1;
}
//test sens du moteur 1,-1 (sens contrainre) ou tout autre valeur (stoppe le moteur)
if (sens==1){
etat1=1;
etat2=0;
}
else if (sens==-1){
etat1=0;
etat2=1;
}
else {
etat1=0;
etat2=0;
}
puissance=map(pourcentage,0,100,0,255);
analogWrite(pinP,puissance);
digitalWrite(pin1,etat1);
digitalWrite(pin2,etat2);
//affichage sur le moniteur série (facultatif)
Serial.print("Moteur : “);
Serial.print(moteur);
if (sens==-1 || sens==1){
Serial.print(” sens : “);
Serial.print(sens);
}
else {
Serial.print(” ! stop ! “);
}
Serial.print(” puissance : ");
Serial.println(pourcentage);

}"

Have you tried printing hexIr ?

UKHeliBob:
Have you tried printing hexIr ?

Ho je viens de le faire et le moniteur de série m'affiche "0" en continue, une solution/ Idée de pourquoi il affiche ceci ?

Does the LED on pin 13 blink when you send a value ?

UKHeliBob:
Does the LED on pin 13 blink when you send a value ?

Oui elle clignote à chaque fois que j'utilise la télécommande, cela veux dire que l'Arduino reçoit une information non ?
Merci d'avance pour votre aide :slight_smile:

 hexIr = String (messageRecu.value, HEX);

Why are you converting the received value to a String ?
Do a direct comparison instead

What do you see if you print messageRecu.value ?

UKHeliBob:

 hexIr = String (messageRecu.value, HEX);

Why are you converting the received value to a String ?
Do a direct comparison instead

What do you see if you print messageRecu.value ?

UKHeliBob:

 hexIr = String (messageRecu.value, HEX);

Why are you converting the received value to a String ?
Do a direct comparison instead

What do you see if you print messageRecu.value ?

Parce que je cherchais à stocker le signal reçu dans une variable et j'ai trouvé cette partie de code sur internet. Comment je pourrais les comparer directement ? Car lorsque j'écrit "if (hexIr==2FD50AF)" lors de la compilation un message d'erreur apparait "exit status 1
unable to find numeric literal operator 'operator""FD50AF'".De plus lorsque je "print" la variable "hexIr" le moniteur de série m'affiche "16" en boucle.

PS:j'ai changer la variable hexIr: "hexIr = (messageRecu.value, HEX);"

irCode = (messageRecu.value);  //do not try to convert to HEX
if (irCode == 0x2FD50AF)  //the 0x tells the compiler that you are using a HEX value
{
  //do something if it matches
}

UKHeliBob:

irCode = (messageRecu.value);  //do not try to convert to HEX

if (irCode == 0x2FD50AF)  //the 0x tells the compiler that you are using a HEX value
{
  //do something if it matches
}

Lorsque je copie ton code une erreur s'affiche toujours "'irCode' was not declared in this scope", il me semble qu'il faut que je la déclare mais en quelle type (HEX,int,string...) ? Et quand je la déclare au dessus de setup, il me dit "'irCode' was not declared in this scope"

Bon j’ai essayé autre chose:"

#include <IRremote.h>

int led_r=3;
int pin1Moteur1=12; //pin de commande moteur 1
int pin2Moteur1=8; // pin de commande moteur 1
int pinPMoteur1=11;// pin PWM moteur 1
const int DIN_RECEPTEUR_INFRAROUGE = 2;

const HEX irCode="";
const String pause=“2FD50AF”;
const String avance= “2FD9867”;
const String recule=“2FD847”;

IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);

decode_results messageRecu;

/------------------------SETUP------------------------/
void setup() {

Serial.begin(9600);
monRecepteurInfraRouge.enableIRIn();
monRecepteurInfraRouge.blink13(true);

pinMode(pin1Moteur1,OUTPUT);
pinMode(pin2Moteur1,OUTPUT);
pinMode(pinPMoteur1,OUTPUT);
pinMode(led_r,OUTPUT);
digitalWrite(led_r,HIGH);
}

/------------------------FONCTION------------------------/

/--------------------MOUV--------------------/
void mouv(String action){
if(action ==“avance”){
Serial.println(“Le moteur avance !”);
actionMoteur(1,1,100); //moteur 1 100% puissance sens 1
//attente de 5
delay(250);
}
else if (action ==“pause”){
Serial.println(“Le moteur s’arrete !”);
actionMoteur(1,-1,0); //moteur 1 100% puissance sens -1
delay(250);
monRecepteurInfraRouge.resume();
}
else if (action ==“recule”){
actionMoteur(1,-1,100); //moteur 1 100% puissance sens -1
Serial.println(“Le moteur fait une petite pause !”);
delay(250);
}
else{
Serial.println(“Commande inconnu”);
}
}

/--------------------ACTION_MOTEUR--------------------/
void actionMoteur(int moteur,int sens,int pourcentage){
int pin1,etat1,pin2,etat2,pinP,puissance; //variable de la fonction
//test numéro du moteur
if (moteur==1){
pin1=pin1Moteur1;
pin2=pin2Moteur1;
pinP=pinPMoteur1;
}
//test sens du moteur 1,-1 (sens contrainre) ou tout autre valeur (stoppe le moteur)
if (sens==1){
etat1=1;
etat2=0;
}
else if (sens==-1){
etat1=0;
etat2=1;
}
else {
etat1=0;
etat2=0;
}
puissance=map(pourcentage,0,100,0,255);
analogWrite(pinP,puissance);
digitalWrite(pin1,etat1);
digitalWrite(pin2,etat2);
//affichage sur le moniteur série (facultatif)
Serial.print("Moteur : “);
Serial.print(moteur);
if (sens==-1 || sens==1){
Serial.print(” sens : “);
Serial.print(sens);
}
else {
Serial.print(” ! stop ! “);
}
Serial.print(” puissance : ");
Serial.println(pourcentage);

}
/------------------------LOOP------------------------/
void loop() {
if ((messageRecu.value) == 0x2FD50AF) //the 0x tells the compiler that you are using a HEX value
{
//do something if it matches
mouv(pause);

}

else if ((messageRecu.value)==0x2FD9867){
mouv(avance);

}

else if ((messageRecu.value)==0x2FD847){
mouv(recule);

}
else{
Serial.println(“Commande introuvable”);
}
delay(1);
delay(500);
}

" et l’IDE m’affiche “exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno” sais-tu pourquoi ?

const String backs up = "2FD847";Variable names cannot have spaces in them

IRrecv myRefineRefreshRef (DIN_RECEPTEUR_INFRAROUGE);

You have not #included the IRremote library

/ * ------------------------ FUNCTION ---------------------- - * /

Incorrect format for the comment in a number of places

  myReputorInfraRed.enableIRIn ();

No object declared named myReputorInfraRed

I got bored at that point and stopped looking so there may be other problems. Next time please post the compete error message by using the "Copy error messages" button in the IDE

UKHeliBob:
const String backs up = "2FD847";Variable names cannot have spaces in them

IRrecv myRefineRefreshRef (DIN_RECEPTEUR_INFRAROUGE);

You have not #included the IRremote library

/ * ------------------------ FUNCTION ---------------------- - * /

Incorrect format for the comment in a number of places

  myReputorInfraRed.enableIRIn ();

No object declared named myReputorInfraRed

I got bored at that point and stopped looking so there may be other problems. Next time please post the compete error message by using the “Copy error messages” button in the IDE

Attention, certaines variable sont déclaré mais elles changent de nom avec votre traduction :slight_smile:

j’ai remplacé les “/* */” par des “//”
J’ai inclus au tout début la librairie “IRremote” ("#include <IRremote.h>")
et je n’ai pas d’espace entre mes variable, je pense que c’est la traductions que vous utilisez qui change certaines partie du code. Et voici le message d’erreur:"

Arduino : 1.8.9 (Windows 10), Carte : “Arduino/Genuino Uno”

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,

from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,

from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:232,

from sketch\sketch_apr30b_reconnaissance_IR_teste2.0.ino.cpp:1:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:30:13: error: expected unqualified-id before numeric constant

#define HEX 16

^

C:\Users\BlackL0ok\Documents\Arduino\sketch_apr30b_reconnaissance_IR_teste2.0\sketch_apr30b_reconnaissance_IR_teste2.0.ino:11:8: note: in expansion of macro ‘HEX’

const HEX irCode = “”;

^

exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno

Ce rapport pourrait être plus détaillé avec
l’option “Afficher les résultats détaillés de la compilation”
activée dans Fichier → Préférences.

"

Attention, certaines variable sont déclaré mais elles changent de nom avec votre traduction :slight_smile:

You are almost certainly correct.

The real error seems to be caused by
const  HEX irCode = "";because HEX is not a data type and is, in any case, a reserved word

UKHeliBob:
You are almost certainly correct.

The real error seems to be caused by

const  HEX irCode = "";

because HEX is not a data type and is, in any case, a reserved word

Okay, le code se compile, se transfère dans l’Arduino. Mais lorsque j’appuie sur la télécommande rien ne se passe, le moniteur de série me dit “Commande introuvable” ce qui est normal mais pourquoi les conditions ne marche-t-elle pas ?

#include <IRremote.h>


int buzzer = 4;
int led_r=3;
int pin1Moteur1=12; //pin de commande moteur 1
int pin2Moteur1=8; // pin de commande moteur 1
int pinPMoteur1=11;// pin PWM moteur 1
const int DIN_RECEPTEUR_INFRAROUGE = 2;
String irCode="";

String pause = "2FD50AF";
String avance = "2FD9867";
String recule = "2FD847";
//klaxon = 2FD08F7;
//led rouge = 2FD12ED;


IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);

decode_results messageRecu;

//   --------------------BUZZER --------------------
void demarer(){
  digitalWrite(buzzer,HIGH);
  delay(150);
  digitalWrite(buzzer,LOW);
  delay(100);
  digitalWrite(buzzer,HIGH);
  delay(300);
  digitalWrite(buzzer,LOW);}



//------------------------SETUP------------------------
void setup() {
  
  Serial.begin(9600);
  monRecepteurInfraRouge.enableIRIn();
  monRecepteurInfraRouge.blink13(true);
   
  pinMode(buzzer,OUTPUT);
  pinMode(pin1Moteur1,OUTPUT);
  pinMode(pin2Moteur1,OUTPUT);
  pinMode(pinPMoteur1,OUTPUT);
  pinMode(led_r,OUTPUT);
  digitalWrite(led_r,HIGH);
  demarer();
}

//------------------------FONCTION------------------------

      //--------------------MOUV--------------------
void mouv(int action){
  if(action ==1){
    Serial.println("Le moteur avance !");
    actionMoteur(1,1,100); //moteur 1 100% puissance sens 1
     //attente de 5 
     delay(250);
    } 
  else if (action ==0){
    Serial.println("Le moteur s'arrete !");
    actionMoteur(1,-1,0); //moteur 1 100% puissance sens -1
    delay(250);
    monRecepteurInfraRouge.resume();
    }
  else if (action ==-1){
    actionMoteur(1,-1,100); //moteur 1 100% puissance sens -1
    Serial.println("Le moteur fait une petite pause !");
    delay(250);
  }
  else{
    Serial.println("Commande inconnu");
    }
  }

//   --------------------ACTION_MOTEUR--------------------
void actionMoteur(int moteur,int sens,int pourcentage){
  int pin1,etat1,pin2,etat2,pinP,puissance; //variable de la fonction
  //test numéro du moteur
  if (moteur==1){
    pin1=pin1Moteur1;
    pin2=pin2Moteur1;
    pinP=pinPMoteur1;
  }
  //test sens du moteur 1,-1 (sens contrainre) ou tout autre valeur (stoppe le moteur)
  if (sens==1){
    etat1=1;
    etat2=0;
  }
  else if (sens==-1){
    etat1=0;
    etat2=1;
  }
  else {
    etat1=0;
    etat2=0;
  }
  puissance=map(pourcentage,0,100,0,255);
  analogWrite(pinP,puissance);
  digitalWrite(pin1,etat1);
  digitalWrite(pin2,etat2);
  //affichage sur le moniteur série (facultatif)
  Serial.print("Moteur : ");
  Serial.print(moteur);
  if (sens==-1 || sens==1){
    Serial.print(" sens : ");
    Serial.print(sens);
  }
  else {
    Serial.print(" ! stop ! ");
  }
  Serial.print(" puissance : ");
  Serial.println(pourcentage);
  
}
//------------------------LOOP------------------------
void loop() {
  irCode = String(messageRecu.value);
if (irCode == pause)  
{
  //do something if it matches
  mouv(0);
  Serial.println("Le moteur fais une petite pause");
}
    
  
else if (irCode == avance){
    mouv(1);
     Serial.println("Le moteur avance");
  }
     
   else if (irCode==recule){
    mouv(-1);
    Serial.println("Le moteur recule");
   }
else{
    Serial.println("Commande introuvable");
   }
    delay(1);
    delay(500);
}

[/code
  if (irCode == pause)

Why are you using Strings again ?

See reply #9

Parce que le type HEX ne marche pas pour le signal IR. Comment voudrais tu que je fasse ?

BlackL0ok:
Parce que le type HEX ne marche pas pour le signal IR. Comment voudrais tu que je fasse ?

unsigned long irCode = (messageRecu.value);  //do not try to convert to HEX
if (irCode == 0x2FD50AF)  //the 0x tells the compiler that you are using a HEX value
{
  //do something if it matches
}

None of the variables or constants are Strings