/roboti/istrobot/camerus/SW/876/camerus.c |
---|
43,9 → 43,10 |
#bit RBIF = INTCON.0 |
enum stavy {start,rozjezd,jizda,cihla,cil}; |
stavy stav; // Kde jsme na trati |
int8 cas; // Cas hrany bila/cerna v radce |
int8 stred; // vystredeni kolecka |
stavy stav; // Kde jsme na trati |
int8 cas; // Cas hrany bila/cerna v radce |
int8 stred; // Vystredeni kolecka |
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie |
inline void brzda() |
{ |
95,8 → 96,6 |
#int_EXT |
EXT_isr() // Preruseni od prekazky |
{ |
int8 i; |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); // vzad |
125,16 → 124,13 |
set_pwm2_duty(140); |
output_low(MOT_L); |
output_low(MOT_R); |
i=0; |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(true) |
{ |
while(input(ODO)) if(!input(PROXIMITY)) goto brzdi; // Je cihla blizko? |
while(!input(ODO)); |
i++; |
if(i==7) return; // nedojeli jsme k cihle, jed dal |
if(!input(PROXIMITY)) break; // Je cihla blizko? |
if(get_timer1()>=odocounter+7) return; // nedojeli jsme k cihle, jed dal |
}; |
brzdi: |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
193,6 → 189,7 |
} |
//---------------------------------- MAIN -------------------------------------- |
void main() |
{ |
int8 offset; // Promena pro ulozeni ovsetu |
204,8 → 201,7 |
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce |
// setup_timer_1(T1_DISABLED); |
setup_timer_1(T1_EXTERNAL_SYNC); // Cita pulzy z odometrie z praveho kola |
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola |
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru |
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory |
setup_ccp2(CCP_PWM); // RC2 |
212,7 → 208,7 |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
set_tris_c(0b11111000); // Nastaveni vstup/vystup pro branu C, protoze se nedela automaticky |
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se nedela automaticky |
set_pwm1_duty(0); // Zastav motory |
set_pwm2_duty(0); |
313,7 → 309,7 |
set_adc_channel(CERVENA); // --- Kroutitko pro jas --- |
delay_ms(1); |
offset=read_adc(); |
offset=read_adc(); |
offset &= 0b11111100; // Dva nejnizsi bity ignoruj |
// offset += 0x70; // Jas nebude nikdy nizsi |
disp(offset); |
407,6 → 403,7 |
{ |
disp(0x80); |
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc |
set_timer1(0); // Vynuluj citac odometrie |
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu |
set_pwm2_duty(255); |
disp(0x1); |
/roboti/istrobot/camerus/SW/876/objizdka_R.c |
---|
1,20 → 1,12 |
// **** Objeti cihly vpravo **** RRRR |
int n; |
SetServo(CASMIN); // max. doleva L |
set_pwm1_duty(0); // vzad |
set_pwm2_duty(10); |
output_low(MOT_L); |
output_high(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==9) break; |
} |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+9); // Popojed definovanou vzdalenost |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(255); |
output_low(MOT_L); |
27,14 → 19,8 |
set_pwm2_duty(160); |
output_low(MOT_L); |
output_low(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==10) break; |
} |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+10); // Popojed definovanou vzdalenost |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
47,14 → 33,8 |
set_pwm2_duty(220); |
output_low(MOT_L); |
output_low(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==9) break; |
} |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+9); // Popojed definovanou vzdalenost |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_low(MOT_L); |
67,14 → 47,8 |
set_pwm2_duty(160); |
output_low(MOT_L); |
output_low(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==10) break; |
} |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+10); // Popojed definovanou vzdalenost |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
87,14 → 61,8 |
set_pwm2_duty(220); |
output_low(MOT_L); |
output_low(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==7) break; |
} |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+7); // Popojed definovanou vzdalenost |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_low(MOT_L); |
107,14 → 75,8 |
set_pwm2_duty(160); |
output_low(MOT_L); |
output_low(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==10) break; |
} |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+10); // Popojed definovanou vzdalenost |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
128,14 → 90,8 |
set_pwm2_duty(0); |
output_low(MOT_L); |
output_low(MOT_R); |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==2) break; |
} |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+2); // Popojed definovanou vzdalenost |
cas=CASMAX; // Cara je vpravo |