Paso 4: Programación arduino
El código es muy simple. En este código se entender fácilmente cómo usar este sensor.
Definir color sensor LED alfileres
int ledArray [] = {2,3,4};
booleano para saber si el equilibrio se ha establecido tipo boolean balanceSet = false;
los titulares de lugar de color detectada int rojo = 0; verde int = 0; int azul = 0;
flotadores para arreglos de discos de color flotan colourArray [] = {0,0,0}; Float whiteArray [] = {0,0,0}; Float blackArray [] = {0,0,0};
marcador de posición para avgRead int promedio;
void setup() {//setup las salidas para el color sensor pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); //begin comunicación serial Serial.begin(9600);}
void loop() {}
checkBalance(); checkColour(); printColour(); }
void checkBalance() {//check si se ha establecido el equilibrio, si no, ponerlo if(balanceSet == false) {setBalance();}}
void setBalance() {//set balance de blancos delay(5000); //delay para cinco segundos, este da nos el tiempo para obtener una muestra blanco delante de nuestro sensor //scan la muestra blanco. //go a través de cada luz, obtener una lectura, conjunto de la base de lectura para cada color rojo, verde y azul en la matriz blanca de (int i = 0; i < = 2; i ++) {digitalWrite(ledArray[i] ALTO); Delay(100); getReading(5); número es el número de exploraciones por medio de esta función todo es redundante, una lectura funciona igual de bien. whiteArray [i] = avgRead; digitalWrite(ledArray[i],LOW); Delay(100); } //done escaneo blanco, ahora parpadeará azul te digo que es hora de que la muestra de negra (o gris). establecer balance negro delay(5000); espera para cinco segundos por lo que podemos colocar nuestro negro muestra //go adelante y exploración, establece los valores de color para rojo, verde y azul cuando se expone al negro para (int i = 0; i < = 2; i ++) {digitalWrite(ledArray[i],HIGH); delay(100); getReading(5); blackArray [i] = avgRead; //blackArray[i] = analogRead(2); digitalWrite(ledArray[i],LOW); delay(100);} //set valor booleano, así que sabemos que el equilibrio se establece balanceSet = true; otra demora 5 segundos para permitir que el ser humano para alcanzar lo que está pasando en delay(5000); }
anular checkColour() {para (int i = 0; i < = 2; i ++) {digitalWrite(ledArray[i],HIGH); //turn o el LED, rojo, verde o azul dependiendo de que delay(100) de iteración; //delay para permitir que los CD ' s para stabalize, son lentos getReading(5); //take una lectura sin embargo muchas veces colourArray [i] = avgRead; //set el color actual en la gama media de la lectura greyDiff de flotador = whiteArray [i] - blackArray [i]; //the más alta posible volver menos los rendimientos más bajos el área para valores entre colourArray [i] = ( colourArray [i] - blackArray [i]) / (greyDiff) * 255; la lectura devuelve menos el valor más bajo dividido por la posible gama multiplicada por 255 nos dará un valor aproximadamente entre 0 y 255 que representa el valor de la reflectividad actual (para el color) que está expuesta) de lo que está siendo escaneada digitalWrite(ledArray[i],LOW); Apagar la delay(100) LED actual; }} void getReading (int veces) {int lectura; int cuenta = 0; //take la lectura sin embargo muchas veces se pidió y agregarlos a (int i = 0; me < veces; i ++) {leyendo = analogRead(0); cuenta = lectura + recuento; delay(10);} //calculate la media y avgRead = (tally) períodos;}
impresiones del color en el color de Arsenal, en el siguiente paso, le enviaremos a procesar para ver qué bien funciona el sensor. void printColour() {Serial.print ("R ="); Serial.println(int(colourArray[0])); Serial.Print ("G ="); Serial.println(int(colourArray[1])); Serial.Print ("B ="); Serial.println(int(colourArray[2])); Delay(2000); }