Revision 904
Compiles now. This code worked a while ago but I haven't touched it since early last semester.
The idea was to do exactly what Abe is doing now... so it might be useful.
trunk/code/projects/mapping/robot/stat_gather.c | ||
---|---|---|
1 |
#include "dragonfly_lib.h" |
|
2 |
#include "serial.h" |
|
3 |
|
|
4 |
int main(void){ |
|
5 |
int i; |
|
6 |
int ranges[] = {IR1, IR2, IR3, IR4, IR5}; |
|
7 |
unsigned long eval[] = {0,0,0,0,0}; |
|
8 |
unsigned long square_eval[] = {0,0,0,0,0}; |
|
9 |
unsigned int count[] = {0,0,0,0,0}; |
|
10 |
int range; |
|
11 |
int distance; |
|
12 |
|
|
13 |
//Correspond to 4 cm to 30 cm THIS COULD BE GETTING A BIT RIDICULOUSLY HUGE. |
|
14 |
int distance_values[26][5]; |
|
15 |
while(1){ |
|
16 |
//Expects a value from 4 to 30. |
|
17 |
distance = (usb_getc()-'0')*10 + usb_getc()-'0'; |
|
18 |
|
|
19 |
if(distance > 30 || distance < 4){ |
|
20 |
usb_puts("Expected a value in the range of the IR sensor. (4 cm - 30 cm), try again.\n"); |
|
21 |
continue; |
|
22 |
} |
|
23 |
|
|
24 |
while(!button1_read()){ |
|
25 |
for(i = 0; i < 5; i++){ |
|
26 |
count[i]++; |
|
27 |
range = range_read_distance(ranges[i]); |
|
28 |
if(range==-1) |
|
29 |
count[i]--; |
|
30 |
else{ |
|
31 |
sum[i] += range; |
|
32 |
square_sum[i] += range*range; |
|
33 |
} |
|
34 |
} |
|
35 |
} |
|
36 |
|
|
37 |
for(i=0;i<5;i++){ |
|
38 |
eval[i] /= count; |
|
39 |
square_eval[i] /= count |
|
40 |
} |
|
41 |
|
|
42 |
usb_puts("Average, variance for this run:\n"); |
|
43 |
for(i=0;i<5;i++){ |
|
44 |
usb_puts("IR"); usb_puti(i); usb_puts(":\t"); |
|
45 |
usb_puti(eval[i]); usb_puts("\t"); |
|
46 |
usb_puti(square_eval[i]-eval[i]*eval[i]); |
|
47 |
usb_puts("\n"); |
|
48 |
} |
|
49 |
while(!button2_read()); |
|
50 |
} |
|
51 |
} |
trunk/code/projects/mapping/robot/data_response.c | ||
---|---|---|
29 | 29 |
} |
30 | 30 |
|
31 | 31 |
|
32 |
/** |
|
33 |
* Sorry for the lack of modularity, I didn't want to deal with memory issues for too long, plus it'll be faster! |
|
34 |
*/ |
|
35 | 32 |
void handle_receive(char type, int source, unsigned char* packet, int length){ |
36 | 33 |
|
37 | 34 |
char buf[MAX_PACKET_LENGTH]; |
... | ... | |
57 | 54 |
|
58 | 55 |
case IR_TYPE: |
59 | 56 |
|
60 |
//usb_puts("Generating an IR packet.\n"); |
|
61 | 57 |
for(i=0;i<5;i++){ |
62 | 58 |
ir_value = (short)range_read_distance(ranges[i]); |
63 | 59 |
buf[2*i] = (char)((ir_value>>8)&255); |
64 | 60 |
buf[2*i+1] = (ir_value&255); |
65 |
//usb_puts("Distance :\t"); |
|
66 |
//usb_puti(ir_value); |
|
67 |
//usb_puts("\n"); |
|
68 | 61 |
} |
69 | 62 |
size = 10; |
70 | 63 |
|
... | ... | |
80 | 73 |
case ENCODER_TYPE: |
81 | 74 |
break; |
82 | 75 |
//Not yet supported. |
83 |
} |
|
76 |
|
|
84 | 77 |
case ALL_TYPE: |
85 | 78 |
for(i=0;i<5;i++){ |
86 | 79 |
ir_value = (short)range_read_distance(ranges[i]); |
87 | 80 |
buf[2*i] = (char)((ir_value>>8)&255); |
88 | 81 |
buf[2*i+1] = (ir_value&255); |
89 | 82 |
} //Buf 0...9 filled. |
90 |
|
|
83 |
|
|
91 | 84 |
//Tack on the Encoder data... |
92 | 85 |
//Then BOM: |
93 | 86 |
wl_token_iterator_begin(); |
... | ... | |
99 | 92 |
} |
100 | 93 |
wl_send_robot_to_robot_global_packet(DATA_REQUEST_GROUP,ALL_TYPE,buf,size,source,0); |
101 | 94 |
break; |
102 |
} |
|
103 |
|
|
104 |
/** |
|
105 |
* @brief Generates a BOM Data packet. **NO LONGER USED** Delete once this code is used often. |
|
106 |
*/ |
|
107 |
int generate_bom_packet(char** buf){ |
|
108 |
short int i=0, robot_id; |
|
109 |
wl_token_iterator_begin(); |
|
110 |
while(wl_token_iterator_has_next() && i<=96){ |
|
111 |
robot_id = wl_token_iterator_next(); |
|
112 |
(*buf)[i++] = (char)((robot_id>>8) & 0xFF); |
|
113 |
(*buf)[i++] = (char)(robot_id & 0xFF); |
|
114 |
(*buf)[i++] = (char)(wl_token_get_my_sensor_reading(robot_id)); |
|
115 | 95 |
} |
116 |
//i is one greater than the index of the last byte... the size. |
|
117 |
return i; |
|
118 | 96 |
} |
119 | 97 |
|
120 |
/** |
|
121 |
* @brief Generates an IR Packet **NO LONGER USED** Delete once this code is used often. |
|
122 |
* |
|
123 |
*/ |
|
124 |
int generate_IR_packet(char** buf){ |
|
125 |
//usb_puts("Generating an IR packet.\n"); |
|
126 |
char ranges[] = {IR1,IR2,IR3,IR4,IR5}; |
|
127 |
int i; |
|
128 |
short ir_value; |
|
129 |
for(i=0;i<5;i++){ |
|
130 |
ir_value = (short)range_read_distance(ranges[i]); |
|
131 |
(*buf)[2*i] = (char)((ir_value>>8)&255); |
|
132 |
(*buf)[2*i+1] = (ir_value&255); |
|
133 |
//usb_puts("Distance :\t"); |
|
134 |
//usb_puti(ir_value); |
|
135 |
//usb_puts("\n"); |
|
136 |
} |
|
137 |
return 10; |
|
138 |
} |
|
98 |
|
trunk/code/projects/mapping/robot/data_response.h | ||
---|---|---|
5 | 5 |
#define BOM_TYPE 0 |
6 | 6 |
#define IR_TYPE 1 |
7 | 7 |
#define ENCODER_TYPE 2 |
8 |
#define ALL-TYPE 3
|
|
8 |
#define ALL_TYPE 3
|
|
9 | 9 |
|
10 | 10 |
#define MAX_PACKET_LENGTH 100 |
11 | 11 |
|
Also available in: Unified diff