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 |
} |