the following program is for line follower.
there is no error message while compiling but this is not working for my robot.
does aurdino support do_while loop ?
what are the corrections i want to make in this program to run my robo smoothly.
my logic is, if a right turn is come, robo will take right turn until straight condition comes. other junctions are also like this.
please help.
void setup()
{
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(14,INPUT);
pinMode(15,INPUT);
pinMode(16,INPUT);
pinMode(17,INPUT);
pinMode(18,INPUT);
Serial.begin(9600);
}
void loop()
{
int S1=digitalRead(14);
int S2=digitalRead(15);
int S3=digitalRead(16);
int S4=digitalRead(17);
int S5=digitalRead(18);
if(S1==LOW && S2==LOW && S3==LOW && S4==LOW && S5==LOW) //0 0 1 0 0 NORMAL STRAIGHT
{
Serial.print("STRAIGHT");
digitalWrite(10,LOW); //STRAIGHT
digitalWrite(9,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
}
else if (S1==LOW && S2==HIGH && S3==LOW && S4==HIGH && S5==LOW) //0 1 1 1 0 + CROSS
{
do
{
Serial.print("+ CROSS");
digitalWrite(10,LOW); //LEFT
digitalWrite(9,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
}
while(!(S1==LOW && S2==LOW && S3==LOW && S4==LOW && S5==LOW));
}
else if (S1==LOW && S2==HIGH && S3==LOW && S4==LOW && S5==LOW) //0 1 1 0 0 LEFT JUNCTION
{
do
{
Serial.print("LEFT JUNCTION");
digitalWrite(10,LOW); //LEFT
digitalWrite(9,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
}
while(!(S1==LOW && S2==LOW && S3==LOW && S4==LOW && S5==LOW));
}
else if (S1==LOW && S2==LOW && S3==LOW && S4==HIGH && S5==LOW) //0 0 1 1 0 RIGHT JUNCTION
{
do
{
Serial.print("RIGHT JUNCTION");
digitalWrite(10,LOW); //STRAIGHT
digitalWrite(9,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
}
while(!(S1==LOW && S2==LOW && S3==LOW && S4==LOW && S5==LOW));
}
else if (S1==LOW && S2==HIGH && S3==HIGH && S4==LOW && S5==LOW) //0 1 0 0 0 LEFT TURN & LEFT BEND
{
do
{
Serial.print("LEFT TURN OR BEND");
digitalWrite(10,LOW); //LEFT
digitalWrite(9,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
}
while(!(S1==LOW && S2==LOW && S3==LOW && S4==LOW && S5==LOW));
}
else if (S1==LOW && S2==LOW && S3==HIGH && S4==HIGH && S5==LOW) //0 0 0 1 0 RIGHT TURN & RIHGT BEND
{
do
{
Serial.print("RIGHT TURN OR BEND");
digitalWrite(10,HIGH); //RIGHT
digitalWrite(9,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
}
while(!(S1==LOW && S2==LOW && S3==LOW && S4==LOW && S5==LOW));
}
else if (S1==LOW && S2==LOW && S3==LOW && S4==HIGH && S5==HIGH) //0 0 1 1 1 ACUTE RIGHT
{
do
{
Serial.print("ACUTE RIGHT");
digitalWrite(10,HIGH); //RIGHT
digitalWrite(9,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
}
while(!(S1==LOW && S2==LOW && S3==LOW && S4==LOW && S5==LOW));
}
else if (S1==HIGH && S2==HIGH && S3==LOW && S4==LOW && S5==LOW) //1 1 1 0 0 ACUTE LEFT
{
do
{
Serial.print("ACUTE LEFT");
digitalWrite(10,LOW); //LEFT
digitalWrite(9,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
}
while(!(S1==LOW && S2==LOW && S3==LOW && S4==LOW && S5==LOW));
}
else if (S1==LOW && S2==LOW && S3==HIGH && S4==LOW && S5==LOW) //0 0 0 0 0 NO LINE
{
do
{
Serial.print("NO LINE");
digitalWrite(10,HIGH); //RIGHT
digitalWrite(9,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);HGJ
}
while(!(S1==LOW && S2==LOW && S3==LOW && S4==LOW && S5==LOW));
}
else if (S1==LOW && S2==HIGH && S3==HIGH && S4==HIGH && S5==LOW) //0 1 0 1 0 T JUNCTION
{
do
{
Serial.print("T JUNCTION");
digitalWrite(10,LOW); //LEFT
digitalWrite(9,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
}
while(!(S1==LOW && S2==LOW && S3==LOW && S4==LOW && S5==LOW));
}
}