How to make a line foloower robot that goes back and forth the same line

Hello,
i managed to make a 4x4w robot to follow a line using L298N driver and IR modules. i want the robot to follow a line and then comes back following the same line, so i used four IR modules; two on the robot front, two on the back.
but my problem is that i could not write a proper code to do this, after trying so many times, i came here needing some guidance.

this sketch is for following a line but the robot does not come back, i would like to know what to add to this sketch to do what i want/
thank you.

    int motorA_E1 = 9;  
    int motorA_E2 = 10; 
    int motorA_speed = 5;
    int motorB_E3 = 11; 
    int motorB_E4 = 12; 
    int motorB_speed= 6;
    int left_sensor_pin = 2;
    int right_sensor_pin = 3;

   
void setup() {
   
  pinMode(motorA_E1, OUTPUT); 
  pinMode(motorA_E2, OUTPUT);
  pinMode(motorB_E3, OUTPUT);
  pinMode(motorB_E4, OUTPUT);
  pinMode(motorA_speed, OUTPUT);
  pinMode(motorB_speed, OUTPUT);
  
  pinMode(left_sensor_pin, INPUT);
  pinMode(right_sensor_pin, INPUT);

}

void loop() {
   
    boolean left_sensor_state=digitalRead(left_sensor_pin);
    boolean right_sensor_state=digitalRead(right_sensor_pin);
    
if (left_sensor_state==0 and right_sensor_state==0)
     {
    analogWrite (motorA_speed,120);
    analogWrite (motorB_speed,120);
     forward();
      
     }
   else if (left_sensor_state==1 and right_sensor_state==0)
     {
     analogWrite (motorA_speed,180);
     analogWrite (motorB_speed,180);
     turnLeft();
      
       
     }

      else if (left_sensor_state==0 and right_sensor_state==1)
    {
    analogWrite (motorA_speed,180);
    analogWrite (motorB_speed,180);  
    turnRight();
    
     }
   else if (left_sensor_state==1 and right_sensor_state==1)
     { 
       analogWrite (motorA_speed,0);
       analogWrite (motorB_speed,0); 
     off();
     
     
     }
 

}
void forward(){
    digitalWrite(motorA_E1,HIGH);  
    digitalWrite (motorA_E2,LOW);
    digitalWrite(motorB_E3,LOW);               
    digitalWrite (motorB_E4,HIGH);
   
     
}
void off() {
   digitalWrite(motorA_E1,LOW);  
    digitalWrite (motorA_E2,LOW);
    digitalWrite(motorB_E3,LOW);               
    digitalWrite (motorB_E4,LOW);
   
     
}
void turnRight(){
  digitalWrite(motorA_E1,HIGH);  
    digitalWrite (motorA_E2,LOW);
    digitalWrite(motorB_E3,HIGH);               
    digitalWrite (motorB_E4,LOW);
   
   
}
void turnLeft() {
   digitalWrite(motorA_E1,LOW);  
    digitalWrite (motorA_E2,HIGH);
    digitalWrite(motorB_E3,LOW);               
    digitalWrite (motorB_E4,HIGH);
     
}

Somehow the robot must "know" when to backtrack. How do You make that?
I suggest You make the robot turn around 180 degrees and use the same code for going back.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.