Paso 4: Paso 3: escribir el código
Aquí está mi código de Arduino. Usted tendrá que calibrar los valores const en función de cuánta luz en la habitación - comentario a la parte indicada del método loop() y tenga en cuenta los valores RGB muestra de tarjetas de colores diferentes. Almacenar los valores RGB en el ICOLOR const int [] al principio de la secuencia de comandos. Si hiciste un buen trabajo de corrección de luz de la caja, los mismos valores RGB deben trabajar con distintos niveles de luz de fondo./ ** Funciona un sensor de color con el Arduino
* Iniciar el programa al mismo tiempo que muestra la tarjeta blanca. Cuando apaga el LED RGB,
* interruptor (rápidamente) a la tarjeta de negro. Después de que el RGB LED parpadea blanco, está listo.
*/
identificadores de PIN
int azul = A2;
int verde = A1;
int rojo = A0;
redOut int = 9;
int greenOut = 10;
int blueOut = 11;
cuenta el número de bucles - utilizado para eventos
int cuenta = 0;
guarda la actual entrada RGB
int [3];
ICOLOR = RGB entrada de transistor que es ese color.
COLOR = RGB salida mostrar ese color para LED RGB
int IWHITE [3] = {175,48,455}; int blanco [3] = {224,226,243};
int IBLACK [3] = {42,5,20}; int [3] = {0,0,0};
int IRED [3] = {145,15,38}; int rojo [3] = {200,0,0};
int IYELLOW [3] = {175,40,60}; int amarillo [3] = {255,150,0};
int IMAGENTA [3] = {150,16,83}; int MAGENTA [3] = {200,0,200};
int IBLUE [3] = {57,7,160}; int azul [3] = {0,0,200};
int IGREEN [3] = {41,6,50}; int verde [3] = {0,200,0};
int NONE [3];
[0] de ellos es el minuto, [1] es el máximo.
int redConvert [2];
int greenConvert [2];
int blueConvert [2];
lecturas en el color actual
int * readColor() {}
int ret [3];
RET [0] = analogRead(red);
RET [1] = analogRead(green);
RET [2] = analogRead(blue);
Return ret;
}
Verifica que cada elemento en color1 está dentro dev de
el elemento correspondiente en refColor
{} Boolean inRange (color1 de int [], int refColor [], int dev)
volver (abs (color1 [0] - refColor[0]) < = dev) & &
ABS (color1 [1] - refColor[1]) < = dev & &
ABS (color1 [2] - refColor[2]) < = dev;
}
establece el color del RGB LED
void colores (int color[]) {}
analogWrite (redOut, color[0]);
analogWrite (greenOut, color[1]);
analogWrite (blueOut, color[2]);
}
determina los valores de blanco y negro
void calibrate() {}
setColor(RED);
Delay(500);
setColor(GREEN);
Delay(500);
setColor(BLUE);
Delay(500);
setColor(WHITE);
redSum int = 0;
int greenSum = 0;
int blueSum = 0;
para (int i = 1; i < = 5; i ++) {}
redSum += analogRead(red);
greenSum += analogRead(green);
blueSum += analogRead(blue);
Delay(333);
}
int whiteCal [3] = {redSum/5, greenSum/5, blueSum/5};
redSum = blueSum = greenSum = 0;
setColor(OFF);
Serial.Print ("blanco Cal (RGB):");
Serial.Print(whiteCal[0]);
Serial.Print("");
Serial.Print(whiteCal[1]);
Serial.Print("");
Serial.println(whiteCal[2]);
Serial.println ("tarjeta del parte movible negro");
{while(inRange(readColor(),whiteCal,50))}
Delay(1000);
Serial.Print ("rojo verde azul:");
Serial.Print(analogRead(red));
Serial.Print("");
Serial.Print(analogRead(Green));
Serial.Print("");
Serial.println(analogRead(Blue));
setColor(out);
}
Serial.println ("nueva tarjeta detectada - espero que sea negro");
Delay(5000);
para (int i = 1; i < = 5; i ++) {}
redSum += analogRead(red);
greenSum += analogRead(green);
blueSum += analogRead(blue);
Delay(100);
}
int blackCal [3] = {redSum/5, greenSum/5, blueSum/5};
Serial.Print ("negro Cal (RGB):");
Serial.Print(blackCal[0]);
Serial.Print("");
Serial.Print(blackCal[1]);
Serial.Print("");
Serial.println(blackCal[2]);
calcular funciones de conversión de
redConvert [0] = blackCal [0];
redConvert [1] = whiteCal [0];
greenConvert [0] = blackCal [1];
greenConvert [1] = whiteCal [1];
blueConvert [0] = blackCal [2];
blueConvert [1] = whiteCal [2];
}
ejecuta la rutina de calibración y permite que la luz blanca antes de
Inicio de bucle
void setup() {}
Serial.Begin(9600);
Calibrate();
setColor(WHITE);
Delay(1000);
}
void loop() {}
Lee en nuevos valores
[0] = analogRead (rojo); //0-1024
[1] = analogRead(green);
[2] = analogRead(blue);
RGB LED de actualizar e imprimir salida menos frecuentemente
Si (recuento % 5000 == 0) {}
Serial.Print ("rojo verde azul:");
Serial.Print(OUT[0]);
Serial.Print("");
Serial.Print(OUT[1]);
Serial.Print("");
Serial.println(OUT[2]);
comentar el resto de este bucle sólo valores de pantalla y no utilizar el LED RGB
{if(inRange(out,IWHITE,10))}
Serial.println("White!");
setColor(WHITE);
}
else {} if(inRange(out,IRED,10))
Serial.println("red!");
setColor(RED);
}
else {} if(inRange(out,IBLUE,10))
Serial.println("Blue!");
setColor(BLUE);
}
else {} if(inRange(out,IYELLOW,10))
Serial.println("Yellow!");
setColor(YELLOW);
}
else {} if(inRange(out,IMAGENTA,10))
Serial.println("magenta!");
setColor(MAGENTA);
}
else {} if(inRange(out,IGREEN,10))
Serial.println("Green!");
setColor(GREEN);
}
setColor(OFF) otra cosa;
}
cuenta ++;
}