52,14 → 52,13 |
int8 rrold; |
|
// Zobrazeni jednoho byte na modulu LEDbar |
void disp(int8 x) |
inline void disp(int8 x) |
{ |
int n; |
|
x=~x; |
for(n=0;n<=7;n++) |
{ |
if (x & 1 == 1) output_high(DATA); else output_low(DATA); |
if (x & 1 == 1) output_low(DATA); else output_high(DATA); |
output_high(CP); |
x>>=1; |
output_low(CP); |
102,18 → 101,18 |
set_pwm2_duty(0); |
setup_ccp1(CCP_OFF); |
setup_ccp2(CCP_OFF); |
for (n=0;n<100;n++) |
for (n=0;n<200;n++) |
{ |
output_low(MOT_L); |
output_low(MOT_R); |
output_high(MOT_1); |
output_high(MOT_2); |
delay_us(800); |
delay_us(400); |
output_high(MOT_L); |
output_high(MOT_R); |
output_low(MOT_1); |
output_low(MOT_2); |
delay_us(800); |
delay_us(400); |
} |
output_low(MOT_L); // smer vpred |
output_low(MOT_R); |
156,7 → 155,7 |
{ |
set_pwm1_duty(0); // zabrzdi |
set_pwm2_duty(0); |
output_high(MOT_L); |
output_high(MOT_L); |
output_high(MOT_R); |
// Ujistime se, ze prijaty signal je z naseho IR vysilace |
output_high(IRTX); // Vypni LED na detekci prekazky |
194,10 → 193,12 |
output_high(MOT_L); |
output_high(MOT_R); |
*/ |
delay_ms(150); |
delay_ms(200); |
brzda(); |
|
if(stav==pocihle) stav=jizda;//!!!!while(true); // Zastav na furt, konec drahy |
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy |
// if(stav==cihla) return; // Po druhe nic neobjizdej |
// Pozor na rozjezd |
|
if(stav==jizda) // Objed cihlu |
{ |
209,10 → 210,9 |
//---------------------------------- MAIN -------------------------------------- |
void main() |
{ |
int8 offset; // Promena pro ulozeni ovsetu |
int8 offset; // Promena pro ulozeni offsetu |
int8 r1; // Rychlost motoru 1 |
int8 r2; // Rychlost motoru 2 |
int16 trasa; // Pocitadlo ujete vzdalenosti |
|
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek |
setup_adc(ADC_CLOCK_INTERNAL); |
226,15 → 226,15 |
|
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se nedela automaticky |
|
set_pwm1_duty(0); // Zastav motory |
set_pwm1_duty(0); // Zastav motory |
set_pwm2_duty(0); |
output_low(MOT_L); |
output_low(MOT_L); // Nastav smer vpred |
output_low(MOT_R); |
|
output_low(IRTX); // Zapni LED na detekci prekazky |
|
NightRider(1); // Aby se poznalo, ze byl RESET |
// Musi se pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy |
// taky se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy |
|
//... Nastaveni kamery ... |
i2c_start(); // Soft RESET kamery |
340,12 → 340,12 |
delay_ms(1); |
rr=read_adc()>>2; // 0-31 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni !!! |
rrold=rr; |
|
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh a aby se to rozjelo jeste dneska |
stav=start; |
trasa=0; |
set_timer1(0); // Vynuluj citac odometrie |
|
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh |
// a aby se to rozjelo jeste dneska |
stav=start; // Jsme na startu |
set_timer1(0); // Vynuluj citac odometrie |
|
// ........................... Hlavni smycka ................................ |
while(true) |
{ |
355,7 → 355,7 |
next_snap: |
|
pom=0; |
disable_interrupts(GLOBAL); //----------------------- Critical |
disable_interrupts(GLOBAL); //----------------------- Critical |
while(input(HREF)); // Preskoc 1. radku |
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky |
set_timer0(0); // Vynuluj pocitadlo casu |
398,17 → 398,17 |
// r1<<=1; // Rychlost je dvojnasobna |
// r2<<=1; // Rozsah 2 az 184 |
|
if ((stav==cihla)&&(get_timer1()>(odocounter+5))) |
/* Nerozumna rychlost po cihle |
if ((stav==cihla)&&(get_timer1()>(odocounter+5))) // Snizime rychlost po ujeti |
{ |
rr=rrold; |
stav=pocihle; |
}; |
|
if ((stav==jizda)||(stav==cihla)||(stav==pocihle)) // Jizda |
*/ |
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda |
{ |
set_pwm1_duty(r1); |
set_pwm2_duty(r2); |
trasa++; |
} |
else |
{ |
416,13 → 416,13 |
set_pwm2_duty(0); |
}; |
|
//!!! trasu zrusit a predelat to na odometrii |
if((stav==jizda)&&(trasa>50)) // musi to alespon 1s jet |
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm |
{ |
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly |
INT0IF=0; // Zruseni predesle udalosti od startera |
enable_interrupts(INT_EXT); |
enable_interrupts(GLOBAL); |
stav=jizda; |
}; |
|
if(stav==start) // Snimkuje, toci servem a ceka na start |
437,9 → 437,18 |
set_timer1(0); // Vynuluj citac odometrie |
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu |
set_pwm2_duty(255); |
disp(0x1); |
delay_ms(300); |
stav=jizda; |
disp(0x01); |
while(get_timer1()<=4) // Ujed alespon 12cm |
{ |
set_adc_channel(LMAX); // Levy UV sensor |
delay_us(40); |
if(read_adc()<128) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo |
set_adc_channel(RMAX); // Pravy UV sensor |
delay_us(40); |
if(read_adc()<128) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo |
cas=CASAVR-CASMIN; // Cara je rovne |
}; |
stav=rozjezd; |
}; |
} |
|