Pont-H L298N

Bonjour, bonsoir, je vous explique la situation avant de poser la question. :slight_smile:

Voilà je suis sur un projet d’une voiture omnidirectionnel, donc mes 4 roues doivent aller dans les deux sens de rotation. C’est pour ca que je vais donc utiliser un pont-H L298N, le fait est qu’un driver peut être utiliser pour deux moteurs, et pour ma part j’en ai quatre, alors je voulais savoir si en rajoutant un deuxième driver, je pouvais également le mettre sur le même programme Arduino ( je n’ai pas trouvé de topic concernant mon cas ).

Pourquoi sur le même programme, car toutes les roues dépendent des autres ( un schéma pour comprendre plus facilement, premiere photo ). Donc dans ma programmation, je marquerais :

If ( joystick > .. ) { 
 motor A = digitalWrite( IN1, LOW ) ;
Motor A = digitalWrite ( IN2, HIGH ) ; 
motor B = digitalWrite( IN3, LOW ) ;
Motor B = digitalWrite ( IN4, HIGH ) ; 
motor C = digitalWrite( IN ?, LOW ) ;
Motor C = digitalWrite ( IN ? HIGH ) ; 
motor D = digitalWrite( IN ? , LOW ) ;
Motor D = digitalWrite ( IN ? , HIGH ) ; 
}

Et ainsi de suite ( je ne sais pas si j’arrive à me faire comprendre, je l’espère ) ! Evidemment ce programme est un schéma ce n’est pas ce que je vais écrire si ce que je veux faire est possible. De plus je vais avoir deux joystick différent pour chaque mouvement au lieu d’avoir un joystick avec deux axes X et Y ( deuxième photo ).

Voilà voilà, je vous remercie d’avance ! Si vous avez des questions car j'ai mal expliqué allez-y !

Premiere photo :

Seconde photo :

Bonjour,

si tu as assez de broches disponibles sur ta carte arduino, pas de souci pour gérer 2 contrôleurs de moteurs dans le même programme.

Bonjour, tout d’abord merci pour ta réponse rapide, j’ai pris note de ce que tu m’as dit !

Je viens de terminer un programme pour pouvoir programmer deux driver L298 sur un seul arduino avec comme pilotage un joystick, voici le résultat :

// moteur A 
int ENA=3; 
int IN1 = 1; 
int IN2 = 2;

// moteur B 
int ENB=5; 
int IN3 = 4; 
int IN4 = 7; 

// moteur C
int ENC=6; 
int IN5 = 8; 
int IN6 = 9; 

// moteur D 
int END=10;
int IN7 = 11;
int IN8 = 12;

int val_motorA = 0;
int val_motorB = 0;
int val_motorC = 0;
int val_motorD = 0;

// joystick sortie analogique 
int joyVal;
int joyVal2;

void setup() {
  pinMode(ENA,OUTPPUT); // configurer les broches comme sortie 
  pinMode(ENB,OUTPPUT);
  pinMode(ENC,OUTPPUT);
  pinMode(END,OUTPPUT);
  pinMode(IN1,OUTPPUT);
  pinMode(IN2,OUTPPUT);
  pinMode(IN3,OUTPPUT);
  pinMode(IN4,OUTPPUT);
  pinMode(IN5,OUTPPUT);
  pinMode(IN6,OUTPPUT);
  pinMode(IN7,OUTPPUT);
  pinMode(IN8,OUTPPUT);


}

void loop() {
  int position_x = analogRead(A0); // lecture axe X
  int position_y = analogRead(A1); // lecture axe Y 

  // avant arrière 

  if ( position_y < 470 ) { 
    // moteur A 
    digitalWrite(IN1, HIGH );
    digitalWrite(IN2, LOW );
    // moteur B
    digitalWrite(IN3, HIGH );
    digitalWrite(IN4, LOW );
    //moteur C
    digitalWrite(IN5, HIGH );
    digitalWrite(IN6, LOW );
    // moteur D
    digitalWrite(IN7, HIGH );
    digitalWrite(IN8, LOW ); 

    val_motorA = map(position_y, 470, 0 , 0 , 255 );
    val_motorB = map(position_y, 470, 0 , 0 , 255 );
    val_motorC = map(position_y, 470, 0 , 0 , 255 );
    val_motorD = map(position_y, 470, 0 , 0 , 255 ); }
    

   else if ( position_y > 550 ) { 
    // moteur A 
    digitalWrite(IN1, LOW );
    digitalWrite(IN2, HIGH );
    // moteur B
    digitalWrite(IN3, LOW );
    digitalWrite(IN4, HIGH );
    //moteur C
    digitalWrite(IN5, LOW );
    digitalWrite(IN6, HIGH );
    // moteur D
    digitalWrite(IN7, LOW );
    digitalWrite(IN8, HIGH ); 

    val_motorA = map(position_y, 550, 1023 , 0 , 255 );
    val_motorB = map(position_y, 550, 1023 , 0 , 255 );
    val_motorC = map(position_y, 550, 1023 , 0 , 255 );
    val_motorD = map(position_y, 550, 1023 , 0 , 255 );

   }

   else{ 
    val_motorA = 0;
    val_motorB = 0;
    val_motorC = 0;
    val_motorD = 0;
   }

// gauche droite 

if ( position_x < 470 ) { 
    // moteur A 
    digitalWrite(IN1, HIGH );
    digitalWrite(IN2, LOW );
    // moteur B
    digitalWrite(IN3, LOW );
    digitalWrite(IN4, HIGH );
    //moteur C
    digitalWrite(IN5, LOW );
    digitalWrite(IN6, HIGH );
    // moteur D
    digitalWrite(IN7, HIGH );
    digitalWrite(IN8, LOW ); 

    val_motorA = map(position_y, 470, 0 , 0 , 255 );
    val_motorB = map(position_y, 470, 0 , 0 , 255 );
    val_motorC = map(position_y, 470, 0 , 0 , 255 );
    val_motorD = map(position_y, 470, 0 , 0 , 255 ); }
    

   else if ( position_x > 550 ) { 
    // moteur A 
    digitalWrite(IN1, LOW );
    digitalWrite(IN2, HIGH );
    // moteur B
    digitalWrite(IN3, HIGH );
    digitalWrite(IN4, LOW );
    //moteur C
    digitalWrite(IN5, HIGH );
    digitalWrite(IN6, LOW );
    // moteur D
    digitalWrite(IN7, LOW );
    digitalWrite(IN8, HIGH ); 

    val_motorA = map(position_y, 550, 1023 , 0 , 255 );
    val_motorB = map(position_y, 550, 1023 , 0 , 255 );
    val_motorC = map(position_y, 550, 1023 , 0 , 255 );
    val_motorD = map(position_y, 550, 1023 , 0 , 255 ); }

   else{ 
    val_motorA = 0;
    val_motorB = 0;
    val_motorC = 0;
    val_motorD = 0;
   }

analogWrite(ENA, val_motorA);
analogWrite(ENB, val_motorB);
analogWrite(ENC, val_motorC);
analogWrite(END, val_motorD);


}

Penses-tu que cela est correct ? ???
Actuellement, j’attends de recevoir les pieces pour pouvoir tester

Il vaut mieux éviter d'utiliser la broche digitale 1, qui sert pour la liaison série.
OUTPUT ne prend qu'un seul P

Pour le reste, tu le sauras en essayant...

Toujours en mouvement sans point d’arrêt?