User manual

76l Robotics experiment with PIC microcontroller
Listing A9-1 : The C program of Line tracking robot
/********************************************************/
/***** Track Black line Forward if cross line ***********/
/********************************************************/
#include <motor.h>
int Sensor0,Sensor1; // Save Analog
char Txt[6]; // Save convert to string
void Read_Adc()
{
ADCON0=0b11000001; // Select Analog0 RC_Mode and ADON
ADCON0.GO=1; // Start Convert
while(ADCON0.GO); // Wait Until Convert Complete
Sensor0=(ADRESH*4)+(ADRESL/64); // 10 bit Data ==> sensor0
ADCON0=0b11000101; // Select Analog1 RC_Mode and ADON
ADCON0.GO=1; // Start Convert
while(ADCON0.GO); // Wait Until Convert Complete
Sensor1=(ADRESH*4)+(ADRESL/64); // 10 bit Data ==> sensor1
}
void main()
{
Delay_ms(1000); // Start up Delay
Lcd_Init(&PORTD); // Initial LCD
ANSEL = 0xFF; // PORTA ==> Analog
TRISA = 0xFF; // PORTA ==> input
Lcd_Cmd(LCD_CURSOR_OFF); // LCD cursor off
while(1)
{
Read_Adc();
WordToStr(Sensor0,Txt); // Convert Sensor0 to string
Lcd_Out(1,1,Txt); // and show on LCD
WordToStr(Sensor1,Txt); // Convert Sensor1 to string
Lcd_Out(2,1,Txt); // and show on LCD
if ((Sensor0>500)&(Sensor1>500)) // Check All Sensor are white
Forward(255); // Forward
if ((Sensor0<500)&(Sensor1<500)) // All Sensor are black (on cross)
{
Forward(255); // Forward 0.3 Second
Delay_ms(300);
}
if (Sensor0<500) // Sensor0 Only detect line
{
S_Left(255); // spin Left
}
if (Sensor1<500) // Sensor1 Only detect line
{
S_Right(255); // Spin Right
}
}
}