# define ml1 10
# define ml2 9
# define mr1 5
# define mr2 3
# define IR1 2
# define IR2 12
# define IR3 13
# define IR4 11
# define IR5 8
int spd1=100,spd2=50;
int a,b,c,d,e;
void setup(){
pinMode(ml1, OUTPUT);
pinMode(ml2, OUTPUT);
pinMode(mr1, OUTPUT);
pinMode(mr2, OUTPUT);
pinMode(IR1, INPUT);
pinMode(IR2, INPUT);
pinMode(IR3, INPUT);
pinMode(IR4, INPUT);
pinMode(IR5, INPUT);
}
void loop(){
read();
if((a==0)&&(b==0)&&(c==1)&&(d==0)&&(e==0)){
straight();
}
else if(((a==0)&&(b==1))||(a==1)&&(b==0)){
left();
}
else if((a==1)&&(b==1)){
s_left();
}
else if((a==0)&&(b==0)&&(c==1)&&(d==1)){
do{
straight();
}while(d==0);
read();
if(c==0){
right();
}
else{
straight();
}
}
else if((a==0)&&(b==0)&&(c==0)&&(d==0)&&(e==0)){
back();
}
}
void read(){
a=digitalRead(IR1);
b=digitalRead(IR2);
c=digitalRead(IR3);
d=digitalRead(IR4);
e=digitalRead(IR5);
}
void left(){
analogWrite(ml1, spd2);
analogWrite(ml2, LOW);
analogWrite(mr1, spd1);
analogWrite(mr2, LOW);
}
void s_left(){
analogWrite(ml1, LOW);
analogWrite(ml2, spd1);
analogWrite(mr1, spd1);
analogWrite(mr2, LOW);
}
void right(){
analogWrite(ml1, spd1);
analogWrite(ml2, LOW);
analogWrite(mr1, spd2);
analogWrite(mr2, LOW);
}
void s_right(){
analogWrite(ml1, spd1);
analogWrite(ml2, LOW);
analogWrite(mr1, LOW);
analogWrite(mr2, spd1);
}
void back(){
do{
left();
}while((a==0)&&(b==0)&&(c==1)&&(d==0)&&(e==0));
}
void straight(){
analogWrite(ml1, spd1);
analogWrite(ml2, LOW);
analogWrite(mr1, spd1);
analogWrite(mr2, LOW);
}
void stop(){
analogWrite(ml1, LOW);
analogWrite(ml2, LOW);
analogWrite(mr1, LOW);
analogWrite(mr2, LOW);
}