Voiture Radiocommandé

Bonjour !

Voila, j'ai un projet, je voudrais faire une voiture radiocommandée (4 moteurs à courant continus gérés par deux driver L293D) contrôlée par une manette de PS3 qui est connecté à l'arduino Mega grâce à un dongle bluetooth et USB Host Shield.

Au niveau du code, je n'ai aucun problème, mais c'est le circuit électronique qui me pose problème, en effet, je voudrai une autonomie d'au moins 5/10 min. Pour cela je dois mettre une ou des batterie(s) pour alimenter l'Arduino Mega et les 4 moteurs. Le problème c'est que je ne sais pas combien en mettre, dans le montage que j'ai fait j'en ai mis 3 mais je ne sais pas si c'est un choix judicieux.

D'autres part je ne sais pas comment gérer le GND, si je dois relier le GND des trois batteries ou non,...

Voici le shéma que j'ai fait, merci de me dire s'il y a des incohérences ou non :

http://hpics.li/00fa555

Merci d'avance !

salut,

tu peux mettre les 3 accus en parallèle(tous les GND ensembles, tous les Vcc ensembles), ce qui te donnera un accu de 9 Volts et de 3 fois la capacité d'un accu. après les piles 9V rechargeable ont une capacité de 120 à 600 mAh, si tu en met 3, une capa totale de 360 à 1800 mAh,divise la capa par le courant débité (par exemple 2000mA) cela donne le temps en heure(par exemple 360/2000 = 0.18h = 10min ou 1800/2000=0.9h = 54 min).

Mais surtout n'oublie que c'est pile ont une résistance interne (entre 0.3 et 0.5 ohm ) cela implique une chute de tension (chute en tension = courant * (0.3/nb pile)) pour une charge de 2A et 3 pile V=0.2 Volt. ça parait pas mais c'est chiant.

si tu souhaite pouvoir tirer sur les piles tout en ayant une bonne capacité. je te conseil soit une batterie au plomb mais c'est lourd, soit une lipo c'est léger ça peut sortir beaucoup d’ampères. mais c'est très exigent au niveau du rechargement et des tensions de décharge.

Ok merci de ta réponse je vais voir ce que je peux faire

+1 non seulement tes piles s'écrouleront du fait de leur résistance interne, mais de plus elles se videront comme une bière un soir de canicule ...

+1 pour la comparaison :smiley:

Ok je pense que je vais opter pour une lipo au lieu de 3 batteries normales

Voila le shéma final avec la batterie de 9V qui représente une lipo :

http://zupimages.net/up/16/22/n7ny.png

Bonjour,
sans préjuger des précautions à prendre pour l’utilisation d’une lipo, ton schéma est correct
note que tu peux utiliser ta breadboard pour relier tes fils + batterie

Oui c'est vrais merci

Salut ! Je ne suis pas expert en modélisme, mais il me semble que pour faire une voiture, il faut utiliser des moteurs brushless avec esc, ainsi qu'une batterie Li Po (en fonction de ce que tu veux, mais en général une 6S). Attends cependant qu'un expert confirme, je ne suis pas sur à 100% que c'est ce qu'il faut faire :p

Pas forcement il peut utiliser une lipo avec ses drivers et ses moteurs. il faudra choisir ta lipo en fonction de tes besoins. la tension 1s correspond a 3.7V. ainsi une 3s a une tension nominale de 11.1V.

attention toutefois je te conseil de te renseigner sur les lipo car elle sont très exigeante. et pour les recharger il existe des sacs ignifugés ça évite les catastrophes.

Pour les lipo, rien de très complexe, les seules règles sont : surveiller la charge, si elle est fini retirer vite la batterie du chargeur. Ne pas decharger les batteries à moins de 3v /s

Ok

Bonjour,

A propos de la source d’énergie, je pense qu’il serait bon de situer la consommation (intensité) pour chaque moteur.

L’intensité d’un moteur est très dépendante de l’effort qu’on lui demande, surtout sur un démarrage.

A propos d’un moteur brushless et de son contrôleur (esc) la commande n’a rien à voir avec celle d’un moteur à courant continu “basique” comme indiqué sur les schémas des posts précédents.

Je dirais que pour une puissance modeste ( <20 ou 30W) le bénéfice du meilleur rendement du moteur brushless ne se justifie pas trop. (sauf si on souhaite faire un Racer)

Pour la tension, une batterie lipo 2 éléments (2S) capable de fournir 7 à 8V est sans doute suffisante…
Mais il faut un chargeur spécial et une gestion précautionneuse de la décharge pour ne pas dégrader l’ espérance de vie de la batterie… et le court-circuit même fugitif est généralement interdit.

Serge .D

D'accord merci

