| Line 10... |
Line 10... |
| 10 |
//piezo pipak |
10 |
//piezo pipak |
| 11 |
#DEFINE SOUND_HI PIN_B4 |
11 |
#DEFINE SOUND_HI PIN_B4 |
| 12 |
#DEFINE SOUND_LO PIN_B5 |
12 |
#DEFINE SOUND_LO PIN_B5 |
| 13 |
|
13 |
|
| 14 |
//radkovy senzor |
14 |
//radkovy senzor |
| 15 |
#define SDIN PIN_D4 // seriovy vstup |
15 |
#define SDIN PIN_D4 // seriovy vstup |
| 16 |
#define SDOUT input(PIN_B2) // seriovy vystup |
16 |
#define SDOUT input(PIN_B2) // seriovy vystup |
| 17 |
#define SCLK PIN_D5 // takt |
17 |
#define SCLK PIN_D5 // takt |
| - |
|
18 |
|
| - |
|
19 |
//int test[8]={1,0,0,0,0,0,0,0}; |
| - |
|
20 |
int main_reset[8]={1,1,0,1,1,0,0,0}; // hlavni reset |
| - |
|
21 |
int set_mode_rg[8]={1,1,1,1,1,0,1,0}; // zapsani do MODE registru |
| - |
|
22 |
int clear_mode_rg[8]={0,0,0,0,0,0,0,0}; // nulovani MODE registru |
| 18 |
|
23 |
|
| 19 |
int test[8]={1,0,0,0,0,0,0,0}; // pole pro test |
- |
|
| 20 |
|
24 |
|
| 21 |
//naraznik |
25 |
//naraznik |
| 22 |
#define BUMPL input(PIN_D6) |
26 |
#define BUMPL input(PIN_D6) |
| 23 |
#define BUMPR input(PIN_D7) |
27 |
#define BUMPR input(PIN_D7) |
| 24 |
|
28 |
|
| 25 |
//nouzove senzory |
29 |
//nouzove senzory |
| 26 |
#define LINEL 0 |
30 |
#define LINEL 0 |
| 27 |
#define LINER 1 |
31 |
#define LINER 1 |
| 28 |
#define TRESHOLD 200 // rozhodovaci uroven (zmereno 0 - cerna, 255 cerna) |
32 |
#define TRESHOLD 200 // rozhodovaci uroven (zmereno 0 - cerna, 255 cerna) |
| 29 |
int8 line_l; |
33 |
int8 line_l; |
| 30 |
int8 line_r; |
34 |
int8 line_r; |
| 31 |
|
35 |
|
| 32 |
// motory |
36 |
// motory |
| 33 |
#define LMF PIN_D0 |
37 |
#define LMF PIN_D0 |
| Line 37... |
Line 41... |
| 37 |
|
41 |
|
| 38 |
//PODPROGRAMY |
42 |
//PODPROGRAMY |
| 39 |
//SENZORY |
43 |
//SENZORY |
| 40 |
|
44 |
|
| 41 |
//OLSA01A |
45 |
//OLSA01A |
| 42 |
void pulse(int pocet) // vytvori impulzy pro ridici logiku |
46 |
void olsa_pulses(int count) // vytvori impulzy pro ridici logiku |
| 43 |
{ |
47 |
{ |
| 44 |
int8 pc; |
48 |
int8 ct; |
| 45 |
for(pc=0;pc<=pocet;pc++) |
49 |
for(ct=0;ct<=count;ct++) |
| 46 |
{ |
50 |
{ |
| - |
|
51 |
delay_us(1); |
| 47 |
output_high(SCLK); |
52 |
output_high(SCLK); |
| - |
|
53 |
delay_us(1); |
| 48 |
output_low(SCLK); |
54 |
output_low(SCLK); |
| 49 |
} |
55 |
} |
| 50 |
} |
56 |
} |
| 51 |
|
57 |
|
| 52 |
void send(int info[]) // USART komunikace s modulem OLSA01A |
58 |
void olsa_pulse() // vytvori jeden impulz |
| 53 |
{ |
59 |
{ |
| - |
|
60 |
delay_us(1); |
| - |
|
61 |
output_high(SCLK); |
| - |
|
62 |
delay_us(1); |
| - |
|
63 |
output_low(SCLK); |
| - |
|
64 |
} |
| - |
|
65 |
|
| - |
|
66 |
void olsa_send(int info[]) // USART komunikace s modulem OLSA01A - poslani zpravy |
| - |
|
67 |
{ |
| 54 |
int8 *ip = &info; // ukazatel na pole s informaci |
68 |
int8 *ip = &info; // ukazatel na pole s informaci |
| 55 |
int i; // pomocna promenna pro nastaveni 0 nebo 1 na SDIN |
69 |
int i; // pomocna promenna pro nastaveni 0 nebo 1 na SDIN |
| - |
|
70 |
|
| - |
|
71 |
output_low(SDIN); // start bit |
| 56 |
for(ip=0;ip<8;ip++) |
72 |
olsa_pulse(); |
| - |
|
73 |
for(ip=0;ip<8;ip++) // predani informace - 8 bit, LSB prvni > MSB posledni |
| 57 |
{ |
74 |
{ |
| 58 |
i=info[ip]; // ziskani hodnoty z pole |
75 |
i=info[ip]; // ziskani hodnoty z pole |
| 59 |
if(i==1) // vyhodnoceni obsahu informace - nastav 1 |
76 |
if(i==1) // vyhodnoceni obsahu informace - nastav 1 |
| 60 |
{ |
77 |
{ |
| 61 |
output_high(SDIN); |
78 |
output_high(SDIN); |
| 62 |
} |
79 |
} |
| 63 |
else // vyhodnoceni obsahu informace - nastav 0 |
80 |
else // vyhodnoceni obsahu informace - nastav 0 |
| 64 |
{ |
81 |
{ |
| 65 |
output_low(SDIN); |
82 |
output_low(SDIN); |
| 66 |
} |
83 |
} |
| 67 |
delay_us(1); // vytvor impulz - delay je pouze pro zabraneni hazardnich stavu |
- |
|
| 68 |
output_high(SCLK); |
- |
|
| 69 |
delay_us(1); |
84 |
olsa_pulse(); |
| 70 |
output_low(SCLK); |
- |
|
| 71 |
} |
85 |
} |
| - |
|
86 |
output_high(SDIN); // stop bit |
| - |
|
87 |
olsa_pulse(); |
| 72 |
} |
88 |
} |
| 73 |
|
89 |
|
| - |
|
90 |
void olsa_reset() // hlavni RESET - provadi se po zapnuti |
| - |
|
91 |
{ |
| - |
|
92 |
output_low(SDIN); |
| - |
|
93 |
output_low(SCLK); |
| - |
|
94 |
olsa_pulses(30); // reset radkoveho senzoru |
| - |
|
95 |
output_high(SDIN); |
| - |
|
96 |
olsa_pulses(10); // start bit - synchronizace |
| - |
|
97 |
olsa_send(main_reset); |
| - |
|
98 |
olsa_pulses(5); |
| - |
|
99 |
olsa_send(set_mode_rg); |
| - |
|
100 |
olsa_send(clear_mode_rg); |
| - |
|
101 |
} |
| - |
|
102 |
|
| - |
|
103 |
//ZACHRANNE SENZORY |
| 74 |
void read_blue_sensors() // cteni nouzovych senzoru |
104 |
void read_blue_sensors() // cteni nouzovych senzoru |
| 75 |
{ |
105 |
{ |
| 76 |
set_adc_channel(LINEL); // cti levy nouzovy senzor |
106 |
set_adc_channel(LINEL); // cti levy nouzovy senzor |
| 77 |
delay_us(10); |
107 |
delay_us(10); |
| 78 |
line_l=read_adc(); |
108 |
line_l=read_adc(); |
| Line 80... |
Line 110... |
| 80 |
set_adc_channel(LINER); // cti pravy nouzovy senzor |
110 |
set_adc_channel(LINER); // cti pravy nouzovy senzor |
| 81 |
delay_us(10); |
111 |
delay_us(10); |
| 82 |
line_r=read_adc(); |
112 |
line_r=read_adc(); |
| 83 |
} |
113 |
} |
| 84 |
|
114 |
|
| 85 |
|
- |
|
| 86 |
|
- |
|
| 87 |
//PIPAK |
115 |
//PIPAK |
| 88 |
void beep(int16 period,int16 length) |
116 |
void beep(int16 period,int16 length) |
| 89 |
{ |
117 |
{ |
| 90 |
int16 bp; //promenna pro nastaveni delky |
118 |
int16 bp; //promenna pro nastaveni delky |
| 91 |
|
119 |
|
| Line 224... |
Line 252... |
| 224 |
void main() |
252 |
void main() |
| 225 |
{ |
253 |
{ |
| 226 |
printf("POWER ON \n"); |
254 |
printf("POWER ON \n"); |
| 227 |
// NASTAVENI > provede se pouze pri zapnuti |
255 |
// NASTAVENI > provede se pouze pri zapnuti |
| 228 |
setup_adc_ports(sAN0-sAN1-sAN2); |
256 |
setup_adc_ports(sAN0-sAN1-sAN2); |
| 229 |
setup_adc(ADC_CLOCK_INTERNAL); |
257 |
setup_adc(ADC_CLOCK_INTERNAL); // interni hodniny pro AD prevodnik |
| 230 |
setup_spi(SPI_SS_DISABLED); |
258 |
setup_spi(SPI_SS_DISABLED); |
| 231 |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
259 |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
| 232 |
setup_timer_1(T1_DISABLED); |
260 |
setup_timer_1(T1_DISABLED); |
| 233 |
setup_timer_2(T2_DIV_BY_16,255,1); //casovac pro PWM |
261 |
setup_timer_2(T2_DIV_BY_16,255,1); // casovac pro PWM |
| 234 |
setup_ccp1(CCP_PWM); // povoli PWM na pinu RC2 |
262 |
setup_ccp1(CCP_PWM); // povoli PWM na pinu RC2 |
| 235 |
setup_ccp2(CCP_PWM); // povolĂ PWM na pinu RC1 |
263 |
setup_ccp2(CCP_PWM); // povolĂ PWM na pinu RC1 |
| 236 |
setup_comparator(NC_NC_NC_NC); |
264 |
setup_comparator(NC_NC_NC_NC); |
| 237 |
setup_vref(FALSE); |
265 |
setup_vref(FALSE); |
| 238 |
output_high(LED1); // zhasne LED1 |
266 |
output_high(LED1); // zhasne LED1 |
| 239 |
output_high(LED2); // zhasne LED2 |
267 |
output_high(LED2); // zhasne LED2 |
| 240 |
l_motor_off(); // vypne oba motory |
268 |
l_motor_off(); // vypne levy motor |
| 241 |
r_motor_off(); // vypne oba motory |
269 |
r_motor_off(); // vypne pravy motor |
| - |
|
270 |
olsa_reset(); // reset logiky radkoveho senzoru |
| 242 |
beep(500,200); // pipni pri startu |
271 |
beep(500,200); // pipni pri startu |
| 243 |
printf("OK! \n"); |
272 |
printf("OK! \n"); |
| 244 |
delay_ms(500); |
273 |
delay_ms(500); |
| 245 |
printf("VYBRAT MOD... \n"); |
274 |
printf("VYBRAT MOD... \n"); |
| 246 |
while(true) |
275 |
while(true) |
| 247 |
{ |
276 |
{ |
| 248 |
send(test); |
- |
|
| 249 |
} |
277 |
} |
| 250 |
} |
278 |
} |