Étape 3: Code
Définir les broches de couleur capteur LED
int ledArray [] = {2,3,4} ;
Boolean de savoir si l’équilibre a été défini balanceSet booléen = false ;
détenteurs de la place pour couleur détecté int rouge = 0 ; vert int = 0 ; bleu int = 0 ;
flotteurs pour tenir les tableaux de couleur flottant [] colourArray = {0,0,0} ; float [] whiteArray = {0,0,0} ; float [] blackArray = {0,0,0} ;
espace réservé pour les moyenne int avgRead ;
void setup() {//setup les sorties pour la couleur capteur pinMode(2,OUTPUT) ; pinMode(3,OUTPUT) ; pinMode(4,OUTPUT) //begin communication série Serial.begin(9600);}
void loop() {}
checkBalance() ; checkColour() ; printColour() ; }
void checkBalance() {//check si l’équilibre a été réglé, sinon, affectez-lui if(balanceSet == false) {setBalance();}}
void setBalance() {//set balance des blancs delay(5000) ; //delay pour cinq secondes, ce qui donne nous du temps pour obtenir un échantillon blanc en face de notre capteur //scan l’échantillon blanc. //go par le biais de chaque lumière, obtenez un résultat, définissez la base de lecture pour chaque couleur rouge, vert et bleu vers le tableau blanc pour (int i = 0; j’ai < = 2; i ++) {digitalWrite(ledArray[i] ÉLEVÉ) ; Delay(100) ; getReading(5) ; nombre est le nombre d’analyses pour la moyenne, cette fonction entière est redondante, une lecture fonctionne aussi bien. whiteArray [i] = avgRead ; digitalWrite(ledArray[i],LOW) ; Delay(100) ; } //done numérisation blanc, maintenant il flashe bleu pour vous dire qu’il est temps pour l’échantillon noir (ou gris). régler la balance des noirs delay(5000) ; attente pour cinq secondes, donc nous pouvons positionner notre noir échantillon //go venir et scan, définit les valeurs de couleur pour rouge, vert et bleu lorsqu’il est exposé au noir pour (int i = 0; j’ai < = 2; i ++) {digitalWrite(ledArray[i],HIGH) ; delay(100) ; getReading(5) ; blackArray [i] = avgRead ; //blackArray[i] = analogRead(2) ; digitalWrite(ledArray[i],LOW) ; delay(100);} //set valeur booléenne afin que nous sachions que l’équilibre est définie balanceSet = true ; un autre retard 5 secondes pour permettre à l’homme attraper ce qui se passe sur delay(5000) ; }
void checkColour() {pour (int j’ai = 0; j’ai < = 2; i ++) {digitalWrite(ledArray[i],HIGH) ; //turn ou la LED, rouge, verte ou bleue selon laquelle itération delay(100) ; //delay pour permettre des CdS à stabiliser, ils sont lents getReading(5) ; //take une lecture cependant plusieurs fois colourArray [i] = avgRead ; //set la couleur actuelle dans le tableau à la lecture de flotteur greyDiff moyenne = whiteArray [i] - blackArray [i]; //the plus élevée possible retourner moins le rendement le plus bas la zone des valeurs entre colourArray [i] = () colourArray [i] - blackArray [i]) / (greyDiff) * 255 ; la lecture restituée, déduction faite de la valeur la plus basse divisée par le nombre possible multiplié par 255 nous donnera une valeur à peu près entre 0 et 255, représentant la valeur de la réflectivité actuelle (pour la couleur,) qu'elle est exposée) de ce que l'on digitalWrite(ledArray[i],LOW) numérisées ; Éteignez le courant delay(100) de LED ; }} void getReading (int fois) {int lecture ; tally int = 0; //take la lecture cependant beaucoup de fois a été demandée et ajoutez-les à (int j’ai = 0; j’ai < fois; i ++) {lire = analogRead(0) ; pointage = lecture + tally ; delay(10);} //calculate la moyenne et affectez-lui avgRead = (pointage) / times;}
imprime la couleur dans la couleur tableau, à l’étape suivante, nous enverrons ce traitement pour voir comment bien le capteur fonctionne. 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) ; }