Stap 4: Programmeren arduino
De code is erg eenvoudig. In deze code zou u het gebruik van deze sensor gemakkelijk begrijpen.
Kleur sensor LED pinnen definiëren
int ledArray [] = {2,3,4};
Boolean om te weten als de balans Boole balanceSet gezet = false;
plaats houders voor kleur gedetecteerd int rood = 0; int groen = 0; int blauw = 0;
praalwagens te houden kleur matrices zweven [colourArray] = {0,0,0}; zweven [whiteArray] = {0,0,0}; zweven [blackArray] = {0,0,0};
place holder voor gemiddelde int avgRead;
void setup {//setup de uitgangen voor de kleur sensor pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); //begin seriële communicatie Serial.begin(9600);}
void loop {}
checkBalance(); checkColour(); printColour(); }
VOID checkBalance() {//check als het saldo is vastgesteld, zo niet, stelt u het if(balanceSet == false) {setBalance();}}
ongeldig setBalance() {//set witbalans delay(5000); //delay voor vijf seconden, dit geeft ons de tijd om een witte monster voor onze sensor //scan de witte monster. //go door elk licht, krijgen een lezing, stelt u de base lezen voor elke kleur rood, groen en blauw aan de witte matrix voor (int i = 0; ik < = 2; i ++) {digitalWrite(ledArray[i] HOGE); delay(100); getReading(5); getal is het getal van scans voor gemiddelde te nemen, deze hele functie is overbodig, een lezing werkt net zo goed. whiteArray [i] = avgRead; digitalWrite(ledArray[i],LOW); delay(100); } //done scannen wit, nu het zal pulse blauw om u te vertellen dat het is tijd voor het monster zwart (of grijs). zwarte evenwicht delay(5000); instellen wachten voor vijf seconden zodat we kunt plaatsen onze zwart monster //go vooruit en scannen, stelt de kleur waarden voor rood, groen en blauw wanneer blootgesteld aan zwart voor (int i = 0; ik < = 2; i ++) {digitalWrite(ledArray[i],HIGH); delay(100); getReading(5); blackArray [i] = avgRead; //blackArray[i] = analogRead(2); digitalWrite(ledArray[i],LOW); delay(100);} //set Booleaanse waarde zodat we weten dat evenwicht ligt balanceSet = true; een andere 5 seconden vertraging zodat de mens te halen naar what's going on delay(5000); }
VOID checkColour() {voor (int ik = 0; ik < = 2; i ++) {digitalWrite(ledArray[i],HIGH); //turn of de LED, rood, groen of blauw, afhankelijk van welke iteratie-delay(100); //delay om cd's te stabalize, ze zijn traag getReading(5); //take een lezing echter vele malen colourArray [i] = avgRead; //set de huidige kleur in de array berekend als het gemiddelde lezen float greyDiff = whiteArray [i] - blackArray [i]; //the hoogst mogelijke terug minus het laagste rendement de ruimte voor waarden tussen colourArray [i] = () colourArray [i] - blackArray [i]) / (greyDiff) * 255; de lezing terug minus de laagste waarde, gedeeld door het mogelijke bereik van de 255 vermenigvuldigd met zal geven ons een waarde ongeveer tussen 0-255 vertegenwoordigen van de waarde voor de huidige reflectiviteit (voor de kleur die het is blootgesteld aan) van wat gescande digitalWrite(ledArray[i],LOW) wordt; uitschakelen van de huidige delay(100) van de LED; }} void getReading (int keer) {int lezen; int tally = 0; //take de lezing echter vele malen werd gevraagd en ze toevoegen voor (int ik = 0; ik < keer; i ++) {lezen = analogRead(0); tally = lezing + tally; delay(10);} //calculate het gemiddelde en stel deze in avgRead = (tally) / times;}
afdrukken de kleur in de kleur array, in de volgende stap, wij sturen dit naar verwerking om te zien hoe goed de sensor werkt. 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); }