Bon bah finalement le code ne marche pas, une des roues n’arrête pas de tourner, les autres ne réagissent pas à la manette, mais pourtant ce n’est pas un problème de cablage ni de bluetooth car l’arduino reçoit bien les donnés de la manette de PS3 et la roue ne se met pas à tourner tout de suite mais que lorsque la manette de PS3 est connecté à l’arduiino. Voici le code pour ceux qui voudrait m’aider :

#include <PS3BT.h>
#include <usbhub.h>

// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif

USB Usb;
USBHub Hub1(&Usb); // Some dongles have a hub inside

BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
/* You can create the instance of the class in two ways */
PS3BT PS3(&Btd); // This will just create the instance
//PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch

boolean printTemperature;
boolean printAngle;
int potpin; //récupère la valeur de l'analog
int valy; //stock valeur du joystick
int valx;

const char DOUT_MOTEUR_GAUCHE_1_EN  = 2; //56
const char D0UT_MOTEUR_GAUCHE_1_1   = 3; //54
const char D0UT_MOTEUR_GAUCHE_1_2   = 4; //52

const char DOUT_MOTEUR_DROIT_1_EN   = 5; //branché comme le 22
const char D0UT_MOTEUR_DROIT_1_3    = 6; //branché comme le 24
const char D0UT_MOTEUR_DROIT_1_4    = 7; //branché comme le 26

const char DOUT_MOTEUR_GAUCHE_2_EN  = 8; //50
const char D0UT_MOTEUR_GAUCHE_2_1   = 9; //48
const char D0UT_MOTEUR_GAUCHE_2_2   = 10; //46

const char DOUT_MOTEUR_DROIT_2_EN   = 11; //28
const char D0UT_MOTEUR_DROIT_2_3    = 12; //30
const char D0UT_MOTEUR_DROIT_2_4    = 13; //32

void setup() {;
  Serial.begin(115200);

    pinMode(D0UT_MOTEUR_GAUCHE_1_1, OUTPUT);
    digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,LOW);
    pinMode(D0UT_MOTEUR_GAUCHE_1_2, OUTPUT);
    digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,LOW);
    
    pinMode(D0UT_MOTEUR_DROIT_1_3 , OUTPUT);
    digitalWrite(D0UT_MOTEUR_DROIT_1_3,LOW);
    pinMode(D0UT_MOTEUR_DROIT_1_4 , OUTPUT);
    digitalWrite(D0UT_MOTEUR_DROIT_1_4,LOW);

        pinMode(D0UT_MOTEUR_GAUCHE_2_1, OUTPUT);
    digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,LOW);
    pinMode(D0UT_MOTEUR_GAUCHE_2_2, OUTPUT);
    digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,LOW);
    
    pinMode(D0UT_MOTEUR_DROIT_2_3 , OUTPUT);
    digitalWrite(D0UT_MOTEUR_DROIT_2_3,LOW);
    pinMode(D0UT_MOTEUR_DROIT_2_4 , OUTPUT);
    digitalWrite(D0UT_MOTEUR_DROIT_2_4,LOW);

    digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,LOW);
    digitalWrite(DOUT_MOTEUR_DROIT_1_EN,LOW);
    digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,LOW);
    digitalWrite(DOUT_MOTEUR_DROIT_2_EN,LOW);

