Étape 4: Étape 3: écrire du Code
Voici mon code Arduino. Vous aurez besoin d’étalonner les valeurs const basés sur la quantité de lumière est dans la salle - commentez la partie indiquée de la méthode loop() et notez les valeurs RVB, qu'il affiche pour les cartes de couleur différentes. Stocker ces valeurs RVB dans le ICOLOR const int [] au début du script. Si vous avez fait un bon travail de lumière-imperméabilisation de la boîte, les mêmes valeurs RVB devraient fonctionner avec différents niveaux de rétroéclairage./ ** Fonctionne un capteur de couleur sur l’Arduino
* Lancez le programme tout en montrant la carte blanche. Quand le RGB LED s’éteint,
* commutateur (rapidement) sur le carton noir. Après que le RGB LED clignote blanc, il est prêt.
*/
identificateurs de code PIN
bleu int = A2 ;
int vert = A1 ;
int rouge = A0 ;
redOut int = 9 ;
int greenOut = 10 ;
int blueOut = 11 ;
compte le nombre de lignes - utilisé pour les événements de temps
int count = 0 ;
stocke l’actuelle entrée RGB
int [3] ;
ICOLOR = entrée RGB de transistor qui est que la couleur.
COLOR = RGB à LED RGB montrent que la couleur de sortie
int IWHITE [3] = {175,48,455} ; int blanc [3] = {224,226,243} ;
int IBLACK [3] = {42,5,20} ; int [3] = {0,0,0} ;
int IRED [3] = {145,15,38} ; int rouge [3] = {200,0,0} ;
int IYELLOW [3] = {175,40,60} ; int jaune [3] = {255,150,0} ;
int IMAGENTA [3] = {150,16,83} ; int MAGENTA [3] = {200,0,200} ;
int IBLUE [3] = {57,7,160} ; int bleu [3] = {0,0,200} ;
int IGREEN [3] = {41,6,50} ; int vert [3] = {0,200,0} ;
int NONE [3] ;
[0] de ces derniers est le min, [1] est le maximum.
int redConvert [2] ;
int greenConvert [2] ;
int blueConvert [2] ;
lectures dans la couleur courante
int * readColor() {}
int ret [3] ;
ret [0] = analogRead(red) ;
ret [1] = analogRead(green) ;
ret [2] = analogRead(blue) ;
retour ret ;
}
vérifie que chaque élément de color1 relève de dev de
l’élément correspondant dans le refColor
inRange booléenne (int color1 [], int refColor [], int dev) {}
retour (abs (color1 [0] - refColor[0]) < = dev) & &
ABS (color1 [1] - refColor[1]) < = dev & &
ABS (color1 [2] - refColor[2]) < = dev ;
}
définit la couleur de la LED RGB
void setColor (int color[]) {}
analogWrite (redOut, color[0]) ;
analogWrite (greenOut, color[1]) ;
analogWrite (blueOut, color[2]) ;
}
détermine les valeurs de noir et blanc
void calibrate() {}
setColor(RED) ;
Delay(500) ;
setColor(GREEN) ;
Delay(500) ;
setColor(BLUE) ;
Delay(500) ;
setColor(WHITE) ;
int redSum = 0 ;
int greenSum = 0 ;
int blueSum = 0 ;
pour (int i = 1; i < = 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 ("blanc Cal (RGB):") ;
Serial.Print(whiteCal[0]) ;
Serial.Print("") ;
Serial.Print(whiteCal[1]) ;
Serial.Print("") ;
Serial.println(whiteCal[2]) ;
Serial.println (« carte d’insertion noir") ;
{while(inRange(readColor(),whiteCal,50))}
Delay(1000) ;
Serial.Print ("rouge vert bleu:") ;
Serial.Print(analogRead(Red)) ;
Serial.Print("") ;
Serial.Print(analogRead(Green)) ;
Serial.Print("") ;
Serial.println(analogRead(Blue)) ;
setColor(out) ;
}
Serial.println ("nouvelle carte détectée - j’espère que c’est noir") ;
Delay(5000) ;
pour (int i = 1; i < = 5; i ++) {}
redSum += analogRead(red) ;
greenSum += analogRead(green) ;
blueSum += analogRead(blue) ;
Delay(100) ;
}
int blackCal [3] = {redSum/5, greenSum/5, blueSum/5} ;
Serial.Print ("noir Cal (RGB):") ;
Serial.Print(blackCal[0]) ;
Serial.Print("") ;
Serial.Print(blackCal[1]) ;
Serial.Print("") ;
Serial.println(blackCal[2]) ;
calculer des fonctions de conversion
redConvert [0] = blackCal [0] ;
redConvert [1] = whiteCal [0] ;
greenConvert [0] = blackCal [1] ;
greenConvert [1] = whiteCal [1] ;
blueConvert [0] = blackCal [2] ;
blueConvert [1] = whiteCal [2] ;
}
exécute la routine de calibration et allume la lumière blanche avant
boucle de départ
void setup() {}
Serial.Begin(9600) ;
CALIBRATE() ;
setColor(WHITE) ;
Delay(1000) ;
}
void loop() {}
lectures de nouvelles valeurs
[0] = analogRead (rouge); //0-1024
[1] = analogRead(green) ;
[2] = analogRead(blue) ;
mise à jour de LED RVB et imprimer le résultat moins fréquemment
Si (Nbre % 5000 == 0) {}
Serial.Print ("rouge vert bleu:") ;
Serial.Print(out[0]) ;
Serial.Print("") ;
Serial.Print(out[1]) ;
Serial.Print("") ;
Serial.println(out[2]) ;
commentez le reste de cette boucle à des valeurs d’affichage juste et ne pas utiliser la LED RGB
{if(inRange(out,iWhite,10))}
Serial.println("White!") ;
setColor(WHITE) ;
}
else {if(inRange(out,IRED,10))
Serial.println("Red!") ;
setColor(RED) ;
}
else {if(inRange(out,IBLUE,10))
Serial.println("Blue!") ;
setColor(BLUE) ;
}
else {if(inRange(out,IYELLOW,10))
Serial.println("Yellow!") ;
setColor(YELLOW) ;
}
else {if(inRange(out,IMAGENTA,10))
Serial.println("magenta!") ;
setColor(MAGENTA) ;
}
else {if(inRange(out,IGREEN,10))
Serial.println("Green!") ;
setColor(GREEN) ;
}
d’autre setColor(OFF) ;
}
Count ++ ;
}