Following a straight line

We have the code and i has worked a couple of times after that it goes different paths every time we run it .

this is the road: -----I------I-------I------

int rightMotorPin1 = 9;
int rightMotorPin2 = 6;
int leftMotorPin1 = 5;
int leftMotorPin2 = 3;
int leftSensorPin = 7; // black == high
int leftSensor ;
int rightSensor ;
int middleSensor;
int rightSensorPin = 4;
int middleSensorPin = 13;
int clawMotorPin1 = 2;
int clawMotorPin2 = 8;
int armMotorPin1 = 10;
int armMotorPin2 = 11;
int ultratrigPin1 = 12;
int ultraechoPin2 = 1;
long duration, inches;
int C1 = 0;
int C2 = 1;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(rightMotorPin1, OUTPUT);
pinMode(rightMotorPin2, OUTPUT);
pinMode(leftMotorPin1, OUTPUT);
pinMode(leftMotorPin2, OUTPUT);
pinMode(leftSensorPin, INPUT);
pinMode(rightSensorPin,INPUT);
pinMode(middleSensorPin, INPUT);
pinMode(clawMotorPin1, OUTPUT);
pinMode(clawMotorPin2, OUTPUT);
pinMode(armMotorPin1, OUTPUT);
pinMode(armMotorPin2, OUTPUT);
pinMode(ultratrigPin1, OUTPUT);
pinMode(ultraechoPin2, INPUT);
pinMode(12, OUTPUT);
pinMode(A0, INPUT);
}
void loop() {
sensorCheck();

//
//Serial.println(leftSensor);
//Serial.println(rightSensor);
//Serial.println(middleSensor);

while (leftSensor == LOW && middleSensor == HIGH && rightSensor == LOW )
{

driveForward(100);
Serial.println("Drive forward");
sensorCheck();
}

while (leftSensor == HIGH && middleSensor == HIGH && rightSensor == HIGH )
{
if(C1==0){
stopMoving();
Serial.println("GO FORWARD");
driveForward(100);
delay(230);
stopMoving();
delay(500);
Serial.println("STOP");
sensorCheck();
turnLeft90();
if (leftSensor == LOW && middleSensor == HIGH && rightSensor == LOW ){
Serial.println("Took turn");
driveForward(50);
delay(200);
stopMoving();
delay(500);
}
else
{
turnLeft90();
// ultraSensorcheck();
}
C1=1;
}
else if(C1==1)
{
driveForward(100);
delay(300);
sensorCheck();
Serial.println("GO STRAIGHT");
C1=2;
}
else
{
stopMoving();
Serial.println("GO FORWARD");
driveForward(100);
delay(230);
stopMoving();
delay(500);
Serial.println("STOP");
sensorCheck();
turnRight90();
Serial.println("GO RIGHT");
if (leftSensor == LOW && middleSensor == HIGH && rightSensor == LOW ){
Serial.println("Took turn");
driveForward(50);
delay(200);
stopMoving();
delay(500);
C1 = 0;
Serial.println(C1);
}
else
{
turnRight90();
// ultraSensorcheck();
}
}

}

while (leftSensor == LOW && middleSensor == LOW && rightSensor == LOW )
{
turnLeft180();
sensorCheck();
}

while (leftSensor == HIGH && middleSensor == LOW && rightSensor == HIGH )
{

stopMoving();
Serial.println("Stop");
sensorCheck();
}

while (leftSensor == HIGH && middleSensor == HIGH && rightSensor == LOW)
{
stopMoving();
//delay(10);
leftMotorBackward(170);
rightMotorForward(170);
Serial.println("Turn Left");
sensorCheck();
}

while (leftSensor == HIGH && middleSensor == LOW && rightSensor == LOW)
{
stopMoving();
//delay(10);
leftMotorBackward(170);
rightMotorForward(170);
Serial.println("turn left");
sensorCheck();
}

while (leftSensor == LOW && middleSensor == LOW && rightSensor == HIGH )
{
stopMoving();
//delay(10);
rightMotorBackward(170);
leftMotorForward(170);
Serial.println("TURN RIGHT");
sensorCheck();
}

while (leftSensor == LOW && middleSensor == HIGH && rightSensor == HIGH )
{
stopMoving();
//delay(10);
rightMotorBackward(170);
leftMotorForward(170);
Serial.println("TURN RIGHT");
sensorCheck();
}
}

