Aide pour condition (Projet RC Car)

Bonjour a tous,

Je viens vers cette communauté car je me retrouve bloqué sur mon projet...

Je m'explique, mon projet est de conduire une voiture télécommandé avec une manette de xbox one. Chose faite, tout fonctionne, hormis que je n'arrive pas à tourner à gauche/droite tout en avancant/reculant. Sachant que les gachettes LT et RT permettent d'avancer/reculer , et le joystick principale permet d'aller a gauche/droite.

Seulement, je ne peut faire qu'une action à la suite, c-a-d, avancer ou reculer puis dès que je lache la gachette , je peut orienter mes roues à gauche ou à droite.

Je voit d'ou est le probleme dans mon code mais je ne suis pas assez calé pour réaliser cette boucle correctement.

Voici la partie de code, à savoir : mb = LT , ma = RT , dl = joystick de gauche , dr = joystick de droite.
Les fonctions DC sont créee dans le code un peu plus haut permettant de gérer les pins de mon l298N

void processControl(String input, int value){
  if (input == "mb"){
    DcForward(value);
  }  
  if (input == "ma"){
    DcBackward(value);    
  }
  if (input == "dl"){
    DcRotLeft(value);
  }
  if (input == "dr"){
    DcRotRight(value);
  }
  else if (input == "sp"){
    DcStop();
  }
}

Si vous pouvez m'éclairer pour me permettre d'effectuer tout les mouvements en même temps....

En vous remerciant d'avance.

Impossible sans en savoir plus sur le code en entier, notamment comment cette fonction est appelée. Pour ce qui concerne le code que tu as posté, tu peux mettre des 'else' devant chaque 'if' à partir du deuxième. Ça ne changera certainement rien, mais ce sera plus cohérent.

Bonjour, merci pour ta réponse. Voici mon code en entier.

// SERIAL INIT COMM. PYTHON : FORMAT XCCVVVE
char inputCharSerial[7];
bool stringComplete = false;
String command_code = "";
int command_value = 0;

// PIN INIT
int LeftEnA = 10;
int LeftIn1 = 9;
int LeftIn2 = 8;

int RightEnB = 6;
int RightIn3 = 5;
int RightIn4 = 4;



void setup() {
  Serial.begin(9600);
  pinMode(LeftEnA,OUTPUT);
  pinMode(LeftIn1,OUTPUT);
  pinMode(LeftIn2,OUTPUT);

  pinMode(RightEnB,OUTPUT);
  pinMode(RightIn3,OUTPUT);
  pinMode(RightIn4,OUTPUT);
}

void DcForward(int speed){
  digitalWrite(LeftIn1, 1);
  digitalWrite(LeftIn2, 0);
  digitalWrite(RightIn3, 0);
  digitalWrite(RightIn4, 0);
  analogWrite(LeftEnA, speed);
  analogWrite(RightEnB, 0);
}

void DcBackward(int speed){
  digitalWrite(LeftIn1, 0);
  digitalWrite(LeftIn2, 1);
  digitalWrite(RightIn3, 0);
  digitalWrite(RightIn4, 0);
  analogWrite(LeftEnA, speed);
  analogWrite(RightEnB, 0);
}

void DcRotRight(int speed){
  digitalWrite(LeftIn1, 0);
  digitalWrite(LeftIn2, 0);
  digitalWrite(RightIn3, 1);
  digitalWrite(RightIn4, 0);
  analogWrite(LeftEnA, 0);
  analogWrite(RightEnB, speed);
}

void DcRotLeft(int speed){
  digitalWrite(LeftIn1, 0);
  digitalWrite(LeftIn2, 0);
  digitalWrite(RightIn3, 0);
  digitalWrite(RightIn4, 1);
  analogWrite(LeftEnA, 0);
  analogWrite(RightEnB, speed);
}

void DcStop(){
  digitalWrite(LeftIn1, 0);
  digitalWrite(LeftIn2, 0);
  digitalWrite(RightIn3, 0);
  digitalWrite(RightIn4, 0);
  analogWrite(LeftEnA, 0);
  analogWrite(RightEnB, 0);
}

void processControl(String input, int value){
  if (input == "mb"){
    DcForward(value);
  }  
  if (input == "ma"){
    DcBackward(value);    
  }
  if (input == "dl"){
    DcRotLeft(value);
  }
  if (input == "dr"){
    DcRotRight(value);
  }
  else if (input == "sp"){
    DcStop();
  }
}


int digitToInt(char* d){
  char charToInt[4];
  for (int j = 0; j <= 2; j++){
    charToInt[j] = d[j];
  }
  charToInt[3] = '\0';
  return (int) strtol(charToInt, NULL, 10);
}

void loop(){
  if(stringComplete){
    if (inputCharSerial[0] == 'A'){
      char bufferValue[3];
      for (int j = 0; j<= 1; j++){
        command_code += inputCharSerial[j+1];
      }
      for (int j = 0 ; j <= 2; j++){
        bufferValue[j] = inputCharSerial[j+3];
      }
      command_value = digitToInt(bufferValue);
    }
    else if (inputCharSerial[0] == 'B'){
      for (int j = 0; j <= 1; j++){
        command_code += inputCharSerial[j+1];
        command_value = 0;
      }
    }

    //Serial.print("INPUT : ");
    //Serial.print(command_code);
    //Serial.print("   VALUE : ");
    //Serial.println(command_value);
    processControl(command_code, command_value);
    memset(inputCharSerial, 0, 7);
    stringComplete = false;
    command_code = "";
    command_value = 0;
  }

}

void serialEvent() {
  while (Serial.available()){
    Serial.readBytes(inputCharSerial, 7);
    if(inputCharSerial[6]== '\x00'){
      stringComplete = true;
    }else if (inputCharSerial[6]!= '\x00'){
      memset(inputCharSerial, 0, 7);
    }

  }

hello
tu reçois les données des joysticks via serial je suppose que tu les simules sur le moniteur.

donc si tu tapes "mb255" tu demandes d'avancer à vitesse maxi

si tu tapais "mb127dl255" (pour demander de tourner à gauche tout en avançant) et que tu désosses la chaine reçue imputSerial[12] dans commandCode_double et commandValue_double,il te suffirait d'appeler une fonction dans laquelle tu "set" les sorties"avance" et "tourne_gauche" et leur vitesses respectives.

if (input == "mbdl"){DcForward_DcRotLeft(value_avance,value_tourne);

void DcForward_DcRotLeft(int speed1,int speed_2){
digitalWrite(LeftIn1, 1);
digitalWrite(LeftIn2, 0);
digitalWrite(RightIn3, 0);
digitalWrite(RightIn4, 1);
analogWrite(LeftEnA, speed1);
analogWrite(RightEnB, speed_2);
}

je suppose qu'avec les valeur de 127 et 255
la voiture va avancer à 127 et la roue droite elle tournera à 255 ce qui fera tourner la voiture