Changeset 158
- Timestamp:
- 03/04/06 13:01:36 (3 years ago)
- Files:
-
- trunk/lib/cc3_ilp/cc3_color_info.c (modified) (3 diffs)
- trunk/lib/cc3_ilp/cc3_color_info.h (modified) (1 diff)
- trunk/projects/cmucam2/cmucam2.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/cc3_ilp/cc3_color_info.c
r157 r158 14 14 { 15 15 pkt->mean.channel[i]=0; 16 pkt->scratch_mean[i]=0; 16 17 pkt->deviation.channel[i]=0; 18 pkt->min.channel[i]=255; 19 pkt->max.channel[i]=0; 17 20 } 18 21 pkt->scratch_x=0; … … 33 36 cc3_get_pixel( img, x, 0, &cp ); 34 37 if(cc3_g_current_frame.coi==CC3_ALL ) { 35 38 uint8_t i; 39 for(i=0; i<3; i++ ) 40 { 41 pkt->scratch_mean[i]+=cp.channel[i]; 42 if(cp.channel[i]<pkt->min.channel[i]) pkt->min.channel[i]=cp.channel[i]; 43 if(cp.channel[i]>pkt->max.channel[i]) pkt->max.channel[i]=cp.channel[i]; 44 } 36 45 37 46 } else 38 47 { 39 40 48 uint8_t i; 49 i=cc3_g_current_frame.coi; 50 pkt->scratch_mean[i]+=cp.channel[i]; 51 if(cp.channel[i]<pkt->min.channel[i]) pkt->min.channel[i]=cp.channel[i]; 52 if(cp.channel[i]>pkt->max.channel[i]) pkt->max.channel[i]=cp.channel[i]; 41 53 } 42 54 … … 52 64 uint8_t cc3_color_info_scanline_finish(cc3_color_info_pkt_t *pkt) 53 65 { 66 uint8_t i; 67 for(i=0; i<3; i++ ) 68 { 69 pkt->deviation.channel[i]=((pkt->max.channel[i]-pkt->mean.channel[i])+ 70 (pkt->mean.channel[i]-pkt->min.channel[i]))/2; 71 } 54 72 55 73 return 1; trunk/lib/cc3_ilp/cc3_color_info.h
r157 r158 11 11 cc3_pixel_t mean; 12 12 cc3_pixel_t deviation; 13 cc3_pixel_t min,max; 13 14 uint16_t scratch_x,scratch_y; 15 uint32_t scratch_mean[3]; 14 16 } cc3_color_info_pkt_t; 15 17 trunk/projects/cmucam2/cmucam2.c
r155 r158 2 2 #include <cc3_ilp.h> 3 3 #include <cc3_color_track.h> 4 #include <cc3_color_info.h> 4 5 #include <math.h> 5 6 #include <stdbool.h> … … 32 33 char *cmucam2_cmds[CMUCAM2_CMD_END]; 33 34 35 void cmucam2_get_mean(cc3_color_info_pkt_t *t_pkt, uint8_t poll_mode, uint8_t line_mode ); 36 void cmucam2_write_s_packet(cc3_color_info_pkt_t *pkt); 34 37 void cmucam2_track_color(cc3_track_pkt_t *t_pkt, uint8_t poll_mode, uint8_t line_mode ); 35 38 int32_t cmucam2_get_command(int32_t *cmd, int32_t *arg_list); … … 46 49 uint8_t error,poll_mode,line_mode; 47 50 cc3_track_pkt_t t_pkt; 51 cc3_color_info_pkt_t s_pkt; 48 52 49 53 set_cmucam2_commands(); … … 120 124 break; 121 125 case TRACK_COLOR: 122 {123 126 if(n!=0 && n!=6) { error=1; break; } else print_ACK(); 124 127 if(n==6) … … 133 136 cmucam2_track_color(&t_pkt, poll_mode, line_mode ); 134 137 break; 138 139 case GET_MEAN: 140 if(n!=0) { error=1; break; } else print_ACK(); 141 cmucam2_get_mean(&s_pkt, poll_mode, line_mode ); 142 break; 135 143 case SET_SERVO: 136 144 if(n!=2) { error=1; break; } else print_ACK(); 137 145 cc3_servo_set(arg_list[0], arg_list[1] ); 138 }139 146 break; 140 147 default: … … 154 161 } 155 162 156 163 void cmucam2_get_mean(cc3_color_info_pkt_t *s_pkt, uint8_t poll_mode, uint8_t line_mode ) 164 { 165 cc3_image_t img; 166 uint16_t i; 167 img.channels=3; 168 img.width=cc3_g_current_frame.width; 169 img.height=1; // image will hold just 1 row for scanline processing 170 img.pix = malloc(3 * img.width); 171 do 172 { 173 cc3_pixbuf_load(); 174 if(cc3_color_info_scanline_start(s_pkt)!=0 ) 175 { 176 for(i=0; i<cc3_g_current_frame.height; i++ ) 177 { 178 cc3_pixbuf_read_rows(img.pix, img.width, 1); 179 cc3_color_info_scanline(&img, s_pkt); 180 } 181 cc3_color_info_scanline_finish(s_pkt); 182 cmucam2_write_s_packet(s_pkt); 183 } 184 if(!cc3_uart_has_data(0) ) break; 185 } while(poll_mode!=1); 186 187 free(img.pix); 188 } 157 189 158 190 void cmucam2_track_color(cc3_track_pkt_t *t_pkt, uint8_t poll_mode, uint8_t line_mode ) … … 239 271 } 240 272 273 void cmucam2_write_s_packet(cc3_color_info_pkt_t *pkt) 274 { 275 printf( "S %d %d %d %d %d %d\r", pkt->mean.channel[0], pkt->mean.channel[1], 276 pkt->mean.channel[2], pkt->deviation.channel[0], pkt->deviation.channel[1], 277 pkt->deviation.channel[2]); 278 279 } 241 280 242 281 void print_ACK()
