
/*  Contrôle de deux moteurs cc avec un L298N
   sketch modifié d’après http://electroniqueamateur.blogspot.com/2016/06/controle-dun-ou-deux-moteurs-cc-avec.html
*/

// définition des pins de l'Arduino qui contrôlent le 1er moteur
#define pinIN1 8
#define pinIN2 9
#define pinENA 10 // doit être une pin PWM 

// définition des pins de l'Arduino qui contrôlent le 2e moteur
#define pinIN3 12
#define pinIN4 13
#define pinENB 11 // doit être une pin PWM 


void setup() {

  // toutes ces pins sont des sorties

  pinMode(pinIN1, OUTPUT);
  pinMode(pinIN2, OUTPUT);
  pinMode(pinENA, OUTPUT);

  pinMode(pinIN3, OUTPUT);
  pinMode(pinIN4, OUTPUT);
  pinMode(pinENB, OUTPUT);

}

void loop() {
avance();
recule();
tourne_droite();
tourne_gauche();
arret();
}

void avance(){
 // le premier moteur tourne en marche avant

  analogWrite(pinENA, 200); 
  // si le moteur ne tourne pas du tout, augmentez la valeur
  digitalWrite(pinIN1, true);
  digitalWrite(pinIN2, false);

  // le deuxième moteur tourne en marche avant

  analogWrite(pinENB, 200); 
  digitalWrite(pinIN3, true);
  digitalWrite(pinIN4, false);

  // on les laisse tourner comme ça pendant 1 seconde

  delay(1000);
}

void recule(){
// le premier moteur tourne en marche arrière

  analogWrite(pinENA, 200); 
  digitalWrite(pinIN1, false); // le contraire de ce qu'on avait en marche avant
  digitalWrite(pinIN2, true);
  // le deuxième moteur tourne en marche arrière
  analogWrite(pinENB, 200); // augmentez le nombre si votre moteur ne tourne pas du tout
  digitalWrite(pinIN3, false); // le contraire de ce qu'on avait en marche arrière
  digitalWrite(pinIN4, true);

  // on les laisse tourner comme ça pendant 1 seconde

  delay(1000);
}
void tourne_droite(){
 // le premier moteur est à l’arrêt
  analogWrite(pinENA, 0); 
  // le deuxième moteur tourne en marche avant
  analogWrite(pinENB, 200); 
  digitalWrite(pinIN3, true);
  digitalWrite(pinIN4, false);

  delay(1000);
}

void tourne_gauche(){
 // le premier moteur tourne en marche avant
  analogWrite(pinENA, 200); 
  digitalWrite(pinIN1, true);
  digitalWrite(pinIN2, false);

  // le deuxième moteur est à l’arrêt

  analogWrite(pinENB, 0); 
  delay(1000);
}


void arret(){
 // le premier moteur est à l’arrêt
  analogWrite(pinENA, 0); 
  // le deuxième moteur est à l’arrêt
  analogWrite(pinENB, 0); 
  // on les laisse à l’arrêt pendant 1 seconde
  delay(1000);
}


