Skip to content

Commit 9e6d8a7

Browse files
committed
arduino updated code
1 parent 40b551b commit 9e6d8a7

1 file changed

Lines changed: 61 additions & 26 deletions

File tree

arduino/sorter/sorter.ino

Lines changed: 61 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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
3537
TCS34725_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
}
172176
void 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

Comments
 (0)