@@ -21,15 +21,17 @@ Servo funnel_servo;
2121#define funnel_servo_pin 5
2222#define slider_servo_pin 7
2323#define filter_pos 55
24- #define home_pos 90
24+ #define home_pos 95
2525#define graveyard_pos 130
26- #define move_delay 20
27- #define wiggle_delay 125
28- #define wiggle_range 10
29- # define filter_threshold 50
26+ #define move_delay 12
27+ #define wiggle_delay 100
28+ #define wiggle_range 15
29+
3030#define funnel_servo_delay 15
3131#define funnel_home 90
32- #define scan_delay 50
32+ #define scan_delay 40
33+ #define middle_delay 10
34+ #define filter_threshold 150
3335/*
3436//TCS34725_INTEGRATIONTIME_2_4MS = 0xFF, *< 2.4ms
3537TCS34725_INTEGRATIONTIME_24MS =0xF6, /**< 24ms
@@ -84,7 +86,7 @@ void loop() {
8486 } else if (command==' e' ) {
8587 move_slider (cur_slider_pos-1 );
8688 } else if (command==' w' ) {
87- scan_color ();
89+ scan_color (false );
8890 } else if (command==' i' ) {
8991 move_slider (graveyard_pos);
9092 delay (200 );
@@ -97,13 +99,13 @@ void loop() {
9799
98100 } else if (command==' k' ) {
99101 // save color
100- save_color ();
102+ save_color (true );
101103 } else if (command==' l' ) {
102104 // prime the chamber
103105 if (sort_mode) {
104106 funnel_servo.write (funnel_home);
105107 } else {
106- funnel_servo.write (funnel_home-8 );
108+ funnel_servo.write (funnel_home-6 );
107109 }
108110 sort_mode = !sort_mode;
109111 } else if (command==' ,' ) {
@@ -130,9 +132,10 @@ void loop() {
130132 }
131133
132134 }
133- if (sort_mode==true ){
135+ if (sort_mode==true ){
136+ middle ();
134137 delay (150 );
135- scan_color ();
138+ scan_color (true );
136139 float filter_diff = color_diff (cur_r,cur_g,cur_b,tgt_r,tgt_g,tgt_b);
137140 Serial.print (" cur_r:" );Serial.print (cur_r);
138141 Serial.print (" cur_g:" );Serial.print (cur_g);
@@ -158,36 +161,54 @@ void loop() {
158161
159162}
160163
161- double color_diff (int16_t ri,int16_t gi,int16_t bi,int16_t rf,int16_t gf,int16_t bf) {
162- int16_t sum = sq (abs (ri-rf)) + sq (gi-gf) + sq (bi-bf);
163- int r_sq = sq (ri-rf);
164- Serial.print (" yo:" );
165- Serial.print (ri);Serial.print (" -" );Serial.print (rf);Serial.print (" =" );
166- Serial.print (ri-rf);Serial.println (" " );
164+ double color_diff (long ri,long gi,long bi,long rf,long gf,long bf) {
165+ long sum = sq (abs (ri-rf)) + sq (abs (gi-gf)) + sq (abs (bi-bf));
166+ long r_sq = (ri-rf)*(ri-rf);
167+ Serial.println (" color diff:" );
168+ Serial.print (ri);Serial.print (" \t " );Serial.print (gi);Serial.print (" \t " );Serial.print (bi);Serial.println (" \t " );
169+ Serial.print (rf);Serial.print (" \t " );Serial.print (gf);Serial.print (" \t " );Serial.print (bf);Serial.println (" \t " );
170+ Serial.print (rf-ri);Serial.print (" \t " );Serial.print (gf-gi);Serial.print (" \t " );Serial.print (bf-bi);Serial.println (" \t " );
167171 Serial.print (r_sq);Serial.print (" ~" );Serial.print (sq (ri-rf));
168172
169173 Serial.println (" " );
170174 return sqrt (sum);
171175}
172176void middle () {
173- slider_servo.write (home_pos); // tell servo to go to position in variable 'pos'
177+ // ease to middle
178+ Serial.print (" cur slider pos: " );Serial.println (cur_slider_pos);
179+ if (cur_slider_pos < home_pos) {
180+
181+ for (int pos = cur_slider_pos; pos<home_pos;pos++) {
182+ slider_servo.write (pos);
183+ cur_slider_pos = pos;
184+ delay (middle_delay);
174185
186+ }
187+ } else {
188+ for (int pos = cur_slider_pos; pos>home_pos;pos--) {
189+ slider_servo.write (pos);
190+ cur_slider_pos = pos;
191+ delay (middle_delay);
192+ }
193+ }
194+ slider_servo.write (home_pos); // tell servo to go to position in variable 'pos'
195+
175196 for (int pos = home_pos; pos <home_pos+wiggle_range; pos += 1 ) { // goes from 180 degrees to 0 degrees
176197 slider_servo.write (pos); // tell servo to go to position in variable 'pos'
177- delay (wiggle_delay ); // waits 15ms for the servo to reach the position
198+ delay (middle_delay ); // waits 15ms for the servo to reach the position
178199
179200 }
180201 for (int pos = home_pos+wiggle_range; pos >home_pos-wiggle_range; pos -= 1 ) { // goes from 180 degrees to 0 degrees
181202 slider_servo.write (pos); // tell servo to go to position in variable 'pos'
182- delay (wiggle_delay );
203+ delay (middle_delay );
183204
184205 }
185206 for (int pos = home_pos-wiggle_range; pos <home_pos; pos += 1 ) { // goes from 180 degrees to 0 degrees
186207 slider_servo.write (pos); // tell servo to go to position in variable 'pos'
187- delay (wiggle_delay ); // waits 15ms for the servo to reach the position
208+ delay (middle_delay ); // waits 15ms for the servo to reach the position
188209
189210 }
190- delay (wiggle_delay ); // waits 15ms for the servo to reach the position
211+ delay (middle_delay ); // waits 15ms for the servo to reach the position
191212 slider_servo.write (home_pos);
192213 cur_slider_pos = home_pos;
193214}
@@ -218,7 +239,7 @@ void read_color(boolean debug) {
218239 uint16_t r,g,b,rt, gt, bt, c;
219240 tcs.getRawData (&r, &g, &b, &c);
220241
221- if (millis ()-last_millis > 10000 ) {
242+ if (millis ()-last_millis > 2000 ) {
222243 last_millis = millis ();
223244 Serial.print (r);Serial.print (" ," );
224245 Serial.print (g);Serial.print (" ," );
@@ -227,11 +248,18 @@ void read_color(boolean debug) {
227248 }
228249
229250}
230- void scan_color () {
251+ void scan_color (boolean debug ) {
231252 uint16_t r,g,b, c;
232253 uint16_t color_sum = 10000000 ;
233254 slider_servo.write (home_pos);
234255 cur_slider_pos = home_pos;
256+ if (debug) {
257+ tcs.getRawData (&r, &g, &b, &c);
258+ cur_r = r;
259+ cur_g = g;
260+ cur_b = b;
261+ return ;
262+ }
235263 for (int i=home_pos;i<home_pos+wiggle_range;i++) {
236264 slider_servo.write (i);
237265 cur_slider_pos = i;
@@ -284,13 +312,20 @@ void scan_color() {
284312
285313}
286314
287- void save_color () {
315+ void save_color (boolean debug ) {
288316 uint16_t r, g, b, c,color_sum;
289317 uint16_t rt, gt, bt;
290318 rt = gt = bt = 0 ;
291319 color_sum = 1000000 ;
292320 slider_servo.write (home_pos);
293321 cur_slider_pos = home_pos;
322+ if (debug) {
323+ tcs.getRawData (&r, &g, &b, &c);
324+ tgt_r = r;
325+ tgt_g = g;
326+ tgt_b = b;
327+ return ;
328+ }
294329 for (int i=home_pos;i<home_pos+wiggle_range;i++) {
295330 slider_servo.write (i);
296331 cur_slider_pos = i;
@@ -333,7 +368,7 @@ void save_color() {
333368 cur_slider_pos = i;
334369 }
335370
336- Serial.println (" saved current color:" );
371+ Serial.print (" saved current color:" );
337372 Serial.print (tgt_r);Serial.print (" ," );
338373 Serial.print (tgt_g);Serial.print (" ," );
339374 Serial.print (tgt_b);Serial.print (" ," );
0 commit comments