/roboti/istrobot/camerus/SW/876/camerus.c |
---|
1,7 → 1,6 |
//********* Robot Camerus pro IstRobot 2007 ************ |
//"$Id$" |
//***************************************************** |
// Verze pouzita na Robot Challenge |
#include ".\camerus.h" |
36,7 → 35,8 |
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky |
#define TRESHOLD 128 |
#define THR_H 128 |
#define THR_L 90 |
#byte INTCON = 0x0B // Interrupt configuration register |
#bit GIE = INTCON.7 |
172,7 → 172,7 |
return; |
}; |
output_low(IRTX); // Zapni LED na detekci prekazky |
delay_ms(10); |
delay_ms(5); |
if (input(IRRX)) // stale nas signal? |
{ |
output_low(MOT_L); // neni odraz -> vpred |
180,10 → 180,6 |
return; |
}; |
SetServo((CASAVR-CASMIN)); // rovne |
delay_ms(100); |
brzda(); |
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy |
// if(stav==cihla) return; // Po druhe nic neobjizdej |
// Pozor na rozjezd |
190,7 → 186,7 |
if(stav==jizda) // Objed cihlu |
{ |
#include ".\objizdka_R.c" |
#include ".\objizdka_L.c" |
} |
} |
430,10 → 426,10 |
{ |
set_adc_channel(LMAX); // Levy UV sensor |
delay_us(40); |
if(read_adc()<TRESHOLD) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo |
if(read_adc()<THR_L) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo |
set_adc_channel(RMAX); // Pravy UV sensor |
delay_us(40); |
if(read_adc()<TRESHOLD) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo |
if(read_adc()<THR_L) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo |
cas=CASAVR-CASMIN; // Cara je rovne |
}; |
stav=rozjezd; |
448,10 → 444,10 |
{ |
set_adc_channel(LMAX); // Levy UV sensor |
for(n=0;n<20;n++) if(input(HREF)) goto next_snap; |
if(read_adc()<TRESHOLD) cas=CASMIN; |
if(read_adc()<THR_L) cas=CASMIN; |
set_adc_channel(RMAX); // Pravy UV sensor |
for(n=0;n<20;n++) if(input(HREF)) goto next_snap; |
if(read_adc()<TRESHOLD) cas=CASMAX; |
if(read_adc()<THR_L) cas=CASMAX; |
}; |
} |
} |
/roboti/istrobot/camerus/SW/876/objizdka_L.c |
---|
1,133 → 1,94 |
// **** Objeti cihly vlevo **** LLLL |
int n; |
int8 n; |
int8 r1,r2,rr; |
int1 flag; |
SetServo(CASMIN); // prudce doleva |
set_pwm1_duty(0); // vpred |
set_pwm2_duty(200); |
output_low(MOT_L); |
SetServo(CASMIN-3); // max. doleva, zatoc kolmo na caru |
set_pwm1_duty(0); |
set_pwm2_duty(140); |
output_low(MOT_L); // vpred |
output_low(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==7) break; |
} |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_low(MOT_L); |
output_high(MOT_R); |
delay_ms(200); |
brzda(); |
disp(1); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<(odocounter+6)); // Popojed definovanou vzdalenost |
SetServo((CASAVR-CASMIN)); // rovne |
set_pwm1_duty(140); // vpred |
set_pwm2_duty(140); |
output_low(MOT_L); |
output_low(MOT_R); |
n=0; |
set_pwm1_duty(80); |
set_pwm2_duty(80); |
set_adc_channel(LMAX); |
disp(2); |
cas=CASAVR-CASMIN; |
odocounter=get_timer1(); |
flag=1; |
rr=20; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==10) break; |
} |
if(input(HREF)) |
{ |
if(!input(PROXIMITY)) |
{ |
if(cas>(CASMIN+10)) cas-=10; |
} |
else |
{ |
if(cas<(CASMAX-10)) cas+=10; |
}; |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
output_high(MOT_R); |
delay_ms(200); |
brzda(); |
SetServoQ(cas); |
SetServo(CASMIN); // max. doleva |
set_pwm1_duty(0); // vzad |
set_pwm2_duty(20); |
output_low(MOT_L); |
output_high(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==9) break; |
} |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(255); |
output_low(MOT_L); |
output_low(MOT_R); |
delay_ms(200); |
// Elektronicky diferencial |
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace |
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru |
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92 |
brzda(); |
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni |
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); |
SetServo((CASAVR-CASMIN)); // rovne |
set_pwm1_duty(140); // vpred |
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(3); flag=0;}; |
if(read_adc()<THR_L) {delay_us(600); if (read_adc()<THR_L) {delay_us(600); if (read_adc()<THR_L) break;};}; |
}; |
}; |
disp(4); |
while (read_adc()<THR_L); |
SetServo(CASMIN); // max. doleva L |
set_pwm1_duty(0); |
set_pwm2_duty(140); |
output_low(MOT_L); |
output_low(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==13) break; |
} |
while (read_adc()>THR_L); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<(odocounter+3)); // Popojed definovanou vzdalenost |
set_pwm1_duty(0); // vypni motory |
set_pwm2_duty(0); |
/* |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
output_high(MOT_R); |
delay_ms(200); |
brzda(); |
SetServo(CASMIN); // max. doleva |
set_pwm1_duty(0); // vzad |
set_pwm2_duty(20); |
output_low(MOT_L); |
output_high(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==6) break; |
} |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(255); |
output_low(MOT_L); |
output_low(MOT_R); |
delay_ms(200); |
*/ |
brzda(); |
SetServo(CASAVR-CASMIN); // doprostred |
SetServo((CASAVR-CASMIN)); // rovne |
set_pwm1_duty(190); // vpred |
set_pwm2_duty(190); |
disp(5); |
set_pwm1_duty(255); // max. vpred |
set_pwm2_duty(255); |
output_low(MOT_L); |
output_low(MOT_R); |
n=0; |
while(true) |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<(odocounter+2)) // Ujed kousek |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==9) break; |
} |
/* |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
output_high(MOT_R); |
delay_ms(100); |
*/ |
brzda(); |
cas=CASMIN; // Cara je vlevo |
stav=cihla; |
set_adc_channel(LMAX); // Levy UV sensor |
delay_us(40); |
if(read_adc()<THR_L) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo |
set_adc_channel(RMAX); // Pravy UV sensor |
delay_us(40); |
if(read_adc()<THR_L) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo |
cas=CASAVR-CASMIN; // Cara je rovne |
}; |
/roboti/istrobot/camerus/SW/876/objizdka_R.c |
---|
1,5 → 1,4 |
// **** Objeti cihly vpravo **** RRRR |
// Verze pouzita na Robot Challenge |
int8 n,i; |
int16 j; |
35,7 → 34,7 |
i=0; |
disp(2); |
disp(2); // Postupne doleva |
set_pwm1_duty(130); |
set_pwm2_duty(140); |
odocounter=get_timer1(); |
47,6 → 46,7 |
i+=8; |
}; |
/* |
disp(3); |
odocounter=get_timer1(); |
for(n=1;n<=7;n++) |
66,6 → 66,7 |
set_pwm1_duty(130-i); |
i+=8; |
}; |
*/ |
disp(5); |
odocounter=get_timer1(); |
95,10 → 96,10 |
{ |
set_adc_channel(LMAX); // Levy UV sensor |
delay_us(40); |
if(read_adc()<TRESHOLD) {delay_us(600); if(read_adc()<TRESHOLD) {cas=CASMIN; break;}; }; // Prejeli jsme caru vlevo |
if(read_adc()<THRESHOLD) {delay_us(600); if(read_adc()<THRESHOLD) {cas=CASMIN; break;}; }; // Prejeli jsme caru vlevo |
set_adc_channel(RMAX); // Pravy UV sensor |
delay_us(40); |
if(read_adc()<TRESHOLD) {delay_us(600); if(read_adc()<TRESHOLD) {cas=CASMAX; break;}; }; // Prejeli jsme caru vpravo |
if(read_adc()<THRESHOLD) {delay_us(600); if(read_adc()<THRESHOLD) {cas=CASMAX; break;}; }; // Prejeli jsme caru vpravo |
} |
108,7 → 109,7 |
for(j=0;j<10000;j++) |
{ |
if(input(HREF)) {SetServoQ(CASMIN); while(input(HREF));}; // doleva |
if (read_adc()<TRESHOLD) break; |
if (read_adc()<THRESHOLD) break; |
} |
} |
else |
117,7 → 118,7 |
for(j=0;j<10000;j++) |
{ |
if(input(HREF)) {SetServoQ(CASMAX); while(input(HREF));}; // doprava |
if (read_adc()<TRESHOLD) break; |
if (read_adc()<THRESHOLD) break; |
} |
} |
137,7 → 138,7 |
set_pwm2_duty(0); |
output_low(MOT_L); |
output_high(MOT_R); |
while (read_adc()>TRESHOLD); |
while (read_adc()>THRESHOLD); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<(odocounter+4)); // Popojed definovanou vzdalenost |
set_pwm1_duty(0); // reverz (zabrzdi) |
157,13 → 158,13 |
{ |
set_adc_channel(LMAX); // Levy UV sensor |
delay_us(40); |
if(read_adc()<TRESHOLD) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo |
if(read_adc()<THRESHOLD) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo |
set_adc_channel(RMAX); // Pravy UV sensor |
delay_us(40); |
if(read_adc()<TRESHOLD) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo |
if(read_adc()<THRESHOLD) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo |
cas=CASAVR-CASMIN; // Cara je rovne |
}; |
stav=cihla; // Stav po objeti cihly, uz zadna cihla asi nebude |
//stav=cihla; // Stav po objeti cihly, uz zadna cihla asi nebude |
//odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
//rr=60; // Nerozumna rychlost pro rozjeti |