#if !defined(__MIPSEL__)
  while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
  if (Usb.Init() == -1) {
    Serial.print(F("\r\nOSC did not start"));
    while (1); //halt
  }
  Serial.print(F("\r\nPS3 Bluetooth Library Started"));
}
void loop() {
  Usb.Task();

  if (PS3.PS3Connected || PS3.PS3NavigationConnected) {
    if (PS3.getAnalogHat(LeftHatX) > 137 || PS3.getAnalogHat(LeftHatX) < 117 || PS3.getAnalogHat(LeftHatY) > 137 || PS3.getAnalogHat(LeftHatY) < 117 || PS3.getAnalogHat(RightHatX) > 137 || PS3.getAnalogHat(RightHatX) < 117 || PS3.getAnalogHat(RightHatY) > 137 || PS3.getAnalogHat(RightHatY) < 117) { //Prend toutes les valeurs possibles des joystick
      Serial.print(F("\r\nLeftHatX: "));
      Serial.print(PS3.getAnalogHat(LeftHatX));
      Serial.print(F("\tLeftHatY: "));
      Serial.print(PS3.getAnalogHat(LeftHatY));
      
      if (PS3.getAnalogHat(LeftHatY) < 50){   //fait faire une marche avant
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,HIGH);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,LOW); 
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,HIGH);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,LOW);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,LOW);///////
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,HIGH);
      }
      if (PS3.getAnalogHat(LeftHatY) > 200){  //fait faire une marche arrière
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,HIGH);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,HIGH);  
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,HIGH);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,HIGH);//////////
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,HIGH);
      }
      
      else{  //la voiture ne bouge pas
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,LOW);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,LOW);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,LOW);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,LOW);
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,LOW);
      }
      if (PS3.getAnalogHat(LeftHatX) < 50){ //fait tourner la voiture a droite
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,HIGH);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,HIGH);//////////
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,HIGH);
      }

      if (PS3.getAnalogHat(LeftHatX) >200){  //fait tourner la voiture a gauche
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,HIGH);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,HIGH);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,HIGH);  
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,HIGH);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,LOW);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,HIGH);////////////
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,HIGH);
      }
      
      else{  //ne fait tourner la voiture dans aucune direction
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,LOW);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,LOW);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,LOW);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,LOW);
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,LOW);
      }
      if (PS3.PS3Connected) { // The Navigation controller only have one joystick
        Serial.print(F("\tRightHatX: "));
        Serial.print(PS3.getAnalogHat(RightHatX));
        Serial.print(F("\tRightHatY: "));
        Serial.print(PS3.getAnalogHat(RightHatY));
      }
    }
 if (PS3.getAnalogButton(L2) || PS3.getAnalogButton(R2)) {
      Serial.print(F("\r\nL2: "));
      Serial.print(PS3.getAnalogButton(L2));
      if (PS3.PS3Connected) {
        Serial.print(F("\tR2: "));
        Serial.print(PS3.getAnalogButton(R2));
      }
    }
    if (PS3.getButtonClick(PS)) {
      Serial.print(F("\r\nPS"));
      PS3.disconnect();
    }
    else {
      if (PS3.getButtonClick(TRIANGLE))
        Serial.print(F("\r\nTraingle"));
      if (PS3.getButtonClick(CIRCLE))
        Serial.print(F("\r\nCircle"));
      if (PS3.getButtonClick(CROSS))
        Serial.print(F("\r\nCross"));
      if (PS3.getButtonClick(SQUARE))
        Serial.print(F("\r\nSquare"));

      if (PS3.getButtonClick(UP)) {
        Serial.print(F("\r\nUp"));
        if (PS3.PS3Connected) {
          PS3.setLedOff();
          PS3.setLedOn(LED4);
        }
      }
      if (PS3.getButtonClick(RIGHT)) {
        Serial.print(F("\r\nRight"));
        if (PS3.PS3Connected) {
          PS3.setLedOff();
          PS3.setLedOn(LED1);
        }
      }
      if (PS3.getButtonClick(DOWN)) {
        Serial.print(F("\r\nDown"));
        if (PS3.PS3Connected) {
          PS3.setLedOff();
          PS3.setLedOn(LED2);
        }
      }
      if (PS3.getButtonClick(LEFT)) {
        Serial.print(F("\r\nLeft"));
        if (PS3.PS3Connected) {
          PS3.setLedOff();
          PS3.setLedOn(LED3);
        }
      }

      if (PS3.getButtonClick(L1))
        Serial.print(F("\r\nL1"));
      if (PS3.getButtonClick(L3))
        Serial.print(F("\r\nL3"));
      if (PS3.getButtonClick(R1))
        Serial.print(F("\r\nR1"));
      if (PS3.getButtonClick(R3))
        Serial.print(F("\r\nR3"));

      if (PS3.getButtonClick(SELECT)) {
        Serial.print(F("\r\nSelect - "));
        PS3.printStatusString();
      }
      if (PS3.getButtonClick(START)) {
        Serial.print(F("\r\nStart"));
        printAngle = !printAngle;
      }
    }
#if 0 // Set this to 1 in order to see the angle of the controller
    if (printAngle) {
      Serial.print(F("\r\nPitch: "));
      Serial.print(PS3.getAngle(Pitch));
      Serial.print(F("\tRoll: "));
      Serial.print(PS3.getAngle(Roll));
    }
#endif
  }
