/roboti/istrobot/camerus/SW/876/camerus.c |
---|
43,10 → 43,9 |
#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 |
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie |
stavy stav; // Kde jsme na trati |
int8 cas; // Cas hrany bila/cerna v radce |
int8 stred; // vystredeni kolecka |
inline void brzda() |
{ |
96,6 → 95,8 |
#int_EXT |
EXT_isr() // Preruseni od prekazky |
{ |
int8 i; |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); // vzad |
124,13 → 125,16 |
set_pwm2_duty(140); |
output_low(MOT_L); |
output_low(MOT_R); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
i=0; |
while(true) |
{ |
if(!input(PROXIMITY)) break; // Je cihla blizko? |
if(get_timer1()>=odocounter+7) return; // nedojeli jsme k cihle, jed dal |
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 |
}; |
brzdi: |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
189,7 → 193,6 |
} |
//---------------------------------- MAIN -------------------------------------- |
void main() |
{ |
int8 offset; // Promena pro ulozeni ovsetu |
201,7 → 204,8 |
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_EXTERNAL); // Cita pulzy z odometrie z praveho kola |
// setup_timer_1(T1_DISABLED); |
setup_timer_1(T1_EXTERNAL_SYNC); // 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 |
208,7 → 212,7 |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se nedela automaticky |
set_tris_c(0b11111000); // Nastaveni vstup/vystup pro branu C, protoze se nedela automaticky |
set_pwm1_duty(0); // Zastav motory |
set_pwm2_duty(0); |
309,7 → 313,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); |
403,7 → 407,6 |
{ |
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,12 → 1,20 |
// **** 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); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+9); // Popojed definovanou vzdalenost |
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); |
19,8 → 27,14 |
set_pwm2_duty(160); |
output_low(MOT_L); |
output_low(MOT_R); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+10); // Popojed definovanou vzdalenost |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==10) break; |
} |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
33,8 → 47,14 |
set_pwm2_duty(220); |
output_low(MOT_L); |
output_low(MOT_R); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+9); // Popojed definovanou vzdalenost |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==9) break; |
} |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_low(MOT_L); |
47,8 → 67,14 |
set_pwm2_duty(160); |
output_low(MOT_L); |
output_low(MOT_R); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+10); // Popojed definovanou vzdalenost |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==10) break; |
} |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
61,8 → 87,14 |
set_pwm2_duty(220); |
output_low(MOT_L); |
output_low(MOT_R); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+7); // Popojed definovanou vzdalenost |
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); |
75,8 → 107,14 |
set_pwm2_duty(160); |
output_low(MOT_L); |
output_low(MOT_R); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+10); // Popojed definovanou vzdalenost |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==10) break; |
} |
set_pwm1_duty(0); // reverz (zabrzdi) |
set_pwm2_duty(0); |
output_high(MOT_L); |
90,8 → 128,14 |
set_pwm2_duty(0); |
output_low(MOT_L); |
output_low(MOT_R); |
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie |
while(get_timer1()<odocounter+2); // Popojed definovanou vzdalenost |
n=0; |
while(true) |
{ |
while(input(ODO)); |
while(!input(ODO)); |
n++; |
if(n==2) break; |
} |
cas=CASMAX; // Cara je vpravo |