root / trunk / code / projects / mapping / auto / robot_main.c @ 1127
History | View | Annotate | Download (1.54 KB)
1 |
#include <dragonfly_lib.h> |
---|---|
2 |
#include <wireless.h> |
3 |
#include <encoders.h> |
4 |
#include "odometry.h" |
5 |
#include "smart_run_around_fsm.h" |
6 |
|
7 |
#define POLLING_INTERVAL 50 //interval in ms to get sensor data |
8 |
#define MAP 1 // packet group for sending data points |
9 |
#define ODO 0 // packet type for sending data points |
10 |
|
11 |
char buf[100]; |
12 |
|
13 |
int main(void) |
14 |
{ |
15 |
/* initialize components and join the token ring */
|
16 |
dragonfly_init(ALL_ON); |
17 |
odometry_init(); |
18 |
run_around_init(); |
19 |
orb_enable(); |
20 |
wl_init(); |
21 |
wl_set_channel(0xE);
|
22 |
|
23 |
int x, y; // use when sending odometry data |
24 |
double theta;
|
25 |
|
26 |
int store[9]; |
27 |
char *send; // for transmission |
28 |
|
29 |
while(1) |
30 |
{ |
31 |
wl_do(); |
32 |
|
33 |
delay_ms(POLLING_INTERVAL); /* until it's time to grab map data */
|
34 |
|
35 |
x = odometry_dx(); // data gathered
|
36 |
y = odometry_dy(); |
37 |
theta = odometry_angle(); |
38 |
|
39 |
store[0] = x; // position |
40 |
store[1] = y;
|
41 |
*((double*)(store + 2)) = theta; // calculated angle (8 bytes) |
42 |
store[4] = range_read_distance(IR1); // IR1 range |
43 |
store[5] = range_read_distance(IR2); // IR2 range |
44 |
store[6] = range_read_distance(IR3); // IR3 range |
45 |
store[7] = range_read_distance(IR4); // IR4 range |
46 |
store[8] = range_read_distance(IR5); // IR5 range |
47 |
sprintf(buf, "%d %d %f %d %d %d %d %d\n", store[0], store[1], |
48 |
*((double *)(store+2)), store[4], store[5], store[6], |
49 |
store[7], store[8]); |
50 |
usb_puts(buf); // send data to USB for debugging
|
51 |
|
52 |
send = (char*) store; // convert to char for wireless |
53 |
|
54 |
wl_send_global_packet(MAP, ODO, send, 18, 0); |
55 |
|
56 |
run_around_FSM(); |
57 |
} |
58 |
|
59 |
wl_terminate(); |
60 |
return 0; |
61 |
} |
62 |
|