I built a line following robot with 5 analog IR sensors. It doesn't follow the line that well. Can anyone please check my code. I have used Arduino UNO development board to control the robot.
int s1=A0, s2=A1, s3=A2, s4=A3, s5=A4;
int v1,v2,v3,v4,v5;
int thres_val=350;
void setup()
{
pinMode(13,OUTPUT); //H-bridge
pinMode(12,OUTPUT); //H-bridge
pinMode(8,OUTPUT); //H-bridge
pinMode(7,OUTPUT); //H-bridge
}
void fwd(int a)
{
digitalWrite(13,HIGH);
digitalWrite(12,LOW);
digitalWrite(8,HIGH);
digitalWrite(7,LOW);
delay(a);
}
void back(int a)
{
digitalWrite(13,LOW);
digitalWrite(12,HIGH);
digitalWrite(8,LOW);
digitalWrite(7,HIGH);
delay(a);
}
void right(int a)
{
digitalWrite(13,LOW);
digitalWrite(12,LOW);
digitalWrite(8,HIGH);
digitalWrite(7,LOW);
delay(a);
}
void left(int a)
{
digitalWrite(13,HIGH);
digitalWrite(12,LOW);
digitalWrite(8,HIGH);
digitalWrite(7,HIGH);
delay(a);
}
void U_left(int a)
{
digitalWrite(13,LOW);
digitalWrite(12,HIGH);
digitalWrite(8,HIGH);
digitalWrite(7,LOW);
delay(a);
}
void U_right(int a)
{
digitalWrite(13,HIGH);
digitalWrite(12,LOW);
digitalWrite(8,LOW);
digitalWrite(7,HIGH);
delay(a);
}
void com_stop(int a)
{
digitalWrite(13,LOW);
digitalWrite(12,LOW);
digitalWrite(8,LOW);
digitalWrite(7,LOW);
delay(a);
}
void sen_read()
{
v1=analogRead(s1);
v2=analogRead(s2);
v3=analogRead(s3);
v4=analogRead(s4);
v5=analogRead(s5);
delay(7);
}
void navigate()
{
//sen_read();
if((v1<thres_val)&&(v2<thres_val)&&(v3>thres_val)&&(v4<thres_val)&&(v5<thres_val))
{
fwd(3);
}
else if((v1<thres_val)&&(v2>thres_val)&&(v3>thres_val)&&(v4<thres_val)&&(v5<thres_val))
{
left(1);
}
else if((v1<thres_val)&&(v2>thres_val)&&(v3<thres_val)&&(v4<thres_val)&&(v5<thres_val))
{
left(1);
}
else if((v1>thres_val)&&(v2>thres_val)&&(v3<thres_val)&&(v4<thres_val)&&(v5<thres_val))
{
left(1);
}
else if((v1>thres_val)&&(v2<thres_val)&&(v3<thres_val)&&(v4<thres_val)&&(v5<thres_val))
{
left(1);
}
else if((v1<thres_val)&&(v2<thres_val)&&(v3>thres_val)&&(v4>thres_val)&&(v5<thres_val))
{
right(1);
}
else if((v1<thres_val)&&(v2<thres_val)&&(v3<thres_val)&&(v4>thres_val)&&(v5<thres_val))
{
right(1);
}
else if((v1<thres_val)&&(v2<thres_val)&&(v3<thres_val)&&(v4>thres_val)&&(v5>thres_val))
{
right(1);
}
else if((v1<thres_val)&&(v2<thres_val)&&(v3<thres_val)&&(v4<thres_val)&&(v5>thres_val))
{
right(1);
}
else if((v1>thres_val)&&(v2>thres_val)&&(v3>thres_val)&&(v4<thres_val)&&(v5<thres_val))
{
U_left(250);
}
else if((v1<thres_val)&&(v2<thres_val)&&(v3>thres_val)&&(v4>thres_val)&&(v5>thres_val))
{
U_right(250);
}
else if((v1>thres_val)&&(v2>thres_val)&&(v3>thres_val)&&(v4>thres_val)&&(v5<thres_val))
{
U_left(250);
}
else if((v1<thres_val)&&(v2>thres_val)&&(v3>thres_val)&&(v4>thres_val)&&(v5>thres_val))
{
U_right(250);
}
else if((v1<thres_val)&&(v2>thres_val)&&(v3>thres_val)&&(v4>thres_val)&&(v5<thres_val))
{
fwd(1);
}
else if((v1>thres_val)&&(v2>thres_val)&&(v3>thres_val)&&(v4>thres_val)&&(v5>thres_val))
{
U_left(250);
}
else if((v1<thres_val)&&(v2<thres_val)&&(v3<thres_val)&&(v4<thres_val)&&(v5<thres_val))
{
back(1);
}
else
{
fwd(3);
}
}
void loop()
{
sen_read();
navigate();
}
Thanks in advance.