Buenos dias, estoy haciendo un separador de m&m dependiendo de su color (azul,rojo o verde). Para esto estoy usando un sensor TCS3200. Este sensor detecta si el color es verde, azul , rojo u otro color(else). Al encender el arduino un servomotor gira 90° en sentido de las manecillas del reloj, entonces el sensor debe detectar el color, en el caso de que sea diferente de azul, rojo o verde, necesito que el sevo gire 90° antihorario, se espere 1 segundo y vuelva a girar 90° en sentido horario. Entonces el sensor de color debe volver a medir el color, y en caso de que aun sea diferente, debe volver a repetir el proceso hasta que aparezca alguno de los otros colores (verde, rojo o azul), entonces el servo girara en 90° en sentido horario. El problema es que no se como realizar esto. Si alguien pudiera ayudarme lo agardeceria mucho. Anexo mi codigo que ya funciona para medir los colores. (el servomotor es de giro continuo, es el MG 996R)
#include <Servo.h>
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
Servo servo1;
int redMin = 157; // VALOR MINIMO ROJO
int redMax = 237; // VALOR MAXIMO ROJO
int greenMin = 156; // VALOR MINIMO VERDE
int greenMax = 237; // VALOR MAXIMO VERDE
int blueMin = 102; // VALOR MINIMO AZUL
int blueMax = 155; // VALOR MAXIMO AZUL
int redPW = 0;
int greenPW = 0;
int bluePW = 0;
int color = 0;
int redValue;
int greenValue;
int blueValue;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// FRECUENCIA AL 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
servo1.attach(10);
servo1.write(180);
delay(650);
servo1.write(90);
delay(2000);
Serial.begin(9600);
}
void loop() {
// LEER VALOR ROJO
redPW = getRedPW();
// Map to value from 0-255
redValue = map(redPW, redMin,redMax,255,0);
// Delay to stabilize sensor
delay(100);
// LEER VALOR VERDE
greenPW = getGreenPW();
greenValue = map(greenPW, greenMin,greenMax,255,0);
delay(100);
// LEER VALOR AZUL
bluePW = getBluePW();
blueValue = map(bluePW, blueMin,blueMax,255,0);
delay(100);
Serial.print("Red = ");
Serial.print(redValue);
Serial.print(" - Green = ");
Serial.print(greenValue);
Serial.print(" - Blue = ");
Serial.print(blueValue);
Serial.print(" - Color = ");
Serial.println(color);
if(redValue<170 & redValue>110 & greenValue<70 & greenValue>20 & blueValue<80 & blueValue>30){
color = 1; // ROJO
}
else if(redValue<170 & redValue>120 & greenValue<190 & greenValue>120 & blueValue<105 & blueValue>70){
color = 2; // VERDE
}
else if(redValue<60 & redValue>0 & greenValue<60 & greenValue>0 & blueValue<100 & blueValue>50){
color = 3; // AZUL
}
else{
color = 0; // OTRO COLOR
}
return color;
}
// FUNCION PARA LEER ROJO
int getRedPW() {
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
int PW;
PW = pulseIn(sensorOut, LOW);
return PW;
}
// FUNCION PARA LEER VERDE
int getGreenPW() {
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
int PW;
PW = pulseIn(sensorOut, LOW);
return PW;
}
// FUNCION PARA LEER AZUL
int getBluePW() {
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
int PW;
PW = pulseIn(sensorOut, LOW);
return PW;
}