| Line 1... |
Line 1... |
| 1 |
#include "main.h" |
1 |
#include "main.h" |
| 2 |
|
2 |
|
| 3 |
// NEPOUZIVAT PINY B6 A B7, JSOU VYHRAZENY PRO SERIOVOU KOMUNIKACI |
3 |
// NEPOUZIVAT PINY B6 A B7, JSOU VYHRAZENY PRO SERIOVOU KOMUNIKACI |
| 4 |
// BAUD RATE = 9600 |
4 |
// BAUD RATE = 9600 |
| 5 |
// ========================== PRIPRAVA DAT A VYSTUPU =========================== |
5 |
// ========================== PRIPRAVA DAT A VYSTUPU =========================== |
| 6 |
// pomocne promenne |
6 |
// pomocne konstanty |
| 7 |
#define LEFT 0 |
7 |
#define LEFT 0 |
| 8 |
#define RIGHT 1 |
8 |
#define RIGHT 1 |
| - |
|
9 |
|
| - |
|
10 |
// konstanty a promenne pro sledovani cary |
| - |
|
11 |
#define SPACE 10 // urcuje, za jak dlouho robot vi, ze nic nevidi |
| - |
|
12 |
#define SPD1 100 // rychlost pomalejsiho motoru, kdyz je cara hodne z osy |
| - |
|
13 |
#define SPD2 200 // rychlost pomalejsiho motoru, kdyz je cara z osy |
| - |
|
14 |
#define SPD3 200 // rychlost rychlejsiho motoru pro vsechny pripady |
| - |
|
15 |
#define SPD4 255 // pro oba motory - rovinka |
| - |
|
16 |
// oblasti cary |
| - |
|
17 |
#define L1 20 // nejvice vlevo |
| - |
|
18 |
#define L2 40 |
| - |
|
19 |
#define L3 48 |
| - |
|
20 |
#define R1 52 |
| - |
|
21 |
#define R2 60 |
| - |
|
22 |
#define R3 80 // nejvice vpravo |
| - |
|
23 |
|
| - |
|
24 |
int8 action; // akce pro nastaveni motoru |
| - |
|
25 |
|
| 9 |
// univerzalni LED diody |
26 |
// univerzalni LED diody |
| 10 |
#define LED1 PIN_E0 |
27 |
#define LED1 PIN_E0 |
| 11 |
#define LED2 PIN_E1 |
28 |
#define LED2 PIN_E1 |
| 12 |
|
29 |
|
| 13 |
// piezo pipak |
30 |
// piezo pipak |
| Line 17... |
Line 34... |
| 17 |
// radkovy senzor |
34 |
// radkovy senzor |
| 18 |
#define SDIN PIN_D4 // seriovy vstup |
35 |
#define SDIN PIN_D4 // seriovy vstup |
| 19 |
#define SDOUT input(PIN_C5) // seriovy vystup |
36 |
#define SDOUT input(PIN_C5) // seriovy vystup |
| 20 |
#define SCLK PIN_D5 // takt |
37 |
#define SCLK PIN_D5 // takt |
| 21 |
|
38 |
|
| 22 |
#define LINE_PX 5 // pocet pixelu pro jiste urceni cary |
39 |
#define LINE_PX 4 // pocet pixelu pro jiste urceni cary |
| 23 |
#define OLSA_LEV 0x60 // rozhodovaci uroven (cca 10 odpovida cerne) |
40 |
#define OLSA_LEV 0x60 // rozhodovaci uroven (cca 10 odpovida cerne) |
| 24 |
|
41 |
|
| 25 |
// pro komunikaci s OLSA, prvni se posila LSB |
42 |
// pro komunikaci s OLSA, prvni se posila LSB |
| 26 |
int main_reset[8]={1,1,0,1,1,0,0,0}; // hlavni reset 0x1B |
43 |
int main_reset[8]={1,1,0,1,1,0,0,0}; // hlavni reset 0x1B |
| 27 |
int set_mode_rg[8]={1,1,1,1,1,0,1,0}; // zapis do MODE registru 0x5F |
44 |
int set_mode_rg[8]={1,1,1,1,1,0,1,0}; // zapis do MODE registru 0x5F |
| Line 47... |
Line 64... |
| 47 |
int8 *rp; // ukazatel pro levou polovinu radky |
64 |
int8 *rp; // ukazatel pro levou polovinu radky |
| 48 |
|
65 |
|
| 49 |
int8 position; // ulozeni pozice cary |
66 |
int8 position; // ulozeni pozice cary |
| 50 |
int8 old_position; // ulozeni predchozi pozice cary |
67 |
int8 old_position; // ulozeni predchozi pozice cary |
| 51 |
int1 line_sector; // cara je vlevo/vpravo |
68 |
int1 line_sector; // cara je vlevo/vpravo |
| 52 |
int8 change; // zmena oproti predchozi poloze |
- |
|
| 53 |
int8 gap; // pocita, jak dlouho neni videt cara |
69 |
int8 gap; // pocita, jak dlouho neni videt cara |
| 54 |
|
70 |
|
| 55 |
// ================================= NARAZNIK ================================== |
71 |
// ================================= NARAZNIK ================================== |
| 56 |
#define BUMPL input(PIN_D6) |
72 |
#define BUMPL input(PIN_D6) |
| 57 |
#define BUMPR input(PIN_D7) |
73 |
#define BUMPR input(PIN_D7) |
| Line 69... |
Line 85... |
| 69 |
#define RMF PIN_D2 |
85 |
#define RMF PIN_D2 |
| 70 |
#define RMB PIN_D3 |
86 |
#define RMB PIN_D3 |
| 71 |
|
87 |
|
| 72 |
int8 lm_speed; |
88 |
int8 lm_speed; |
| 73 |
int8 rm_speed; |
89 |
int8 rm_speed; |
| - |
|
90 |
int8 m; |
| 74 |
|
91 |
|
| 75 |
// =============================== PODPROGRAMY ================================= |
92 |
// =============================== PODPROGRAMY ================================= |
| 76 |
|
93 |
|
| 77 |
// ================================= OLSA01A =================================== |
94 |
// ================================= OLSA01A =================================== |
| 78 |
|
95 |
|
| Line 245... |
Line 262... |
| 245 |
} |
262 |
} |
| 246 |
} |
263 |
} |
| 247 |
|
264 |
|
| 248 |
// ============================ ZACHRANNE SENZORY ============================== |
265 |
// ============================ ZACHRANNE SENZORY ============================== |
| 249 |
|
266 |
|
| 250 |
void read_blue_sensors() // cteni nouzovych senzoru |
267 |
void read_blue_sensors() // cteni nouzovych senzoru |
| 251 |
{ |
268 |
{ |
| 252 |
set_adc_channel(LINEL); // cti levy nouzovy senzor |
269 |
set_adc_channel(LINEL); // cti levy nouzovy senzor |
| 253 |
delay_us(10); |
270 |
delay_us(10); |
| 254 |
line_l=read_adc(); |
271 |
line_l=read_adc(); |
| 255 |
set_adc_channel(LINER); // cti pravy nouzovy senzor |
272 |
set_adc_channel(LINER); // cti pravy nouzovy senzor |
| 256 |
delay_us(10); |
273 |
delay_us(10); |
| 257 |
line_r=read_adc(); |
274 |
line_r=read_adc(); |
| 258 |
} |
275 |
} |
| 259 |
|
276 |
|
| 260 |
// ================================== PIPAK ==================================== |
277 |
// ================================== PIPAK ==================================== |
| 261 |
|
278 |
|
| 262 |
void beep(int16 period,int16 length) |
279 |
void beep(int16 period,int16 length) |
| 263 |
{ |
280 |
{ |
| 264 |
int16 bp; // promenna pro nastaveni delky |
281 |
int16 bp; // promenna pro nastaveni delky |
| 265 |
for(bp=length;bp>0;bp--) // prepina vystupy tolikrat, jakou jsme zadali delku |
282 |
for(bp=length;bp>0;bp--) // prepina vystupy tolikrat, jakou jsme zadali delku |
| 266 |
{ |
283 |
{ |
| 267 |
output_high(SOUND_HI); |
284 |
output_high(SOUND_HI); |
| 268 |
output_low(SOUND_LO); |
285 |
output_low(SOUND_LO); |
| 269 |
delay_us(period); |
286 |
delay_us(period); |
| 270 |
output_high(SOUND_LO); |
287 |
output_high(SOUND_LO); |
| Line 273... |
Line 290... |
| 273 |
} |
290 |
} |
| 274 |
} |
291 |
} |
| 275 |
|
292 |
|
| 276 |
// ================================== MOTORY =================================== |
293 |
// ================================== MOTORY =================================== |
| 277 |
|
294 |
|
| 278 |
void l_motor_fwd(int8 speedl) // levy motor dopredu |
295 |
void l_motor_fwd(int8 speedl) // levy motor dopredu |
| 279 |
{ |
296 |
{ |
| 280 |
output_high(LMF); |
297 |
output_high(LMF); |
| 281 |
output_low(LMB); |
298 |
output_low(LMB); |
| 282 |
set_pwm2_duty(speedl); |
299 |
set_pwm2_duty(speedl); |
| 283 |
} |
300 |
} |
| 284 |
|
301 |
|
| 285 |
void l_motor_bwd(int8 speedl) // levy motor dozadu |
302 |
void l_motor_bwd(int8 speedl) // levy motor dozadu |
| 286 |
{ |
303 |
{ |
| 287 |
output_high(LMB); |
304 |
output_high(LMB); |
| 288 |
output_low(LMF); |
305 |
output_low(LMF); |
| 289 |
set_pwm2_duty(speedl); |
306 |
set_pwm2_duty(speedl); |
| 290 |
} |
307 |
} |
| 291 |
|
308 |
|
| 292 |
void r_motor_fwd(int8 speedr) // pravy motor dopredu |
309 |
void r_motor_fwd(int8 speedr) // pravy motor dopredu |
| 293 |
{ |
310 |
{ |
| 294 |
output_high(RMF); |
311 |
output_high(RMF); |
| 295 |
output_low(RMB); |
312 |
output_low(RMB); |
| 296 |
set_pwm1_duty(speedr); |
313 |
set_pwm1_duty(speedr); |
| 297 |
} |
314 |
} |
| 298 |
|
315 |
|
| 299 |
void r_motor_bwd(int8 speedr) // pravy motor dozadu |
316 |
void r_motor_bwd(int8 speedr) // pravy motor dozadu |
| 300 |
{ |
317 |
{ |
| 301 |
output_high(RMB); |
318 |
output_high(RMB); |
| 302 |
output_low(RMF); |
319 |
output_low(RMF); |
| 303 |
set_pwm1_duty(speedr); |
320 |
set_pwm1_duty(speedr); |
| 304 |
} |
321 |
} |
| 305 |
|
322 |
|
| 306 |
void l_motor_off() // levy motor vypnut |
323 |
void l_motor_off() // levy motor vypnut |
| 307 |
{ |
324 |
{ |
| 308 |
output_low(LMF); |
325 |
output_low(LMF); |
| 309 |
output_low(LMB); |
326 |
output_low(LMB); |
| 310 |
set_pwm2_duty(0); |
327 |
set_pwm2_duty(0); |
| 311 |
} |
328 |
} |
| 312 |
|
329 |
|
| 313 |
void r_motor_off() // pravy motor vypnut |
330 |
void r_motor_off() // pravy motor vypnut |
| 314 |
{ |
331 |
{ |
| 315 |
output_low(RMF); |
332 |
output_low(RMF); |
| 316 |
output_low(RMB); |
333 |
output_low(RMB); |
| 317 |
set_pwm1_duty(0); |
334 |
set_pwm1_duty(0); |
| 318 |
} |
335 |
} |
| 319 |
|
336 |
|
| 320 |
void motor_test() // test motoru |
337 |
void motor_test() // TEST MOTORU |
| 321 |
{ |
338 |
{ |
| 322 |
int8 i; |
339 |
int8 i; |
| 323 |
beep(100,200); |
340 |
beep(100,200); |
| 324 |
printf("TEST MOTORU\r\n"); |
341 |
printf("TEST MOTORU\r\n"); |
| 325 |
delay_ms(1000); |
342 |
delay_ms(1000); |
| 326 |
printf("LEVY MOTOR DOPREDU\r\n"); |
343 |
printf("LEVY MOTOR DOPREDU\r\n"); |
| 327 |
delay_ms(1000); |
344 |
delay_ms(1000); |
| 328 |
for(i=0;i<255;i++) // levy motor dopredu - zrychluje |
345 |
for(i=0;i<255;i++) // levy motor dopredu - zrychluje |
| 329 |
{ |
346 |
{ |
| 330 |
l_motor_fwd(i); |
347 |
l_motor_fwd(i); |
| 331 |
printf("RYCHLOST: %u\r\n",i); |
348 |
printf("RYCHLOST: %u\r\n",i); |
| 332 |
delay_ms(5); |
349 |
delay_ms(5); |
| 333 |
} |
350 |
} |
| 334 |
for(i=255;i>0;i--) // levy motor dopredu - zpomaluje |
351 |
for(i=255;i>0;i--) // levy motor dopredu - zpomaluje |
| 335 |
{ |
352 |
{ |
| 336 |
l_motor_fwd(i); |
353 |
l_motor_fwd(i); |
| 337 |
printf("RYCHLOST: %u\r\n",i); |
354 |
printf("RYCHLOST: %u\r\n",i); |
| 338 |
delay_ms(5); |
355 |
delay_ms(5); |
| 339 |
} |
356 |
} |
| 340 |
printf("LEVY MOTOR DOZADU\r\n"); // levy motor dozadu - zrychluje |
357 |
printf("LEVY MOTOR DOZADU\r\n"); // levy motor dozadu - zrychluje |
| 341 |
delay_ms(1000); |
358 |
delay_ms(1000); |
| 342 |
for(i=0;i<255;i++) |
359 |
for(i=0;i<255;i++) |
| 343 |
{ |
360 |
{ |
| 344 |
l_motor_bwd(i); |
361 |
l_motor_bwd(i); |
| 345 |
printf("RYCHLOST: %u\r\n",i); |
362 |
printf("RYCHLOST: %u\r\n",i); |
| 346 |
delay_ms(5); |
363 |
delay_ms(5); |
| 347 |
} |
364 |
} |
| 348 |
for(i=255;i>0;i--) // levy motor dozadu - zpomaluje |
365 |
for(i=255;i>0;i--) // levy motor dozadu - zpomaluje |
| 349 |
{ |
366 |
{ |
| 350 |
l_motor_bwd(i); |
367 |
l_motor_bwd(i); |
| 351 |
printf("RYCHLOST: %u\r\n",i); |
368 |
printf("RYCHLOST: %u\r\n",i); |
| 352 |
delay_ms(5); |
369 |
delay_ms(5); |
| 353 |
} |
370 |
} |
| 354 |
printf("PRAVY MOTOR DOPREDU\r\n"); |
371 |
printf("PRAVY MOTOR DOPREDU\r\n"); |
| 355 |
delay_ms(1000); |
372 |
delay_ms(1000); |
| 356 |
for(i=0;i<255;i++) // pravy motor dopredu - zrychluje |
373 |
for(i=0;i<255;i++) // pravy motor dopredu - zrychluje |
| 357 |
{ |
374 |
{ |
| 358 |
r_motor_fwd(i); |
375 |
r_motor_fwd(i); |
| 359 |
printf("RYCHLOST: %u\r\n",i); |
376 |
printf("RYCHLOST: %u\r\n",i); |
| 360 |
delay_ms(5); |
377 |
delay_ms(5); |
| 361 |
} |
378 |
} |
| 362 |
for(i=255;i>0;i--) // pravy motor dopredu - zpomaluje |
379 |
for(i=255;i>0;i--) // pravy motor dopredu - zpomaluje |
| 363 |
{ |
380 |
{ |
| 364 |
r_motor_fwd(i); |
381 |
r_motor_fwd(i); |
| 365 |
printf("RYCHLOST: %u\r\n",i); |
382 |
printf("RYCHLOST: %u\r\n",i); |
| 366 |
delay_ms(5); |
383 |
delay_ms(5); |
| 367 |
} |
384 |
} |
| 368 |
printf("PRAVY MOTOR DOZADU\r\n"); |
385 |
printf("PRAVY MOTOR DOZADU\r\n"); |
| 369 |
delay_ms(1000); |
386 |
delay_ms(1000); |
| 370 |
for(i=0;i<255;i++) // pravy motor dozadu - zrychluje |
387 |
for(i=0;i<255;i++) // pravy motor dozadu - zrychluje |
| 371 |
{ |
388 |
{ |
| 372 |
r_motor_bwd(i); |
389 |
r_motor_bwd(i); |
| 373 |
printf("RYCHLOST: %u\r\n",i); |
390 |
printf("RYCHLOST: %u\r\n",i); |
| 374 |
delay_ms(5); |
391 |
delay_ms(5); |
| 375 |
} |
392 |
} |
| 376 |
for(i=255;i>0;i--) // pravy motor dozadu - zpomaluje |
393 |
for(i=255;i>0;i--) // pravy motor dozadu - zpomaluje |
| 377 |
{ |
394 |
{ |
| 378 |
r_motor_bwd(i); |
395 |
r_motor_bwd(i); |
| 379 |
printf("RYCHLOST: %u\r\n",i); |
396 |
printf("RYCHLOST: %u\r\n",i); |
| 380 |
delay_ms(5); |
397 |
delay_ms(5); |
| 381 |
} |
398 |
} |
| 382 |
l_motor_off(); // po ukonceni testu vypnout motory |
399 |
l_motor_off(); // po ukonceni testu vypnout motory |
| 383 |
r_motor_off(); |
400 |
r_motor_off(); |
| 384 |
printf("KONEC TESTU MOTORU\r\n"); |
401 |
printf("KONEC TESTU MOTORU\r\n"); |
| 385 |
delay_ms(1000); |
402 |
delay_ms(1000); |
| 386 |
} |
403 |
} |
| 387 |
|
404 |
|
| 388 |
// ================================ DIAGNOSTIKA ================================ |
405 |
// ================================ DIAGNOSTIKA ================================ |
| 389 |
|
406 |
|
| 390 |
void diag() // diagnostika - vypis senzoru s moznosti prepnuti na test motoru |
407 |
void diag() // diagnostika - vypis senzoru s moznosti prepnuti na test motoru |
| 391 |
{ |
408 |
{ |
| 392 |
read_blue_sensors(); |
409 |
read_blue_sensors(); |
| 393 |
read_olsa(); |
410 |
read_olsa(); |
| 394 |
olsa_position(); |
411 |
olsa_position(); |
| 395 |
printf("LEVA: %u \t",line_l); // tiskne z leveho senzoru |
412 |
printf("LEVA: %u \t",line_l); // tiskne z leveho senzoru |
| 396 |
printf("PRAVA: %u \t",line_r); // tiskne z praveho senzoru |
413 |
printf("PRAVA: %u \t",line_r); // tiskne z praveho senzoru |
| 397 |
printf("POLOHA: %u\t",position); // tiskne pozici OLSA |
414 |
printf("POLOHA: %u\t",position); // tiskne pozici OLSA |
| 398 |
printf("L_NARAZ: %u \t",BUMPL); // leve tlacitko narazniku |
415 |
printf("L_NARAZ: %u \t",BUMPL); // leve tlacitko narazniku |
| 399 |
printf("P_NARAZ: %u \r\n",BUMPR); // prave tlacitko narazniku |
416 |
printf("P_NARAZ: %u \r\n",BUMPR); // prave tlacitko narazniku |
| 400 |
if(BUMPL&&BUMPR) // po zmacknuti stran narazniku spusti test motoru |
417 |
if(BUMPL&&BUMPR) // po zmacknuti stran narazniku spusti test motoru |
| 401 |
{ |
418 |
{ |
| 402 |
beep(100,1000); |
419 |
beep(100,1000); |
| 403 |
printf("Levy naraznik - test OLSA\r\n"); |
420 |
printf("Levy naraznik - test OLSA\r\n"); |
| 404 |
printf("Pravy naraznik - test motoru\r\n"); |
421 |
printf("Pravy naraznik - test motoru\r\n"); |
| 405 |
delay_ms(500); |
422 |
delay_ms(500); |
| Line 463... |
Line 480... |
| 463 |
delay_ms(500); |
480 |
delay_ms(500); |
| 464 |
printf("VYBRAT MOD... \r\n"); |
481 |
printf("VYBRAT MOD... \r\n"); |
| 465 |
while(true) |
482 |
while(true) |
| 466 |
{ |
483 |
{ |
| 467 |
// ============================ HLAVNI CAST PROGRAMU =========================== |
484 |
// ============================ HLAVNI CAST PROGRAMU =========================== |
| 468 |
if(true) // spusteni hledani pravym naraznikem |
485 |
if(BUMPR) // spusteni hledani pravym naraznikem |
| 469 |
{ |
486 |
{ |
| 470 |
beep(100,500); |
487 |
beep(100,500); |
| 471 |
while(true) |
488 |
while(true) |
| 472 |
{ |
489 |
{ |
| 473 |
// =============================== SLEDOVANI CARY ============================== |
490 |
// =============================== SLEDOVANI CARY ============================== |
| Line 475... |
Line 492... |
| 475 |
read_olsa(); // precte a ulozi hodnoty z olsa |
492 |
read_olsa(); // precte a ulozi hodnoty z olsa |
| 476 |
olsa_position(); // vyhodnoti pozici cary |
493 |
olsa_position(); // vyhodnoti pozici cary |
| 477 |
read_blue_sensors(); // cte nouzove senzory |
494 |
read_blue_sensors(); // cte nouzove senzory |
| 478 |
if(line_l==0) // robot najede na levy nouzovy senzor |
495 |
if(line_l==0) // robot najede na levy nouzovy senzor |
| 479 |
{ |
496 |
{ |
| 480 |
l_motor_bwd(255); // prudce zatoc doleva |
497 |
l_motor_bwd(150); // prudce zatoc doleva |
| 481 |
r_motor_fwd(255); |
498 |
r_motor_fwd(255); |
| 482 |
line_sector=LEFT; // pamatuj, kde je cara |
499 |
line_sector=LEFT; // pamatuj, kde je cara |
| 483 |
delay_ms(20); |
500 |
delay_ms(200); |
| 484 |
} |
501 |
} |
| 485 |
if(line_r==0) // robot najede na pravy nouzovy senzor |
502 |
if(line_r==0) // robot najede na pravy nouzovy senzor |
| 486 |
{ |
503 |
{ |
| 487 |
l_motor_fwd(255); // prudce zatoc doprava |
504 |
l_motor_fwd(255); // prudce zatoc doprava |
| 488 |
r_motor_bwd(255); |
505 |
r_motor_bwd(150); |
| 489 |
line_sector=RIGHT; // pamatuj, kde je cara |
506 |
line_sector=RIGHT; // pamatuj, kde je cara |
| 490 |
delay_ms(20); |
507 |
delay_ms(200); |
| 491 |
} |
- |
|
| 492 |
if(position>old_position) // pocita absolutni rozdil mezi soucasnou a predchozi pozici |
- |
|
| 493 |
{ |
- |
|
| 494 |
change=(position-old_position); // pozice ma vyssi cislo nez predchozi pozice |
- |
|
| 495 |
} |
- |
|
| 496 |
else |
- |
|
| 497 |
{ |
- |
|
| 498 |
change=(old_position-position); // pozice ma vyssi cislo nez predchozi pozice |
- |
|
| 499 |
} |
508 |
} |
| 500 |
if(position==0) // pokud neni videt cara |
509 |
if(position==0) // pokud neni videt cara |
| 501 |
{ |
510 |
{ |
| 502 |
position=old_position; // nastav predchozi pozici |
511 |
position=old_position; // nastav predchozi pozici |
| 503 |
gap++; // pocita, jak dlouho neni videt cara |
512 |
gap++; // pocita, jak dlouho neni videt cara |
| 504 |
} |
513 |
} |
| 505 |
else // pokud je videt cara |
514 |
else // pokud je videt cara |
| 506 |
{ |
515 |
{ |
| 507 |
gap=0; // vynuluje citani |
516 |
gap=0; // vynuluje citani |
| - |
|
517 |
m=0; // pry svetsovani hulu zataceni |
| - |
|
518 |
} |
| - |
|
519 |
if(gap>SPACE) // dlouho neni nic videt |
| - |
|
520 |
{ |
| - |
|
521 |
if(line_sector==LEFT) // cara byla naposledy vlevo |
| - |
|
522 |
{ |
| - |
|
523 |
l_motor_bwd(50+m); // zatacej doleva |
| - |
|
524 |
r_motor_fwd(200); |
| - |
|
525 |
m++; |
| - |
|
526 |
} |
| - |
|
527 |
else // cara byla naposledy vpravo |
| - |
|
528 |
{ |
| - |
|
529 |
r_motor_bwd(50+m); // zatacej doprava |
| - |
|
530 |
l_motor_fwd(200); |
| - |
|
531 |
m++; |
| - |
|
532 |
} |
| - |
|
533 |
} |
| - |
|
534 |
if(position>0) // urceni akci pro rizeni, pokud cara je videt |
| - |
|
535 |
{ |
| - |
|
536 |
if(position>L1) // cara je hodne vlevo |
| - |
|
537 |
{ |
| - |
|
538 |
if(position>L2) // cara je vlevo |
| - |
|
539 |
{ |
| - |
|
540 |
if(position>L3) // cara je mirne vlevo |
| - |
|
541 |
{ |
| - |
|
542 |
if(position>R1) // cara je mirne vpravo |
| - |
|
543 |
{ |
| - |
|
544 |
if(position>R2) // cara je vpravo |
| - |
|
545 |
{ |
| - |
|
546 |
if(position>R3) // cara je hodne vpravo |
| - |
|
547 |
{ |
| - |
|
548 |
action=6; |
| - |
|
549 |
} |
| - |
|
550 |
} |
| - |
|
551 |
else |
| - |
|
552 |
{ |
| - |
|
553 |
action=5; |
| - |
|
554 |
} |
| - |
|
555 |
} |
| - |
|
556 |
else |
| - |
|
557 |
{ |
| - |
|
558 |
action=4; |
| - |
|
559 |
} |
| - |
|
560 |
} |
| - |
|
561 |
else |
| - |
|
562 |
{ |
| - |
|
563 |
action=3; |
| - |
|
564 |
} |
| - |
|
565 |
} |
| - |
|
566 |
else |
| - |
|
567 |
{ |
| - |
|
568 |
action=2; |
| - |
|
569 |
} |
| - |
|
570 |
} |
| - |
|
571 |
else |
| - |
|
572 |
{ |
| - |
|
573 |
action=1; |
| - |
|
574 |
} |
| - |
|
575 |
} |
| - |
|
576 |
if(L3<position>R1) // cara je uprostred |
| - |
|
577 |
{ |
| - |
|
578 |
action=7; |
| - |
|
579 |
} |
| - |
|
580 |
switch(action) // reakce na pohyb cary |
| - |
|
581 |
{ |
| - |
|
582 |
case 1: // cara je hodne vlevo |
| - |
|
583 |
rm_speed=(SPD3+position); |
| - |
|
584 |
lm_speed=(SPD1+position); |
| - |
|
585 |
r_motor_fwd(rm_speed); |
| - |
|
586 |
l_motor_bwd(lm_speed); |
| - |
|
587 |
break; |
| - |
|
588 |
case 2: // cara je vlevo |
| - |
|
589 |
rm_speed=(SPD3+position); |
| - |
|
590 |
r_motor_fwd(rm_speed); |
| - |
|
591 |
l_motor_off(); |
| - |
|
592 |
break; |
| - |
|
593 |
case 3: // cara je mirne vlevo |
| - |
|
594 |
rm_speed=(SPD3+position); |
| - |
|
595 |
lm_speed=(SPD2-position); |
| - |
|
596 |
r_motor_fwd(rm_speed); |
| - |
|
597 |
l_motor_fwd(lm_speed); |
| - |
|
598 |
break; |
| - |
|
599 |
case 4: // cara je mirne vpravo |
| - |
|
600 |
lm_speed=(SPD3+(position/2)); |
| - |
|
601 |
rm_speed=(SPD2-(position/2)); |
| - |
|
602 |
l_motor_fwd(lm_speed); |
| - |
|
603 |
r_motor_fwd(rm_speed); |
| - |
|
604 |
break; |
| - |
|
605 |
case 5: // cara je vpravo |
| - |
|
606 |
lm_speed=(SPD3+(position/2)); |
| - |
|
607 |
l_motor_fwd(lm_speed); |
| - |
|
608 |
r_motor_off(); |
| - |
|
609 |
break; |
| - |
|
610 |
case 6: // cara je hodne vpravo |
| - |
|
611 |
lm_speed=(SPD3+(position/2)); |
| - |
|
612 |
rm_speed=(SPD2-(position/2)); |
| - |
|
613 |
l_motor_fwd(lm_speed); |
| - |
|
614 |
r_motor_bwd(rm_speed); |
| - |
|
615 |
break; |
| - |
|
616 |
case 7: // cara je uprostred |
| - |
|
617 |
l_motor_fwd(SPD4); |
| - |
|
618 |
r_motor_fwd(SPD4); |
| - |
|
619 |
break; |
| 508 |
} |
620 |
} |
| 509 |
} |
621 |
} |
| 510 |
} |
622 |
} |
| 511 |
} |
623 |
} |
| 512 |
} |
624 |
} |