void rightMotorForward(int x){
analogWrite(rightMotorPin1, x);
analogWrite(rightMotorPin2, 0);
}

void rightMotorBackward(int x){
analogWrite(rightMotorPin1, 0);
analogWrite(rightMotorPin2, x);
}

void leftMotorForward(int x){
analogWrite(leftMotorPin1, x);
analogWrite(leftMotorPin2, 0);
}

void leftMotorBackward(int x){
analogWrite(leftMotorPin1, 0);
analogWrite(leftMotorPin2, x);
}

void rotateClockwise(int x){
rightMotorBackward(x);
leftMotorForward(x);
}

void rotateCounterClockwise(int x){
rightMotorForward(x);
leftMotorBackward(x);
}
void turnLeft90(){
rotateCounterClockwise(150);
delay(600);
}

void turnLeft180(){
turnLeft90();
turnLeft90();
delay(850);
}

void turnRight90(){
rotateClockwise(150);
delay(800);
}

void rightslowDown(){
analogWrite(rightMotorPin1, 150);
analogWrite(rightMotorPin2, 0);

}

void leftslowDown(){
analogWrite(leftMotorPin1, 0);
analogWrite(leftMotorPin2, 150);

}

void rightspeedUp(){
analogWrite(rightMotorPin1, 170);
analogWrite(rightMotorPin2, 0);
}
void leftspeedUp(){
analogWrite(leftMotorPin1, 170);
analogWrite(leftMotorPin2, 0);
}

void leftStop(){

analogWrite(leftMotorPin1, 0);
analogWrite(leftMotorPin2, 0);
}

void rightStop(){
analogWrite(rightMotorPin1, 0);
analogWrite(rightMotorPin2, 0);
}

void grabCup(){
stopMoving();
openClaw();
driveForward(50);
delay(500);
stopMoving();
closeClaw();
}

void openClaw(){

analogWrite(clawMotorPin1, 0);
analogWrite(clawMotorPin2, 150);
delay(500);
stopMoving();

}

void closeClaw(){

analogWrite(clawMotorPin1, 150);
analogWrite(clawMotorPin2, 0);
delay(500);

}

void driveBackward(int x){
rightMotorBackward(x);
leftMotorBackward(x);
}
void stopMoving(){
rightMotorForward(0);
leftMotorForward(0);
}

void driveForward(int x){
rightMotorForward(x);
leftMotorForward(x);
}
void sensorCheck(){

leftSensor = digitalRead(leftSensorPin);
rightSensor = digitalRead(rightSensorPin);
middleSensor = digitalRead(middleSensorPin);
}

void ultraSensorcheck(){

digitalWrite(12, LOW);
delayMicroseconds(2);
digitalWrite(12, HIGH);
delayMicroseconds(5);
digitalWrite(12, LOW);

duration = pulseIn(A0, HIGH);

inches = duration / 74 / 2;

Serial.print(inches);
Serial.print("in ");
Serial.println();
}

It is a line with forks and a curve at the beginning

while (leftSensor == LOW && middleSensor == HIGH && rightSensor == LOW )
{

driveForward(100);
Serial.println("Drive forward");
sensorCheck();
}

Why is this a while loop? The loop() function already loops.

Once you have started the motors spinning at some speed, it is NOT necessary to set the speed again and again.

Your function names leave a lot to be desired.

void turnRight90(){
 rotateClockwise(150);
 delay(800);
}

You are guessing/hoping that 800 milliseconds is the right amount of time at that speed (differential) to accomplish a 90 degree turn. Wax the floor, and the time will change. Carpet the floor, and the time will change. Some wear on the tires, and the time will change. The battery starts going dead, and the time will change.

Basing the degree of turn on time is not going to produce good results long term.

after that it goes different paths every time we run it .

But, telling us what the code actually does, and describing how the servos are powered, what sensors you are using, etc. would take the fun out of the guessing game you want us to play.

I don't do guessing games.

2-Wire Motor 393
Module

3- IR sensors

The Robot is suppose to go, stop a each intersection go to the left check for cups go 190 degrees and go forward check and go back to the main line.

Please edit your post to add code tags ("</>" button).