void main() { initpwm(); adc_init(); while(1) { int i=adc_read(0); i=i/4; OCR0=i; _delay_ms(10); } }
void main() { //CALL THE INITIALIZING FUNCTION initport(); initpwm(); while(1) { indicator(); CalcError(); if((error == 0) && (s4+s5==2)) { T1CON.TMR1ON = 0; motor_LF(); //FWD AT FULL SPEED motor_RF(); PWM1_CHANGE_DUTY(255); PWM2_CHANGE_DUTY(255); delay_ms(10); } if((s1+s2+s3+s4+s5+s6+s7+s8) == 0) //ROBOT HAS OVERSHOOT { T1CON.TMR1ON = 0; if(lastreading == 'r') //CHECKS IF THE LAST SENSOR ACTIVATED WAS RIGHT { T1CON.TMR1ON = 0; motor_RB(); //TURN RIGHT AT FULL SPEED motor_LF(); PWM1_CHANGE_DUTY(255); PWM2_CHANGE_DUTY(255); delay_ms(10); //error=0; } else if(lastreading == 'l') //CHECKS IF THE LAST SENSOR ACTIVATED WAS LEFT { T1CON.TMR1ON = 0; motor_LB(); //TURN LEFT AT FULL SPEED motor_RF(); PWM1_CHANGE_DUTY(255); PWM2_CHANGE_DUTY(255); delay_ms(10); //error=0; } } if ( counter>200) { T1CON.TMR1ON = 0; PORTC.F7 = 0; PORTC.F6 = 0; PORTC.F5 = 0; PORTC.F4 = 0; while(1); } if( (s1+s2+s3+s4+s5+s6+s7) == 7 || (s2+s3+s4+s5+s6+s7+s8) == 7 || (s1+s2+s3+s4+s5+s6+s7+s8) == 8) // TO STOP THE MOTOR AT THE END OF LINE { T1CON.TMR1ON = 1; // enable timer1 // delay_ms(3) ; // if((s1+s2+s3+s4+s5+s6+s7+s8) == 0) /* { PORTC.F7 = 0; PORTC.F6 = 0; PORTC.F5 = 0; PORTC.F4 = 0; */ } else //ROBOT ON THE LINE { T1CON.TMR1ON = 0; PROPORTIONAL = error * kp; INTEGRAL += error ; INTEGRAL *= ki; DERIVATIVE = (error - perror); correction = ( (PROPORTIONAL) + (INTEGRAL) + (DERIVATIVE*kd)); rightpulse = basespeed + (correction/2); leftpulse = basespeed - (correction/2); motor_RF(); motor_LF(); if(leftpulse > 255) //LEFT CORRECTION EXCEED leftpulse = 255; if(rightpulse > 255) //RIGHT CORRECTION EXCEED rightpulse = 255; if(leftpulse < 0) //LEFT CORRECTION EXCEED leftpulse = 0; if(rightpulse < 0) //RIGHT CORRECTION EXCEED rightpulse = 0; PWM1_CHANGE_DUTY(rightpulse); PWM2_CHANGE_DUTY(leftpulse); } delay_ms(10); } }