Bug 2WD Turtle avec télécommande IR

Salut,

J’ai réalisé un robot arduino anti-collision et j’essaye maintenant de le contrôler à distance avec une télécommande IR.

Seulement, je ne peux que le faire avancer ou tourner à droite alors que j’ai créer 4 fonctions pour les 4 directions qui sont fonctionnelles en dehors de ce programme (sans la télécommande).

Sur le moniteur série, les fonctions s’affichent quand j’appuie sur leur bouton respectif mais turnLeft fait pareil que moveForward et moveBackward fait pareil que turnRight.

Du coup voilà, je demande de l’aide au gens qui pourraient trouver une solution à mon problème; Voici mon code et mon matos.

PS: Je précise, c’est normal que moveForward fasse aller vers l’arrière et inversement il est juste à l’envers.

#include <Wire.h>
#include <MotorShield.h>
#include <IRremote.h>

#define moveForward_CODE 0xFDA05F
#define moveBackward_CODE 0xFDB04F
#define turnLeft_CODE 0xFD10EF
#define turnRight_CODE 0xFD50AF

const char DIN_RECEPTEUR_INFRAROUGE = 2;
    
IRrecv infraRedReceiver(DIN_RECEPTEUR_INFRAROUGE);
  
decode_results results;

MS_DCMotor Motor_1(MOTOR_A);
MS_DCMotor Motor_2(MOTOR_B);  

void moveForward() {
      Motor_1.run(BACKWARD|BRAKE);
      Motor_2.run(BACKWARD|BRAKE); 
      delay(1);
      Motor_1.run(RELEASE);
      Motor_2.run(RELEASE); 
      delay(500);    
}

void moveBackward() {
      Motor_1.run(FORWARD|BRAKE);
      Motor_2.run(FORWARD|BRAKE); 
      delay(1);
      Motor_1.run(RELEASE);
      Motor_2.run(RELEASE); 
      delay(500);    
}

void turnLeft() {
      Motor_1.run(BACKWARD|BRAKE);
      Motor_2.run(FORWARD|BRAKE);
      delay(1);
      Motor_1.run(RELEASE);
      Motor_2.run(RELEASE);
      delay(500);
}

void turnRight() {
      Motor_1.run(FORWARD|BRAKE);
      Motor_2.run(BACKWARD|BRAKE); 
      delay(1);
      Motor_1.run(RELEASE);
      Motor_2.run(RELEASE); 
      delay(500);    
}

void releaseMotors(){
  Motor_1.run(RELEASE);
  Motor_2.run(RELEASE);
  delay(500);  
}

void setup() {

  Motor_1.run(BRAKE);                 // engage the motor's brake 
  Motor_1.setSpeed(255);
  Motor_2.run(BRAKE);
  Motor_2.setSpeed(255);
  Serial.begin(9600);                 // Init. Comm. Moniteur
  Serial.println("Start!");
  infraRedReceiver.enableIRIn();      // Init. Module Infra-rouge
  infraRedReceiver.blink13(true);     // Blink Led pour renseigner de la transmission du signal

}

void loop() {

  if (infraRedReceiver.decode(&results))
  {

    if (results.value == moveBackward_CODE)
    {
      Serial.println("moveBackward");
      moveBackward();
    }
    
    if (results.value == moveForward_CODE)
    {
      Serial.println("moveForward");
      moveForward(); 
    }    

   if (results.value == turnLeft_CODE)
    {
      Serial.println("turnLeft");
      turnLeft();
    }

   if (results.value == turnRight_CODE)
    {
      Serial.println("turnRight");
      turnRight(); 
    }

    infraRedReceiver.resume();
       
  }

}

Chassis 2WD Turtle ( avec les 2 moteurs et les roues )
Arduino Uno
Motor Shield Arduino
Télécommande IR Arduino de base
Récepteur IR

Merci !

bonjour,
déjà affiche ce qui est recu via la telecommande dans le serial.
mets aussi dans chaque fonctions

infraRedReceiver.resume();

un swithch case serait plus propre
si une commande recue

switch (results.value) {
    case moveBackward_CODE:
moveBackward();
      break;
etc...
}

Merci pour ta réponse.

Au niveau du serial, il affiche ce que j’ai expliqué dans mon post, c’est-à-dire “Start” au début puis les fonctions que je lui demande d’exécuter comme si tout marchait bien. Ou bien si tu veux parler de la valeur hexadécimale envoyé par la télécommande, là n’est pas le problème. J’ai déjà vérifié plusieurs fois si j’avais assigné les bonnes valeurs aux bonnes touches.

