Färg Sensor Guide för Linkit en (3 / 4 steg)
Steg 3: kod
Definiera färg sensor LED stift
int ledArray [] = {2,3,4}.
Booleskt värde att veta om balansen har ställts in boolean balanceSet = false;
platshållare för färg upptäcks int rött = 0; int grön = 0; int blå = 0;
flöten att hålla färg matriser flyta colourArray [] = {0,0,0}. flyta whiteArray [] = {0,0,0}. flyta blackArray [] = {0,0,0}.
för genomsnittliga int avgRead;
void setup() {//setup utgångar för färg sensor pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); //begin seriell kommunikation Serial.begin(9600);}
void loop() {
checkBalance(); checkColour(); printColour(); }
void checkBalance() {//check om balansen har ställts in, om inte, ange det if(balanceSet == false) {setBalance();}}
void setBalance() {//set vitbalans delay(5000); //delay för fem sekunder, detta ger oss tid för att få ett vitt prov framför vår sensor //scan den vita provet. //go genom varje ljus, få en behandling, som basen läsning för varje färg röd, grön och blå till den vita matrisen för (int jag = 0; jag < = 2; i ++) {digitalWrite(ledArray[i] HÖG); Delay(100); getReading(5); tal är tal av skanningar att ta för genomsnittet, hela funktionen är överflödiga, en läsning fungerar lika bra. whiteArray [i] = avgRead; digitalWrite(ledArray[i],LOW); Delay(100); } //done scanning vit, nu det kommer puls blå för att berätta att det är dags för det svarta (eller grå) provet. ställa in svart balans delay(5000); vänta för fem sekunder så vi kan placera våra svarta prova //go framåt och skanna, sätter färgvärdena för rött, grönt och blått när den utsätts för svart för (int jag = 0; jag < = 2; i ++) {digitalWrite(ledArray[i],HIGH); delay(100); getReading(5); blackArray [i] = avgRead; //blackArray[i] = analogRead(2); digitalWrite(ledArray[i],LOW); delay(100);} //set boolean värde så vi vet att balans är inställd balanceSet = sant; fördröja en annan 5 sekunder för att låta mänskligt att fånga upp till vad som händer på delay(5000); }
void checkColour() {för (int jag = 0; jag < = 2; i ++) {digitalWrite(ledArray[i],HIGH); //turn eller LED, röd, grön eller blå beroende vilken iteration delay(100); //delay att låta CD-skivor till stabalize, de är långsamma getReading(5); //take en läsning men många gånger colourArray [i] = avgRead; //set den nuvarande färgen i matrisen genomsnitt läsa float greyDiff = whiteArray [i] - blackArray [i]; //the högsta möjliga avkastning minus lägsta avkastningen området för värden mellan colourArray [i] = () colourArray [i] - blackArray [i]) / (greyDiff) * 255; den behandlingen återvände minus lägsta värdet dividerat med den möjliga utbud multiplicerat med 255 kommer att ge oss ett värde ungefär mellan 0-255 som representerar värdet för den aktuella reflektionsförmåga (för färgen den utsätts för) vad att skannade digitalWrite(ledArray[i],LOW); Stäng av den nuvarande LED delay(100); }} void getReading (int gånger) {int läsning; int tally = 0; //take läsning men många gånger begärdes och läggas upp för (int jag = 0; jag < gånger; i ++) {läsning = analogRead(0); tally = behandlingen + tally; delay(10);} //calculate genomsnittligt och Ställ in den avgRead = (stämmer) / times;}
utskrifter i färg färg array, i nästa steg, vi kommer att skicka detta till för att se hur bra sensorn fungerar. 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); }