Project

General

Profile

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.

View differences:

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