Sinon, j’ai appliqué tes conseils car c’est vrai que ne savait pas du tout ou placer le .resume et j’ai aussi changer tous mes “if” en un switch case. Malheureusement, ça marche encore moins bien du coup: le moniteur série n’affiche plus que “Start” même si j’appuie sur les boutons de ma télécommande et je vois les deux voyants de des pôles + et - du moteur B qui s’allume en même temps quand j’appuie sur ces boutons. Voilà à quoi ressemble mon nouveau code:

#include <Wire.h>
#include <MotorShield.h>
#include <IRremote.h>

#define moveForward_CODE 0xFDA05F
#define moveBackward_CODE 0xFDB04F
#define turnLeft_CODE 0xFD10EF
#define turnRight_CODE 0xFD50AF

const char DIN_RECEPTEUR_INFRAROUGE = 2;
    
IRrecv infraRedReceiver(DIN_RECEPTEUR_INFRAROUGE);
  
decode_results results;

MS_DCMotor Motor_1(MOTOR_A);
MS_DCMotor Motor_2(MOTOR_B);  

void moveForward() {
      Motor_1.run(BACKWARD|BRAKE);
      Motor_2.run(BACKWARD|BRAKE); 
      delay(1);
      Motor_1.run(RELEASE);
      Motor_2.run(RELEASE); 
      delay(500);    
      infraRedReceiver.resume();
}

void moveBackward() {
      Motor_1.run(FORWARD|BRAKE);
      Motor_2.run(FORWARD|BRAKE); 
      delay(1);
      Motor_1.run(RELEASE);
      Motor_2.run(RELEASE); 
      delay(500);   
      infraRedReceiver.resume(); 
}

void turnLeft() {
      Motor_1.run(BACKWARD|BRAKE);
      Motor_2.run(FORWARD|BRAKE);
      delay(1);
      Motor_1.run(RELEASE);
      Motor_2.run(RELEASE);
      delay(500);
      infraRedReceiver.resume();
}

void turnRight() {
      Motor_1.run(FORWARD|BRAKE);
      Motor_2.run(BACKWARD|BRAKE); 
      delay(1);
      Motor_1.run(RELEASE);
      Motor_2.run(RELEASE); 
      delay(500);    
      infraRedReceiver.resume();
}

void releaseMotors(){
  Motor_1.run(RELEASE);
  Motor_2.run(RELEASE);
  delay(500);  
}

void setup() {

  Motor_1.run(BRAKE);                 // engage the motor's brake 
  Motor_1.setSpeed(255);
  Motor_2.run(BRAKE);
  Motor_2.setSpeed(255);
  Serial.begin(9600);                 // Init. Comm. Moniteur
  Serial.println("Start!");
  infraRedReceiver.enableIRIn();      // Init. Module Infra-rouge
  infraRedReceiver.blink13(true);     // Blink Led pour renseigner de la transmission du signal

}

void loop() {

  switch (results.value) {

    case moveBackward_CODE:
    Serial.println("moveForward");
    moveForward(); 
    break;

    case moveForward_CODE:
    Serial.println("moveForward");
    moveForward(); 
    break;

    case turnLeft_CODE:
    Serial.println("turnLeft");
    turnLeft();
    break;

    case turnRight_CODE:
    Serial.println("turnRight");
    turnRight(); 
    break;
  }

    
       
}

Je ne sais pas si c’est le switch qui merde mais je me souviens d’avoir déjà essayé auparavant mais sans succès.

et tu lis où la valeur de la télécommande dans ton loop? réfléchis deux secondes et tu auras la réponse :)

void loop() {

  switch (results.value) {

J'ai fait un autre programme avant pour noter à quoi chaque boutons correspondaient.

infobarquee: et tu lis où la valeur de la télécommande dans ton loop? réfléchis deux secondes et tu auras la réponse :)

void loop() {

  switch (results.value) {


Slim_Corp:
J'ai fait un autre programme avant pour pour noter à quoi chaque boutons correspondaient.

je vais me répéter, et lis bien mes réponses ET la tienne. OU est l'instruction dans le loop qui lit la valeur recu de la télécommande?

 if (infraRedReceiver.decode(&results))