I doing a line following robot and i want to use sensor arranged in a inverted "V" shape for control purposes, from my sensors i am reading analog value of 1.45v when white surface is put across the sensor and 1.46 when Black surface is put across, i am struggling using ADC input for the program: The PWM alone works fine but i cannot seems to get the logic right especially using a analog input, 127 i have used as example of conversion analog input value from the sensor. may i please have help on this.
The algorithm goes like:
#include<16f887.h>
#fuses RC,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 8000000, INT_OSC)
//page 130, datasheet
//choosing frequency = 4.90khz -> period = 204us
//t2DIV = 4
//timer2 prescaler, PR2 = 0x65
//to setup the value for the pwm function:
//Duty = duty cycle/(t2DIV(1/8000000))
void main()
{
int remember = -1;
long DutyR = 0; //50% duty cycle
long DutyL = 0; //50% duty cycle
set_tris_B(0xFF);
set_tris_A(0xFF);
set_tris_D(0x00);
setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
setup_ccp2(CCP_PWM); //
setup_timer_2(T2_DIV_BY_4, 0x65, 1); //sets the frequency of the pwm?
//delay_ms(1);
set_pwm1_duty(DutyL);
set_pwm2_duty(DutyR);
while(true)
{
setup ADC(input_1, input_2, input_3); sensor 1,2 and 3
do ADC(input _1)
if (input_1< 127)
set_pwm1_duty(DutyL);
set_pwm2_duty(DutyR);
turn left slightly;
else turn right slightly
else if (input_2<127)
set_pwm1_duty(DutyL);
set_pwm2_duty(DutyR);
turn left moderately
else turn right moderately
else if (input_3<127)
set_pwm1_duty(DutyL);
set_pwm2_duty(DutyR);
turn left sharply;
else turn right sharply;
}
set_pwm1_duty(DutyL);
set_pwm2_duty(DutyR);
}
thank you.
The algorithm goes like:
#include<16f887.h>
#fuses RC,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 8000000, INT_OSC)
//page 130, datasheet
//choosing frequency = 4.90khz -> period = 204us
//t2DIV = 4
//timer2 prescaler, PR2 = 0x65
//to setup the value for the pwm function:
//Duty = duty cycle/(t2DIV(1/8000000))
void main()
{
int remember = -1;
long DutyR = 0; //50% duty cycle
long DutyL = 0; //50% duty cycle
set_tris_B(0xFF);
set_tris_A(0xFF);
set_tris_D(0x00);
setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
setup_ccp2(CCP_PWM); //
setup_timer_2(T2_DIV_BY_4, 0x65, 1); //sets the frequency of the pwm?
//delay_ms(1);
set_pwm1_duty(DutyL);
set_pwm2_duty(DutyR);
while(true)
{
setup ADC(input_1, input_2, input_3); sensor 1,2 and 3
do ADC(input _1)
if (input_1< 127)
set_pwm1_duty(DutyL);
set_pwm2_duty(DutyR);
turn left slightly;
else turn right slightly
else if (input_2<127)
set_pwm1_duty(DutyL);
set_pwm2_duty(DutyR);
turn left moderately
else turn right moderately
else if (input_3<127)
set_pwm1_duty(DutyL);
set_pwm2_duty(DutyR);
turn left sharply;
else turn right sharply;
}
set_pwm1_duty(DutyL);
set_pwm2_duty(DutyR);
}
thank you.