Code arduino voiture suiveuse de ligne TPE

Bonjour,
Nous sommes en 1èreS et nous sommes un groupe de 4 pour les TPE.
Nous construisons une voiture qui suit une ligne.
Nous avons déjà réaliser le moteur faisant tourner les roues à l'arrière et le servo moteur faisant diriger les roues à l'avant de notre voiture.
Nous avons 3 capteurs positionnés à l'avant utilisés pour capter la ligne et faire ainsi tourner la voiture en fonction de la ligne dessinée sur le sol.
Nous avons le code arduino pour le moteur qui fonctionne.
Nous avons essayé d'assembler le code du moteur avec le code du servo et des capteurs, ce qui donne :

#include <Servo.h>
#define PIRD 2
#define PIRM 3
#define PIRG 4
#define MOTEUR 8
int val = 0;
int pirState = LOW;
int servoPin = 9;

Servo servo;

int pos = 0;

void setup()
{
servo.attach(servoPin);
pinMode(MOTEUR, OUTPUT);
pinMode(PIRD, INPUT);
pinMode(PIRM, INPUT);
pinMode(PIRG, INPUT);
Serial.begin(9600);
}

void loop()

{
Serial.println(digitalRead(PIRM));
val = digitalRead(PIRM);
if(val == LOW)
{
if(pirState == LOW)
{
digitalWrite(MOTEUR, HIGH);
pirState = HIGH;
}
}
{
Serial.println(digitalRead(PIRM));
val = digitalRead(PIRM);
if(val == HIGH);

Serial.println(digitalRead(PIRD));
val = digitalRead(PIRD);

if(val == HIGH)
if(pirState == LOW)
{
digitalWrite(MOTEUR, HIGH);
for (pos = 0; pos <= 45; pos += 1)

servo.write(pos);
delay(15);

pirState = HIGH;
}
}
{
Serial.println(digitalRead(PIRM));
val = digitalRead(PIRM);
if(val == HIGH);

Serial.println(digitalRead(PIRG));
val = digitalRead(PIRG);

if(val == HIGH)

if(pirState == LOW)
{
digitalWrite(MOTEUR, HIGH);
for (pos = 45; pos >= 0; pos -= 1)
{
servo.write(pos);
delay(15);
}
pirState = HIGH;
}
}
}

Quand on effectue tous les branchements, rien ne fonctionne, pourriez-vous nous aider ?
Nous devons le rendre la semaine prochaine donc nous avons besoin d'aide au plus vite.
Merci d'avance :slight_smile:

hello
votre code entre balises voir là

quels sont ces capteurs qui vous renvoient 1 ou 0 s'il sont ou non sur la ligne?

_dans votre code vous utilisez le meme flag "pirState" pour toutes les manip...
_il faudrait probablement pirState_M, pirState_D, pirState_G.
_le véhicule tourne, il n’arrête jamais de tourner.
_et la position milieu du servo pour aller tout droit.
_quand vous tournez, c'est du tout ou rien de 0 à 45°..........

_mettez des commentaires comme ceux ci

#include <Servo.h>
#define PIRD 2
#define PIRM 3
#define PIRG 4
#define MOTEUR 8
int val = 0;           
int pirState_M = LOW;   
int pirState_D = LOW;  
int pirState_G = LOW;  
int servoPin = 9;
     
Servo servo; 
     
int pos = 0; 
     
void setup()
{
  servo.attach(servoPin);
  pinMode(MOTEUR, OUTPUT);
  pinMode(PIRD, INPUT);
  pinMode(PIRM, INPUT);
  pinMode(PIRG, INPUT);
  Serial.begin(9600);
}
     
void loop()
     
{//si pas d'obstacle, mise en marche du moteur
  Serial.println(digitalRead(PIRM));
  val = digitalRead(PIRM);
  if(val == LOW)           
  {
    if(pirState_M == LOW)     
    {
      digitalWrite(MOTEUR, HIGH);
      pirState_M = HIGH;       
    }
  }
    {//si le moteur est en marche, on regarde à droite 
      Serial.println(digitalRead(PIRM));
      val = digitalRead(PIRM);
      if(val == HIGH);//s'il y a un obstacle devant
 
      Serial.println(digitalRead(PIRD));
      val = digitalRead(PIRD);//on regarde à droite 
 
      if(val == HIGH)         //s'il y a un obstacle à droite
      if(pirState_G == LOW)     //si on ne tournait pas déjà à gauche
     {         
       digitalWrite(MOTEUR, HIGH); //moteur en marche 
       for (pos = 0; pos <= 45; pos += 1)//on tourne à gauche

       servo.write(pos);         
       delay(15);                     
 
      pirState_G = HIGH;       
     }
   }   
     {//si le moteur est en marche, on regarde à gauche 
       Serial.println(digitalRead(PIRM));
       val = digitalRead(PIRM);
       if(val == HIGH);//s'il y a un obstacle devant
 
      Serial.println(digitalRead(PIRG));
      val = digitalRead(PIRG);//on regarde à gauche
 
      if(val == HIGH)//s'il y a un obstacle à gauche
 
      if(pirState_D == LOW)   //si on ne tournait pas déjà à droitee
      {           
        digitalWrite(MOTEUR, HIGH);//moteur en marche
        for (pos = 45; pos >= 0; pos -= 1) //on tourne à droite
        {
          servo.write(pos);           
           delay(15);                   
        }                     
       pirState_D = HIGH;     
      }
   }   
}