| Rev 874 | Rev 879 | ||
|---|---|---|---|
| Line 6... | Line 6... | ||
| 6 | // pomocne konstanty |
6 | // pomocne konstanty |
| 7 | #define LEFT 0 |
7 | #define LEFT 0 |
| 8 | #define RIGHT 1 |
8 | #define RIGHT 1 |
| 9 | |
9 | |
| 10 | // konstanty a promenne pro sledovani cary |
10 | // konstanty a promenne pro sledovani cary |
| 11 | #define SPACE 10 // urcuje, za jak dlouho robot vi, ze nic nevidi |
11 | #define SPACE 15 // urcuje, za jak dlouho robot vi, ze nic nevidi |
| 12 | #define SPD1 100 // rychlost pomalejsiho motoru, kdyz je cara hodne z osy |
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 |
13 | #define SPD2 150 // rychlost pomalejsiho motoru, kdyz je cara z osy |
| 14 | #define SPD3 200 // rychlost rychlejsiho motoru pro vsechny pripady |
14 | #define SPD3 200 // rychlost rychlejsiho motoru pro vsechny pripady |
| 15 | #define SPD4 255 // pro oba motory - rovinka |
15 | #define SPD4 255 // pro oba motory - rovinka |
| 16 | // oblasti cary |
16 | // oblasti cary |
| 17 | #define L1 20 // nejvice vlevo |
17 | #define L1 25 // nejvice vlevo |
| 18 | #define L2 40 |
18 | #define L2 30 |
| 19 | #define L3 48 |
19 | #define L3 45 |
| 20 | #define R1 52 |
20 | #define R1 55 |
| 21 | #define R2 60 |
21 | #define R2 70 |
| 22 | #define R3 80 // nejvice vpravo |
22 | #define R3 85 // nejvice vpravo |
| 23 | |
23 | |
| 24 | int8 action; // akce pro nastaveni motoru |
24 | int8 action; // akce pro nastaveni motoru |
| 25 | |
25 | |
| 26 | // univerzalni LED diody |
26 | // univerzalni LED diody |
| 27 | #define LED1 PIN_E0 |
27 | #define LED1 PIN_E0 |
| Line 490... | Line 490... | ||
| 490 | // =============================== SLEDOVANI CARY ============================== |
490 | // =============================== SLEDOVANI CARY ============================== |
| 491 | old_position=position; // zaznamena predhozi polohu cary |
491 | old_position=position; // zaznamena predhozi polohu cary |
| 492 | read_olsa(); // precte a ulozi hodnoty z olsa |
492 | read_olsa(); // precte a ulozi hodnoty z olsa |
| 493 | olsa_position(); // vyhodnoti pozici cary |
493 | olsa_position(); // vyhodnoti pozici cary |
| 494 | read_blue_sensors(); // cte nouzove senzory |
494 | read_blue_sensors(); // cte nouzove senzory |
| 495 | if(line_l==0) // robot najede na levy nouzovy senzor |
495 | if((line_l==0)&&(gap>SPACE)) // robot najede na levy nouzovy senzor |
| 496 | { |
496 | { |
| 497 | l_motor_bwd(150); // prudce zatoc doleva |
497 | l_motor_bwd(150); // prudce zatoc doleva |
| 498 | r_motor_fwd(255); |
498 | r_motor_fwd(255); |
| 499 | line_sector=LEFT; // pamatuj, kde je cara |
499 | line_sector=LEFT; // pamatuj, kde je cara |
| 500 | delay_ms(200); |
500 | delay_ms(200); |
| 501 | } |
501 | } |
| 502 | if(line_r==0) // robot najede na pravy nouzovy senzor |
502 | if((line_r==0)&&(gap>SPACE)) // robot najede na pravy nouzovy senzor |
| 503 | { |
503 | { |
| 504 | l_motor_fwd(255); // prudce zatoc doprava |
504 | l_motor_fwd(255); // prudce zatoc doprava |
| 505 | r_motor_bwd(150); |
505 | r_motor_bwd(150); |
| 506 | line_sector=RIGHT; // pamatuj, kde je cara |
506 | line_sector=RIGHT; // pamatuj, kde je cara |
| 507 | delay_ms(200); |
507 | delay_ms(200); |
| Line 514... | Line 514... | ||
| 514 | else // pokud je videt cara |
514 | else // pokud je videt cara |
| 515 | { |
515 | { |
| 516 | gap=0; // vynuluje citani |
516 | gap=0; // vynuluje citani |
| 517 | m=0; // pry svetsovani hulu zataceni |
517 | m=0; // pry svetsovani hulu zataceni |
| 518 | } |
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 |
519 | if(position>0) // urceni akci pro rizeni, pokud cara je videt |
| 535 | { |
520 | { |
| 536 | if(position>L1) // cara je hodne vlevo |
521 | if(position>L1) // cara je hodne vlevo |
| 537 | { |
522 | { |
| 538 | if(position>L2) // cara je vlevo |
523 | if(position>L2) // cara je vlevo |
| Line 570... | Line 555... | ||
| 570 | } |
555 | } |
| 571 | else |
556 | else |
| 572 | { |
557 | { |
| 573 | action=1; |
558 | action=1; |
| 574 | } |
559 | } |
| 575 | } |
560 | } |
| 576 | if(L3<position>R1) // cara je uprostred |
561 | if(L3<=position>=R1) // cara je uprostred |
| 577 | { |
562 | { |
| 578 | action=7; |
563 | action=7; |
| 579 | } |
564 | } |
| 580 | switch(action) // reakce na pohyb cary |
565 | switch(action) // reakce na pohyb cary |
| 581 | { |
566 | { |
| Line 616... | Line 601... | ||
| 616 | case 7: // cara je uprostred |
601 | case 7: // cara je uprostred |
| 617 | l_motor_fwd(SPD4); |
602 | l_motor_fwd(SPD4); |
| 618 | r_motor_fwd(SPD4); |
603 | r_motor_fwd(SPD4); |
| 619 | break; |
604 | break; |
| 620 | } |
605 | } |
| - | 606 | if((line_sector==LEFT)&&(position==0)) |
|
| - | 607 | { |
|
| - | 608 | r_motor_fwd(255); |
|
| - | 609 | l_motor_off(); |
|
| - | 610 | } |
|
| - | 611 | if((line_sector==RIGHT)&&(position==0)) |
|
| - | 612 | { |
|
| - | 613 | l_motor_fwd(255); |
|
| - | 614 | r_motor_off(); |
|
| - | 615 | } |
|
| 621 | } |
616 | } |
| 622 | } |
617 | } |
| 623 | } |
618 | } |
| 624 | } |
619 | } |
| 625 | |
620 | |