Line Follower Code
Line Follower Code
/*
Sensors input port - P1
P1_0 --------> Left sensor
P1_4 --------> Right sensor
Motors output port - P0
P0_0 --------> Enable pin of the left half of the H-bridge
P0_1 --------> will drive the left motor in forward direction
P0_2 --------> will drive the left motor in reverse direction
P0_3 --------> will drive the right motor in forward direction
P0_4 --------> Enable pin of the right half of the H-bridge
P0_5 --------> will drive the right motor in reverse direction
*/
/*Delay function runs an idle loop to create a time delay. If the crystal used i
s of 11.0592 MHz then the argument passed in delay is in 'milliseconds'.*/
void Delay(unsigned int itime)
{
unsigned int i,j;
for(i=0;i< span=""><>
for(j=0;j<1275;j++);>//Idle loop
}
void Forward()
{
P0_1=1;
P0_2=0;
P0_3=1;
P0_5=0;
}
/*Generally for turning we use a pulsated wave so the bOt doesn t get out of contr
ol i.e. we run the motor for sometime then again stop it and this is done very q
uickly to create an effective pulse. See the function below.*/
void TurnLeft()
{
P0_1=0; /*Left motor is not running in any direction.*/
P0_2=0;
P0_3=1; /*Right motor is running in forward direction. bOt will eventually turn
left*/
P0_5=0;
Delay(50); /* Wait for 50 ms*/
P0_1=0; /*Motors are not running*/
P0_2=0;
P0_3=0;
P0_5=0;
Delay(50); /*Delay of another 50 ms*/
}
/*So in the above program we have effectively created a pulse of 100ms which is
on for 50ms and off for another 50ms. You can change this value to suit your nee
ds*/
/*Similarly we can write a function to turn right*/
void TurnRight()
{
P0_1=1; /*Left motor running in forward direction.*/
P0_2=0;
P0_3=0; /*Right motor is not running.*/
P0_5=0;
Delay(50); /*50ms time delay*/
P0_1=0; /*Motors not running in any direction*/
P0_2=0;
P0_3=0;
P0_5=0;
Delay(50); /*50ms time delay*/
}
void main()
{
/* The pins which are receiving inputs from the sensors should be initially set
to logic 1.*/
P1_0=1; /*Left sensor input*/
P1_4=1; /*Right sensor input*/
//main loop of the program
while(1)
{
if((P1_0==0)&&(P1_4==1))
TurnRight();
else if((P1_0==1)&&(P1_4==0))
TurnLeft();
else
Forward();
}
}