Rev 222 | Blame | Last modification | View Log | Download
// **** Objeti cihly vlevo **** LLLLint8 n;int8 r1,r2,rr;int1 flag;SetServo(CASMIN-5); // max. doleva, zatoc kolmo na caruset_pwm1_duty(0);set_pwm2_duty(140);output_low(MOT_L); // vpredoutput_low(MOT_R);disp(0x81);odocounter=get_timer1(); // Poznamenej aktualni stav odometriewhile(get_timer1()<(odocounter+6)); // Popojed definovanou vzdalenostset_pwm1_duty(80);set_pwm2_duty(80);set_adc_channel(LMAX);disp(0x82);cas=CASAVR-CASMIN;odocounter=get_timer1();flag=1;rr=20;while(true){if(input(HREF)){if(!input(PROXIMITY)){if(cas>(CASMIN+10)) cas-=10;}else{if(cas<(CASMAX-10)) cas+=10;};SetServoQ(cas);// Elektronicky diferencialif(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimaceif(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoruif(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeniif (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);set_pwm1_duty(r1);set_pwm2_duty(r2);while(input(HREF));};if(get_timer1()>(odocounter+5)) // Prodleva, nez se zacne detekovat cara{if(flag==1) {disp(0x83); flag=0;};if(read_adc()<THR_L) {delay_us(600); if (read_adc()<THR_L) {delay_us(600); if (read_adc()<THR_L) break;};}; // Neni to jen skvira nebo spina?};};disp(0x84);odocounter=get_timer1(); // Poznamenej aktualni stav odometrieSetServo(CASAVR); // Primy smerwhile((read_adc()<THR_L) || (get_timer1()<(odocounter+2))); // Popojed za caruSetServo(CASMIN); // max. doleva Lset_pwm1_duty(20);set_pwm2_duty(170);output_high(MOT_L); // levym kolem brzdioutput_low(MOT_R);odocounter=get_timer1(); // Poznamenej aktualni stav odometriewhile (true) // Znovu se musime dotknout cary{if(read_adc()<THR_L) // Dotkli jsme se levym senzorem{while(read_adc()<THR_L); // Prejedeme carucas=CASAVR-CASMIN; // nastavime, ze cara je rovnebreak;};set_adc_channel(RMAX); // Pravy UV sensordelay_us(40);if((get_timer1()>=(odocounter+2)) && (read_adc()<THR_L)) // Pravym senzorem nesmime caru prejet!{cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravobreak;};set_adc_channel(LMAX); // Levy UV sensordelay_us(40);}set_pwm1_duty(0); // vypni motoryset_pwm2_duty(0);SetServo(CASAVR-CASMIN); // doprostreddisp(0x85);set_pwm1_duty(255); // max. vpredset_pwm2_duty(255);output_low(MOT_L);output_low(MOT_R);odocounter=get_timer1(); // Poznamenej aktualni stav odometriewhile(get_timer1()<(odocounter+2)) // Ujed kousek{set_adc_channel(LMAX); // Levy UV sensordelay_us(40);if(read_adc()<THR_L) {cas=CASMIN; break;}; // Prejeli jsme caru vlevoset_adc_channel(RMAX); // Pravy UV sensordelay_us(40);if(read_adc()<THR_L) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo// cas=CASAVR-CASMIN; // Cara je rovne};