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 |
// regulator |
10 |
// regulator |
11 |
#define CONP 12 // konstanta pro proporcionalni regulator |
11 |
#define CONP 2 // konstanta pro proporcionalni regulator |
12 |
#define CONI 2 // konstanta pro integracni regulator |
12 |
#define CONI 0 // konstanta pro integracni regulator |
13 |
#define COND 1 // konstanta pro derivacni regulator |
13 |
#define COND 0 // konstanta pro derivacni regulator |
- |
|
14 |
|
- |
|
15 |
#define SPD_LO 120 // zaklad pro vypocet rychlosti pomalejsiho motoru |
- |
|
16 |
#define SPD_HI 150 // zaklad pro vypocetrychlosti rychlejsiho motoru |
14 |
|
17 |
|
15 |
int8 reg_out; |
18 |
int8 reg_out; |
16 |
int8 err1; // odchylka prvni hodnoty |
19 |
int8 err1; // odchylka prvni hodnoty |
17 |
int8 err2; |
20 |
int8 err2; |
18 |
int8 err3; |
21 |
int8 err3; |
Line 22... |
Line 25... |
22 |
|
25 |
|
23 |
// mezera |
26 |
// mezera |
24 |
#define SPACE 20 |
27 |
#define SPACE 20 |
25 |
|
28 |
|
26 |
// univerzalni LED diody |
29 |
// univerzalni LED diody |
27 |
#define LED1 PIN_E0 |
30 |
#define LED1 PIN_E1 |
28 |
#define LED2 PIN_E1 |
31 |
#define LED2 PIN_E0 |
- |
|
32 |
|
- |
|
33 |
int16 blink; |
29 |
|
34 |
|
30 |
// piezo pipak |
35 |
// piezo pipak |
31 |
#DEFINE SOUND_HI PIN_B4 |
36 |
#DEFINE SOUND_HI PIN_B4 |
32 |
#DEFINE SOUND_LO PIN_B5 |
37 |
#DEFINE SOUND_LO PIN_B5 |
33 |
|
38 |
|
Line 506... |
Line 511... |
506 |
setup_ccp2(CCP_PWM); // povolĂ PWM na pinu RC1 |
511 |
setup_ccp2(CCP_PWM); // povolĂ PWM na pinu RC1 |
507 |
setup_comparator(NC_NC_NC_NC); |
512 |
setup_comparator(NC_NC_NC_NC); |
508 |
setup_vref(FALSE); |
513 |
setup_vref(FALSE); |
509 |
l_motor_off(); // vypne levy motor |
514 |
l_motor_off(); // vypne levy motor |
510 |
r_motor_off(); // vypne pravy motor |
515 |
r_motor_off(); // vypne pravy motor |
511 |
output_high(LED1); // zhasne LED1 |
- |
|
512 |
output_high(LED2); // zhasne LED2 |
- |
|
513 |
olsa_reset(); |
516 |
olsa_reset(); |
514 |
olsa_setup(); |
517 |
olsa_setup(); |
515 |
beep(100,500); // pipni pri startu |
518 |
beep(100,500); // pipni pri startu |
516 |
printf("OK! \r\n"); |
519 |
printf("OK! \r\n"); |
517 |
delay_ms(500); |
520 |
delay_ms(500); |
518 |
printf("VYBRAT MOD... \r\n"); |
521 |
printf("VYBRAT MOD... \r\n"); |
519 |
// ============================ HLAVNI CAST PROGRAMU =========================== |
522 |
// ============================ HLAVNI CAST PROGRAMU =========================== |
520 |
while(true) |
523 |
while(true) |
521 |
{ |
524 |
{ |
- |
|
525 |
if(blink<4000) |
- |
|
526 |
{ |
- |
|
527 |
output_low(LED1); |
- |
|
528 |
output_high(LED2); |
- |
|
529 |
} |
- |
|
530 |
else |
- |
|
531 |
{ |
- |
|
532 |
output_low(LED2); |
- |
|
533 |
output_high(LED1); |
- |
|
534 |
} |
- |
|
535 |
if (blink==8000) |
- |
|
536 |
{ |
- |
|
537 |
blink=0; |
- |
|
538 |
} |
- |
|
539 |
blink++; |
522 |
// ================================ DIAGNOSTIKA ================================ |
540 |
// ================================ DIAGNOSTIKA ================================ |
523 |
if(BUMPL) |
541 |
if(BUMPL) |
524 |
{ |
542 |
{ |
- |
|
543 |
output_low(LED1); |
- |
|
544 |
output_high(LED2); |
525 |
beep(100,500); |
545 |
beep(100,500); |
526 |
while(true) |
546 |
while(true) |
527 |
{ |
547 |
{ |
528 |
diag(); |
548 |
diag(); |
529 |
} |
549 |
} |
530 |
} |
550 |
} |
531 |
// =============================== SLEDOVANI CARY ============================== |
551 |
// =============================== SLEDOVANI CARY ============================== |
532 |
if(BUMPR) // spusteni hledani pravym naraznikem |
552 |
if(BUMPR) // spusteni hledani pravym naraznikem |
533 |
{ |
553 |
{ |
- |
|
554 |
output_low(LED2); |
- |
|
555 |
output_high(LED1); |
534 |
beep(100,500); |
556 |
beep(100,500); |
535 |
while(true) |
557 |
while(true) |
536 |
{ |
558 |
{ |
537 |
old_position=position; // zaznamena predhozi polohu cary |
559 |
old_position=position; // zaznamena predhozi polohu cary |
538 |
read_olsa(); // precte a ulozi hodnoty z olsa |
560 |
read_olsa(); // precte a ulozi hodnoty z olsa |
Line 547... |
Line 569... |
547 |
{ |
569 |
{ |
548 |
gap=0; // gap je roven nule |
570 |
gap=0; // gap je roven nule |
549 |
} |
571 |
} |
550 |
calc_error(); |
572 |
calc_error(); |
551 |
calc_regulator(); |
573 |
calc_regulator(); |
552 |
printf("regulator: %u\r\n",reg_out); |
574 |
//printf("regulator: %u\r\n",reg_out); |
- |
|
575 |
if(position<50) |
- |
|
576 |
{ |
- |
|
577 |
lm_speed=SPD_LO-reg_out; |
- |
|
578 |
rm_speed=SPD_HI+reg_out; |
- |
|
579 |
} |
- |
|
580 |
if(position==50) |
- |
|
581 |
{ |
- |
|
582 |
lm_speed=200; |
- |
|
583 |
rm_speed=200; |
- |
|
584 |
} |
- |
|
585 |
if(position>50) |
- |
|
586 |
{ |
- |
|
587 |
lm_speed=SPD_HI+reg_out; |
- |
|
588 |
rm_speed=SPD_LO-reg_out; |
- |
|
589 |
} |
- |
|
590 |
l_motor_fwd(lm_speed); |
- |
|
591 |
r_motor_fwd(rm_speed); |
553 |
} |
592 |
} |
554 |
} |
593 |
} |
555 |
} |
594 |
} |
556 |
} |
595 |
} |
557 |
|
596 |
|