Blame | Last modification | View Log | Download
#include "laser.h"#include "16F88_Reg.H"#define SERVO PIN_B5 // Vystup pro rizeni serva#define LASER PIN_B4 // Vstup pro cteni laseru// kroutitka#define CERVENA 0 // AN0#define CERNA 1 // AN1//#define ZELENA 3 // AN3//#define MODRA 4 // AN4//#define OFFSET 100 // Predni kolecko vprostred pri care vprostred//#define HYSTERESE 3 // Rozdil mezi behem tam a zpetboolean edge;int8 uhel;#int_EXTEXT_isr(){int n, t1, t2, t;set_timer0(0); // Vynulovani casovace pro 2msoutput_high(SERVO);while(get_timer0()<(1000/256)); // Ceka 1msfor(n=uhel; n>0; n--) delay_us(3); // Sirka impulzu podle uhluoutput_low(SERVO);while(get_timer0()<(3000/256)); // Ceka do 3ms, nez zacne scanovatset_timer0(0); // Vynulovani casovace pro zjisteni polohy caryif(edge) // Zrcatko prejizdelo tam nebo zpet?{edge=false;ext_int_edge(H_TO_L); // Pristi inerrupt bude od opacne hranyINT0IF_1=0; // Povoleni dalsiho prerusenienable_interrupts(INT_EXT);enable_interrupts(GLOBAL);// do{while(0==input(LASER)); // Ceka na detekci cary// output_high(SERVO);t1=get_timer0(); // Poznamena cas nabezne hranywhile(1==input(LASER)); // Ceka az zkonci cara// output_low(SERVO);t2=get_timer0(); // Poznamena cas sestupne hranyt=t2-t1;} //while((t<5) || (t>7)); // Cara je detekovana, kdyz trva mezi xx msif ((t>3) && (t<8)) uhel=(160-(read_adc()>>2))-t1;set_adc_channel(1);}else{edge=true;ext_int_edge(L_TO_H);INT0IF_1=0; // Povoleni dalsiho prerusenienable_interrupts(INT_EXT);enable_interrupts(GLOBAL);// do{while(0==input(LASER)); // Ceka na detekci caryt1=get_timer0(); // Poznamena cas nabezne hranywhile(1==input(LASER)); // Ceka az zkonci carat2=get_timer0(); // Poznamena cas sestupne hranyt=t2-t1;} //while((t<5) || (t>7)); // Cara je detekovana, kdyz trva mezi xx msif ((t>3) && (t<8)) uhel=((read_adc()>>2)+32)+t1;set_adc_channel(0);}while(true);}void main(){setup_adc_ports(sAN0|sAN1|VSS_VDD); // AD pro kroutitkasetup_adc(ADC_CLOCK_INTERNAL);setup_spi(FALSE);setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);setup_timer_1(T1_DISABLED);setup_timer_2(T2_DISABLED,0,1);setup_comparator(NC_NC_NC_NC);setup_vref(FALSE);setup_oscillator(False);delay_ms(100);set_adc_channel(0);Delay_ms(1);ext_int_edge(L_TO_H);edge=true;uhel=((read_adc()>>2)+32)+30;;enable_interrupts(INT_EXT);enable_interrupts(GLOBAL);}