1 #include <lpc21xx.h> /* LPC21xx definitions */
3 #include <periph/can.h>
7 #include <can_msg_def.h>
12 #include <uart_nozen.h>
18 unsigned int cmu_buff[30];
19 unsigned int cmu_buff_p = 0;
30 if (time_blink == 0) time_blink = time_ms + 500;
32 if (time_ms > time_blink)
35 time_blink = time_ms + 500;
39 void set_robobagr( unsigned char pwm)
42 unsigned int speed = 0;
56 // send_status(BAGR_STAT_POWERSAFE);
57 engine_A_en(ENGINE_EN_OFF); // engines off
59 engine_B_en(ENGINE_EN_OFF);
75 ///////////////////////////
81 if (cmu_timeout < time_ms) return 2;
82 while (UART_new_data(UART1))
84 int data = read_UART_data(UART1);
85 write_UART_data( UART0, data );
86 if (data == ':') return 1;
92 unsigned int fil_red[4];
93 unsigned int fil_green[4];
94 unsigned int fil_blue[4];
96 void cmu_parse_message(void)
100 unsigned int iter = 1;
101 unsigned int colors[6];
103 for (i = 0; i < 6; i++)
108 if (cmu_buff[0] != 'S') return;
109 if (cmu_buff[1] != ' ') return;
111 for ( val = cmu_buff_p ; val > 0 ; --val)
113 if ((cmu_buff[val] >= '0' ) & (cmu_buff[val] <= '9' )) break;
116 for (i =0; i < 6 ;i++)
120 for ( ; val > 0 ; --val)
122 if (cmu_buff[val] >= '0')
124 colors[i] += (cmu_buff[val] - '0') * iter ;
135 fil_red[0] = fil_red[1];
136 fil_red[1] = fil_red[2];
137 fil_red[2] = fil_red[3];
138 fil_red[3] = colors[5];
139 color.red = (fil_red[3] * 4 + fil_red[2] * 3 + fil_red[1] * 2 + fil_red[0] * 1) / 10;
141 fil_green[0] = fil_green[1];
142 fil_green[1] = fil_green[2];
143 fil_green[2] = fil_green[3];
144 fil_green[3] = colors[4];
145 color.green = (fil_green[3] * 4 + fil_green[2] * 3 + fil_green[1] * 2 + fil_green[0] * 1) / 10;
147 fil_blue[0] = fil_blue[1];
148 fil_blue[1] = fil_blue[2];
149 fil_blue[2] = fil_blue[3];
150 fil_blue[3] = colors[3];
151 color.blue = (fil_blue[3] * 4 + fil_blue[2] * 3 + fil_blue[1] * 2 + fil_blue[0] * 1) / 10;
153 color.d_red = colors[2];
154 color.d_green =colors[1];
155 color.d_blue =colors[0];
161 void cmu_set_param(void)
163 char param[] = "CR 18 44\r";
166 for( i = 0 ; i < 9; i++){
167 write_UART_data( UART1, param[i] );
168 write_UART_data( UART0, param[i] );
176 if (cmu_timeout < time_ms) return 2;
177 while (UART_new_data(UART1))
179 cmu_buff[cmu_buff_p]= read_UART_data(UART1);
180 write_UART_data( UART0, cmu_buff[cmu_buff_p]);
182 if (cmu_buff[cmu_buff_p] == ':')
186 for ( i = 0; i <= cmu_buff_p ; i++)
188 if (cmu_buff[i] == 'N') { cmu_buff_p = 0; return 2;}
189 if (cmu_buff[i] == 'A') { cmu_buff_p = 0; return 1;}
200 void cmu_set_gm(void)
202 char param[] = "GM\r";
205 for( i = 0 ; i < 3; i++){
206 write_UART_data( UART1, param[i] );
207 //write_UART_data( UART0, param[i] );
214 if (cmu_timeout < time_ms) return 2;
215 while (UART_new_data(UART1))
217 cmu_buff[cmu_buff_p]= read_UART_data(UART1);
218 write_UART_data( UART0, cmu_buff[cmu_buff_p]);
220 if (cmu_buff[cmu_buff_p] == '\r')
224 for ( i = 0; i <= cmu_buff_p ; i++)
226 write_UART_data( UART0, cmu_buff[i]);
228 if (cmu_buff[i] == 'N') { cmu_buff_p = 0; return 2;}
229 if (cmu_buff[i] == 'A') { cmu_buff_p = 0; return 1;}
241 void atoim(unsigned int val)
243 write_UART_data( UART0, ' ' );
244 write_UART_data( UART0, (val / 100 + 48) );
245 write_UART_data( UART0, ((val % 100) / 10 + 48) );
246 write_UART_data( UART0, ((val % 100) % 10 + 48) );
250 unsigned int time_adc =0;
253 if (time_adc == 0) time_adc = time_ms + ADC_TIME;
255 if (time_ms > time_adc)
258 unsigned int data[4];
259 data[0] = adc_val[0];
260 data[1] = adc_val[1];
261 data[2] = adc_val[2];
262 data[3] = adc_val[3];
269 msg.data[0] = (data[0]>>8) & 0xFF;
270 msg.data[1] = data[0] & 0xFF;
271 msg.data[2] = (data[1]>>8) & 0xFF;
272 msg.data[3] = data[1] & 0xFF;
273 msg.data[4] = (data[2]>>8) & 0xFF;
274 msg.data[5] = data[2] & 0xFF;
275 msg.data[6] = (data[3]>>8) & 0xFF;
276 msg.data[7] = data[3] & 0xFF;
277 while (can_tx_msg(&msg));
280 time_adc = time_ms + ADC_TIME;
288 unsigned int val = 0;
290 if (color.red > 120) val |= 1;
291 if (color.blue > 120) val |= 1;
296 msg.data[0] = val & 0xFF;
297 while (can_tx_msg(&msg));
307 if (UART_new_data(UART1))
309 test = read_UART_data(UART1);
313 if (cmu_buff_p < 13) // if recieved chars is not full message
322 //write_UART_data( UART0, '\n');
328 cmu_buff[cmu_buff_p] = test;
329 write_UART_data( UART0, cmu_buff[cmu_buff_p]);