Stap 4: Stap 3: Code schrijven
Hier is mijn Arduino-code. U moet de const waarden gebaseerd op hoeveel licht in de kamer - commentaar uit het aangegeven gedeelte van de loop methode is kalibreren en Let op de RGB-waarden die worden weergegeven voor verschillende gekleurde kaarten. Deze RGB-waarden opslaan in de ICOLOR const int [] de aan het begin van het script. Als je een goede baan van het licht-proofing het vak hebt, moeten dezelfde RGB-waarden werken met verschillende niveaus van achtergrond licht./ ** Loopt een kleur-sensor op de Arduino
* Start het programma terwijl het de witte kaart wordt weergegeven. Wanneer de RGB LED wordt uitgeschakeld,
* (snel) overschakelen naar de zwarte kaart. Nadat de RGB LED wit knippert, is gereed.
*/
PIN-id 's
int blauw = A2;
int groen = a1 worden verkregen;
int rood = A0;
int redOut = 9;
int greenOut = 10;
int blueOut = 11;
telt het aantal lussen - gebruikt op tijd gebeurtenissen
int count = 0;
slaat de huidige RGB-ingang
int uit [3];
ICOLOR = RGB-ingang vanaf transistor thats die kleur.
KLEUR = RGB uitgang naar RGB LED die kleur zichtbaar maken
int IWHITE [3] = {175,48,455}; int WHITE [3] = {224,226,243};
int IBLACK [3] = {42,5,20}; int OFF [3] = {0,0,0};
int IRED [3] = {145,15,38}; int rood [3] = {200,0,0};
int IYELLOW [3] = {175,40,60}; int geel [3] = {255,150,0};
int IMAGENTA [3] = {150,16,83}; int MAGENTA [3] = {200,0,200};
int IBLUE [3] = {57,7,160}; int BLUE [3] = {0,0,200};
int Signature [3] = {41,6,50}; int groen [3] = {0,200,0};
int NONE [3];
[0] daarvan is het min, [1] is de max.
int redConvert [2];
int greenConvert [2];
int blueConvert [2];
leest in de huidige kleur
int * readColor() {}
int ret [3];
RET [0] = analogRead(red);
RET [1] = analogRead(green);
RET [2] = analogRead(blue);
terugkeer ret;
}
controles die elk element in color1 op dev van ligt
het bijbehorende element in refColor
Booleaanse inRange (int color1 [], int refColor [], int dev) {}
retourneren (abs (color1 [0] - refColor[0]) < = dev) & &
ABS (color1 [1] - refColor[1]) < = dev & &
ABS (color1 [2] - refColor[2]) < = dev;
}
Hiermee stelt u de RGB LED-kleur
VOID setColor (int color[]) {}
analogWrite (redOut, color[0]);
analogWrite (greenOut, color[1]);
analogWrite (blueOut, color[2]);
}
bepaalt de waarden voor zwart-wit
ongeldig calibrate() {}
setColor(RED);
delay(500);
setColor(GREEN);
delay(500);
setColor(BLUE);
delay(500);
setColor(WHITE);
int redSum = 0;
int greenSum = 0;
int blueSum = 0;
for (int i = 1; ik < = 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 ("witte Cal (RGB):");
Serial.Print(whiteCal[0]);
Serial.Print("");
Serial.Print(whiteCal[1]);
Serial.Print("");
Serial.println(whiteCal[2]);
Serial.println ("invoegen zwarte kaart");
while(inRange(readColor(),whiteCal,50)) {}
delay(1000);
Serial.Print ("rood groen blauw:");
Serial.Print(analogRead(Red));
Serial.Print("");
Serial.Print(analogRead(Green));
Serial.Print("");
Serial.println(analogRead(Blue));
setColor(out);
}
Serial.println ("nieuwe kaart gevonden - ik hoop dat het zwart');
delay(5000);
for (int i = 1; ik < = 5; i ++) {}
redSum += analogRead(red);
greenSum += analogRead(green);
blueSum += analogRead(blue);
delay(100);
}
int blackCal [3] = {redSum/5, greenSum/5 blueSum/5};
Serial.Print ("zwarte Cal (RGB):");
Serial.Print(blackCal[0]);
Serial.Print("");
Serial.Print(blackCal[1]);
Serial.Print("");
Serial.println(blackCal[2]);
functies voor typeconversie berekenen
redConvert [0] = blackCal [0];
redConvert [1] = whiteCal [0];
greenConvert [0] = blackCal [1];
greenConvert [1] = whiteCal [1];
blueConvert [0] = blackCal [2];
blueConvert [1] = whiteCal [2];
}
kalibratieroutine loopt en schakelt het licht wit vóór
startende lus
VOID Setup {}
Serial.begin(9600);
Calibrate();
setColor(WHITE);
delay(1000);
}
void loop {}
leest in nieuwe waarden
uit [0] = analogRead (rood); //0-1024
[1] = analogRead(green);
[2] = analogRead(blue);
bijwerken van RGB LED en afdrukopties minder vaak
Als (graaf % 5000 == 0) {}
Serial.Print ("rood groen blauw:");
Serial.Print(out[0]);
Serial.Print("");
Serial.Print(out[1]);
Serial.Print("");
Serial.println(out[2]);
commentaar uit de rest van deze lus aan gewoon weergavewaarden en geen gebruik maken van de RGB LED
if(inRange(out,IWHITE,10)) {}
Serial.println("White!");
setColor(WHITE);
}
anders if(inRange(out,IRED,10)) {}
Serial.println("Red!");
setColor(RED);
}
anders if(inRange(out,IBLUE,10)) {}
Serial.println("Blue!");
setColor(BLUE);
}
anders if(inRange(out,IYELLOW,10)) {}
Serial.println("Yellow!");
setColor(YELLOW);
}
anders if(inRange(out,IMAGENTA,10)) {}
Serial.println("magenta!");
setColor(MAGENTA);
}
anders if(inRange(out,IGREEN,10)) {}
Serial.println("Green!");
setColor(GREEN);
}
anders setColor(OFF);
}
Graaf ++;
}