#if 0 // Set this to 1 in order to enable support for the Playstation Move controller
  else if (PS3.PS3MoveConnected) {
    if (PS3.getAnalogButton(T)) {
      Serial.print(F("\r\nT: "));
      Serial.print(PS3.getAnalogButton(T));
    }
    if (PS3.getButtonClick(PS)) {
      Serial.print(F("\r\nPS"));
      PS3.disconnect();
    }
    else {
      if (PS3.getButtonClick(SELECT)) {
        Serial.print(F("\r\nSelect"));
        printTemperature = !printTemperature;
      }
      if (PS3.getButtonClick(START)) {
        Serial.print(F("\r\nStart"));
        printAngle = !printAngle;
      }
      if (PS3.getButtonClick(TRIANGLE)) {
        Serial.print(F("\r\nTriangle"));
        PS3.moveSetBulb(Red);
      }
      if (PS3.getButtonClick(CIRCLE)) {
        Serial.print(F("\r\nCircle"));
        PS3.moveSetBulb(Green);
      }
      if (PS3.getButtonClick(SQUARE)) {
        Serial.print(F("\r\nSquare"));
        PS3.moveSetBulb(Blue);
      }
      if (PS3.getButtonClick(CROSS)) {
        Serial.print(F("\r\nCross"));
        PS3.moveSetBulb(Yellow);
      }
      if (PS3.getButtonClick(MOVE)) {
        PS3.moveSetBulb(Off);
        Serial.print(F("\r\nMove"));
        Serial.print(F(" - "));
        PS3.printStatusString();
      }
    }
    if (printAngle) {
      Serial.print(F("\r\nPitch: "));
      Serial.print(PS3.getAngle(Pitch));
      Serial.print(F("\tRoll: "));
      Serial.print(PS3.getAngle(Roll));
    }
    else if (printTemperature) {
      Serial.print(F("\r\nTemperature: "));
      Serial.print(PS3.getTemperature());
    }
  }
#endif
}

Bonjour,

peux-tu faire un petit schéma de qui fait quoi pour qu'on s'y retrouve ?

Ok donc le truc le plus important c’est ça :

if (PS3.PS3Connected || PS3.PS3NavigationConnected) {
    if (PS3.getAnalogHat(LeftHatX) > 137 || PS3.getAnalogHat(LeftHatX) < 117 || PS3.getAnalogHat(LeftHatY) > 137 || PS3.getAnalogHat(LeftHatY) < 117 || PS3.getAnalogHat(RightHatX) > 137 || PS3.getAnalogHat(RightHatX) < 117 || PS3.getAnalogHat(RightHatY) > 137 || PS3.getAnalogHat(RightHatY) < 117) { //Prend toutes les valeurs possibles des joystick
      Serial.print(F("\r\nLeftHatX: "));
      Serial.print(PS3.getAnalogHat(LeftHatX));
      Serial.print(F("\tLeftHatY: "));
      Serial.print(PS3.getAnalogHat(LeftHatY));
      //la position du joystick varie de 0 à 255 dans l'axe X et Y
      if (PS3.getAnalogHat(LeftHatY) < 50){   //fait faire une marche avant
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,HIGH);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,LOW); 
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,HIGH);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,LOW);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,HIGH);///////
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,HIGH);
      }
      if (PS3.getAnalogHat(LeftHatY) > 200){  //fait faire une marche arrière
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,HIGH);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,HIGH);  
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,HIGH);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,HIGH);//////////
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,HIGH);
      }
      
      else{  //la voiture ne bouge pas
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,LOW);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,LOW);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,LOW);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,LOW);
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,LOW);
      }
      if (PS3.getAnalogHat(LeftHatX) < 50){ //fait tourner la voiture a droite
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,HIGH);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,HIGH);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,HIGH);//////////
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,HIGH);
      }

      if (PS3.getAnalogHat(LeftHatX) >200){  //fait tourner la voiture a gauche
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,HIGH);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,HIGH);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,HIGH);  
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,HIGH);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,LOW);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,HIGH);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,HIGH);////////////
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,HIGH);
      }
      
      else{  //ne fait tourner la voiture dans aucune direction
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_1,LOW); //tous les moteurs mis sur LOW donc arrêt
          digitalWrite(D0UT_MOTEUR_GAUCHE_1_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_1_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_1_4,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_1,LOW);
          digitalWrite(D0UT_MOTEUR_GAUCHE_2_2,LOW);  
          digitalWrite(D0UT_MOTEUR_DROIT_2_3,LOW);
          digitalWrite(D0UT_MOTEUR_DROIT_2_4,LOW);
  
          digitalWrite(DOUT_MOTEUR_GAUCHE_1_EN,LOW);
          digitalWrite(DOUT_MOTEUR_DROIT_1_EN,LOW);
          digitalWrite(DOUT_MOTEUR_GAUCHE_2_EN,LOW);
          digitalWrite(DOUT_MOTEUR_DROIT_2_EN,LOW);
      }

Le robot est censé suivre les ordres selon la position du joystick (ex: je veux tourner à droite, je met donc mon joystick à droite et les moteurs doivent tourner de manière à ce que le véhicule tourne à droite)

La une roue tourne en continue peu importe la position du joystick et les autres ne réagissent pas, je ne sais pas si le problème vient du code ou du câblage avec les fils. J’ai pourtant demander plus haut si mon schéma était correct et tout le monde ma dit que oui donc je pense que cela vient du code mais je n’arrive pas à déterminer la source.