Étape 5: Le code
Le code de ce projet est assez simple. La première partie est pour defing tout, la seconde pour créer une couleur au hasard et la troisième pour utilisant les potentiomètres et en donnant les commandes bouton poussoir et LED.
C’est ici :
/ * Code pour rgb led jeu bouclier. Par Ikestarm17. Merci à Ladyada pour
tous les produits grandes, mbeckler pour son site d’information, marklar, grumpy_mike,
et AWOL sur l’Arduino forums.* /
int greenled1 = 13 ;
int verteLED2 = 8 ;
int greenled3 = 4 ;
int redled1 = 19 ;
int redled2 = 7 ;
int redled3 = 12 ; LEDs qui montrent si vous étiez juste ou pas
buttonstate int ;
int val ;
val2 int ;
int val3 ;
int switchpin = 2 ;
int switchpin2 = 0 ; variables pour les trucs de bouton
int redactual ;
int greenactual ;
int blueactual ; variables pour stocker les couleurs que vous devez faire correspondre
int redPin = 3 ;
bluePin int = 5 ;
int greenPin = 6 ; broches pour le rgb led vous contrôle
redIn int = 2 ;
int greenIn = 3 ;
int blueIn = 4 ; broches pour les potentiomètres pour le rgb led
int redguess ;
int greenguess ;
int blueguess ; variables pour stocker les valeurs de votre conduit à comparer à ceux au hasard
/ * Cette partie suivante avant « void setup() »
* est tout au sujet de rendre le rgb led
* une couleur au hasard « bonne », pas juste un blanc dehors.
* Je ne sais pas beaucoup sur cette partie,
* parce que j’ai changé seulement une petite partie,
* Marklar des forums arduino a créé * /
#ifndef RGBCommonLED_H
#define RGBCommonLED_H
#include « WProgram.h »
Class RGBCommonLED {}
public :
RGBCommonLED (int rpin, int gpin, int bpin) ;
~ RGBCommonLED() ;
void setRGB (byte r, g octet, byte b) ;
void setHSV (byte h, s octet, octet v) ;
void setColor (unsigned long v) ;
void setHue (niveau de l’octet) ;
void setSat (niveau de l’octet) ;
setVal Sub (niveau de l’octet) ;
void adjHue (int level) ;
void adjSat (int level) ;
void adjVal (int level) ;
void setRandomColor() ;
void setRandomHue() ;
void setRandomSat() ;
void setRandomVal() ;
void setHSVLevel (int section, niveau octet) ;
void adjHSVLevel (int section, int niveau) ;
void setRandomHSVLevel (int section) ;
void updateLED() ;
void HSVToRGB (unsigned int inHue, inSaturation unsigned int, unsigned int inValue,
unsigned int * ou, unsigned int * oG, unsigned int * oB) ;
void RGBToHSV (int unsigned énonce, unsigned int inGreen, unsigned int bleu,
unsigned int * oH, unsigned int * oS, unsigned int * oV) ;
void updateHSVFromRGB() ;
broches int [3] ;
int rgb [3] ;
int hsv [3] ;
privé :
Boolean hsvSet ;
void setRGBFromHSV() ;
void setHSVFromRGB() ;
};
#endif
RGBCommonLED::RGBCommonLED (int rpin, int gpin, int bpin) {}
broches [0] = rpin ;
pins [1] = gpin ;
broches [2] = bpin ;
hsvSet = false ;
}
RGBCommonLED:: ~ RGBCommonLED() {}
}
void RGBCommonLED::setColor (unsigned long v)
{
This -> setRGB ((v & 255), ((v >> 8) & 255), (v >> 16) & 255) ;
}
void RGBCommonLED::setRGB (byte r, g octet, byte b) {}
RVB [0] = r ;
RVB [1] = g ;
RVB [2] = b ;
hsvSet = false ;
}
void RGBCommonLED::setHSV (byte h, s octet, octet v) {}
HSV [0] = h ;
HSV [1] = s ;
HSV [2] = v ;
This -> setRGBFromHSV() ;
hsvSet = true ;
}
void RGBCommonLED::setHSVLevel (int section, niveau octet) {}
updateHSVFromRGB() ;
HSV [section] = niveau ;
This -> setRGBFromHSV() ;
}
void RGBCommonLED::setHue (niveau de l’octet) {}
This -> setHSVLevel(0,level) ;
}
void RGBCommonLED::setSat (niveau de l’octet) {}
This -> setHSVLevel(1,level) ;
}
void RGBCommonLED::setVal (niveau de l’octet) {}
This -> setHSVLevel(2,level) ;
}
void RGBCommonLED::adjHSVLevel (int niveau, section int) {}
updateHSVFromRGB() ;
int e = hsv [section] + niveau ;
Si (e < 0) {}
Th = 255 + th ;
}
ElseIf (th > 255) {}
Th = 255 - th ;
}
Th = constrain(th,0,255) ;
HSV [section] = th ;
This -> setRGBFromHSV() ;
}
void RGBCommonLED::adjHue (int level) {}
This -> adjHSVLevel(0,level) ;
}
void RGBCommonLED::adjSat (int level) {}
This -> adjHSVLevel(1,level) ;
}
void RGBCommonLED::adjVal (int level) {}
This -> adjHSVLevel(2,level) ;
}
void RGBCommonLED::RGBToHSV (int unsigned énonce, unsigned int inGreen, unsigned int bleu,
unsigned int * oH, unsigned int * oS, unsigned int * oV)
{
double vals [3] ;
unsigned char maxc = 0, minc = 0 ;
double teinte, samedi val ;
Vals [0] = inRed ;
Vals [1] = inGreen ;
Vals [2] = inBlue ;
rouge est défini comme valeurs maximale et minimale
Si (vals [1] > vals[maxc]) maxc = 1 ;
Si (vals [2] > vals[maxc]) maxc = 2 ;
Si (vals [1] < vals[minc]) minc = 1 ;
Si (vals [2] < vals[minc]) minc = 2 ;
Val = vals [maxc] ;
if(Vals[maxc]==0)
Sam = teinte = 0 ;
d’autre
{
Sat=255*(1-(Vals[MiNC]/Vals[maxc])) ;
teinte = 60 * ((maxc*2) + (vals [(maxc+1) %3]-vals [(maxc+2) %3]) / (vals [maxc] - vals[minc])) ;
}
Si += de hue (teinte < 0) 360 ; correcteur pour les teintes de -60 à 0 plage
* oH = teinte ; Map(Hue,0,360,0,255) ;
* oS = sat ;
* oV = val ;
}
void RGBCommonLED::HSVToRGB (unsigned int inHue, inSaturation unsigned int, unsigned int inValue,
unsigned int * ou, unsigned int * oG, unsigned int * oB)
{
Si (inSaturation == 0)
{
achromatique (gris)
* RC = * oG = * oB = inValue ;
}
d’autre
{
unsigned int scaledHue = (inHue * 6) ;
unsigned int secteur = scaledHue >> 8 ; secteur de 0 à 5 autour de la roue de couleur
unsigned int offsetInSector = scaledHue - (secteur << 8) ; position dans le secteur
unsigned int p = (inValue * (255 - inSaturation)) >> 8 ;
unsigned int q = (inValue * (255 - ((inSaturation * offsetInSector) >> 8))) >> 8 ;
unsigned int t = (inValue * (255 - ((inSaturation * (255 - offsetInSector)) >> 8))) >> 8 ;
commutateur (secteur) {}
case 0 :
* RC = inValue ;
* oG = t ;
* oB = p ;
rupture ;
cas 1 :
* RC = q ;
* oG = inValue ;
* oB = p ;
rupture ;
cas 2 :
* RC = p ;
* oG = inValue ;
* oB = t ;
rupture ;
cas 3 :
* RC = p ;
* oG = q ;
* oB = inValue ;
rupture ;
cas 4 :
* RC = t ;
* oG = p ;
* oB = inValue ;
rupture ;
par défaut: / / case 5 :
* RC = inValue ;
* oG = p ;
* oB = q ;
rupture ;
}
}
}
void RGBCommonLED::setRandomColor() {}
This -> setColor ((unsigned long)random(0x01000000)) ;
}
void RGBCommonLED::setRandomHue() {}
This -> setRandomHSVLevel(0) ;
}
void RGBCommonLED::setRandomSat() {}
This -> setRandomHSVLevel(1) ;
}
void RGBCommonLED::setRandomVal() {}
This -> setRandomHSVLevel(2) ;
}
void RGBCommonLED::setRandomHSVLevel (int section) {}
This -> setHSVLevel (section, (unsigned int)random(0x0100)) ;
}
void RGBCommonLED::updateHSVFromRGB() {}
This -> setHSVFromRGB() ;
hsvSet = true ;
}
void RGBCommonLED::updateLED() {}
analogWrite (ce-> pins [0], rgb[0]) ;
analogWrite (ce-> pins [1], rgb[1]) ;
analogWrite (ce-> pins [2], rgb[2]) ;
redactual = RVB [0] ;
greenactual = RVB [1] ;
blueactual = RVB [2] ;
}
void RGBCommonLED::setRGBFromHSV() {}
unsigned int h = hsv [0] ;
unsigned int s = hsv [1] ;
unsigned int v = hsv [2] ;
unsigned int r = 0 ;
unsigned int g = 0 ;
unsigned int b = 0 ;
HSVToRGB (h, s, v, r, g, & b) ;
This -> setRGB(r,g,b) ;
}
void RGBCommonLED::setHSVFromRGB() {}
unsigned int r = RVB [0] ;
unsigned int g = RVB [1] ;
unsigned int b = RVB [2] ;
unsigned int h ;
unsigned int s ;
unsigned int v ;
This -> RGBToHSV (r, g, b et h & s et v) ;
HSV [0] = map(h,0,360,0,255) ;
HSV [1] = s ;
HSV [2] = v ;
hsvSet = true ;
}
RGBCommonLED led1(10,11,9) ;
void setup()
{
pinMode (redled1, sortie) ;
pinMode (redled2, sortie) ;
pinMode (redled3, sortie) ;
pinMode (greenled1, sortie) ;
pinMode (verteLED2, sortie) ;
pinMode (greenled3, sortie) ;
pinMode (switchpin, entrée) ;
pinMode (switchpin2, INPUT); / / réglage de la LED comme sortie et l’interrupteur comme entrée
Serial.Begin(9600) ; commencer la série
randomSeed(analogRead(0)) ; lire les broches analogiques 0 pour obtenir la valeur aléatoire
LED1.setRandomHue() ;
LED1.setSat(255) ;
LED1.setVal(255) ;
LED1.setRandomColor() ;
LED1.updateLED() ; Définissez une couleur au hasard sur le premier rgb led
ButtonState = digitalRead(switchpin) ; lire le contacteur comme
}
void loop() {}
redguess = analogRead(redIn) ;
greenguess = analogRead(greenIn) ;
blueguess = analogRead(blueIn) ; lire les potentiomètres
redguess = carte (redguess, 0, 1023, 0, 255) ;
greenguess = carte (greenguess, 0, 1023, 0, 255) ;
blueguess = carte (blueguess, 0, 1023, 0, 255) ; réduire les valeurs
analogWrite (redPin, redguess) ;
analogWrite (greenPin, greenguess) ;
analogWrite (bluePin, blueguess) ; Définissez les valeurs de couleur
redguess = 255 - redguess ;
blueguess = 255 - blueguess ;
greenguess = 255 - greenguess ; fixer la valeur nombre 0 est 255 et 255 est 0
Val = digitalRead(switchpin) ;
Delay(10) ;
val2 = digitalRead(switchpin) ;
val3 = digitalRead(switchpin2) ; lire les commutateurs et fixer le rebondissement
Si (val3 == LOW & & val == val2 & & val! = buttonstate & & val == LOW & & redactual + 55 < redguess ||
val3 == LOW & & val == val2 & & val! = buttonstate & & val == LOW & & redactual - 55 > redguess ||
val3 == LOW & & val == val2 & & val! = buttonstate & & val == LOW & & blueactual + 55 < blueguess ||
val3 == LOW & & val == val2 & & val! = buttonstate & & val == LOW & & blueactual - 55 > blueguess ||
val3 == LOW & & val == val2 & & val! = buttonstate & & val == LOW & & greenactual + 55 < greenguess ||
val3 == LOW & & val == val2 & & val! = buttonstate & & val == LOW & & greenactual - 55 > greenguess ||
val3 == HIGH & & val == val2 & & val! = buttonstate & & val == LOW & & redactual + 85 < redguess ||
val3 == HIGH & & val == val2 & & val! = buttonstate & & val == LOW & & redactual - 85 > redguess ||
val3 == HIGH & & val == val2 & & val! = buttonstate & & val == LOW & & blueactual + 85 < blueguess ||
val3 == HIGH & & val == val2 & & val! = buttonstate & & val == LOW & & blueactual - 85 > blueguess ||
val3 == HIGH & & val == val2 & & val! = buttonstate & & val == LOW & & greenactual + 85 < greenguess ||
val3 == HIGH & & val == val2 & & val! = buttonstate & & val == LOW & & greenactual - 85 > greenguess) {/ / Assurez-vous couleurs de votre led ne correspondent pas à l’autre un pour le niveau plus facile
digitalWrite (greenled1, basse), / / allumer les leds rouges
digitalWrite (redled1, HIGH),
Delay(500),
digitalWrite (redled1, basse),
digitalWrite (redled2, HIGH),
Delay(500),
digitalWrite (redled2, basse),
digitalWrite (redled3, HIGH),
Delay(500),
digitalWrite(redled3,LOW) ;
digitalWrite (redled1, HIGH),
Delay(500),
digitalWrite (redled1, basse),
digitalWrite (redled2, HIGH),
Delay(500),
digitalWrite (redled2, basse),
digitalWrite (redled3, HIGH),
Delay(500),
digitalWrite(redled3,LOW),
digitalWrite (redled1, HIGH),
digitalWrite (redled2, HIGH),
digitalWrite (redled3, HIGH),
Delay(250),
digitalWrite (redled1, basse),
digitalWrite (redled2, basse),
digitalWrite (redled3, basse),
Delay(250),
digitalWrite (redled1, HIGH),
digitalWrite (redled2, HIGH),
digitalWrite (redled3, HIGH),
Delay(250),
digitalWrite (redled1, basse),
digitalWrite (redled2, basse),
digitalWrite (redled3, basse),
Delay(250),
digitalWrite (redled1, HIGH),
digitalWrite (redled2, HIGH),
digitalWrite (redled3, HIGH),
Delay(250),
digitalWrite (redled1, basse),
digitalWrite (redled2, basse),
digitalWrite (redled3, basse),
Delay(250),
digitalWrite (redled1, HIGH),
digitalWrite (redled2, HIGH),
digitalWrite (redled3, HIGH),
Delay(250),
digitalWrite (redled1, basse),
digitalWrite (redled2, basse),
digitalWrite (redled3, basse),
Delay(250) ;
}
tandis que (val3 == LOW & & val == val2 & & val! = buttonstate & & val == LOW & & / / Assurez-vous que le bouton est enfoncé
redactual + 55 > = redguess & & redactual - 55 < = redguess & &
blueactual + 55 > = blueguess & & blueactual - 55 < = blueguess & &
greenactual + 55 > = greenguess & & greenactual - 55 < = greenguess ||
val3 == HIGH & & val == val2 & & val! = buttonstate & & val == LOW & &
redactual + 85 > = redguess & & redactual - 85 < = redguess & &
blueactual + 85 > = blueguess & & blueactual - 85 < = blueguess & &
greenactual + 85 > = greenguess & & greenactual - 85 < = greenguess) {/ / Assurez-vous couleurs de votre led sont assez proches à l’autre de niveau facile
digitalWrite(redled1,LOW), / / allumer les leds vertes
digitalWrite (greenled1, HIGH),
Delay(500),
digitalWrite (greenled1, basse),
digitalWrite (verteLED2, HIGH),
Delay(500),
digitalWrite (verteLED2, basse),
digitalWrite (greenled3, HIGH),
Delay(500),
digitalWrite (greenled3, basse),
digitalWrite(redled1,LOW), / / allumer les leds vertes
digitalWrite (greenled1, HIGH),
Delay(500),
digitalWrite (greenled1, basse),
digitalWrite (verteLED2, HIGH),
Delay(500),
digitalWrite (verteLED2, basse),
digitalWrite (greenled3, HIGH),
Delay(500),
digitalWrite (greenled3, basse),
digitalWrite (greenled1, HIGH),
digitalWrite (verteLED2, HIGH),
digitalWrite (greenled3, HIGH),
Delay(250),
digitalWrite (greenled1, basse),
digitalWrite (verteLED2, basse),
digitalWrite (greenled3, basse),
Delay(250),
digitalWrite (greenled1, HIGH),
digitalWrite (verteLED2, HIGH),
digitalWrite (greenled3, HIGH),
Delay(250),
digitalWrite (greenled1, basse),
digitalWrite (verteLED2, basse),
digitalWrite (greenled3, basse),
Delay(250),
digitalWrite (greenled1, HIGH),
digitalWrite (verteLED2, HIGH),
digitalWrite (greenled3, HIGH),
Delay(250),
digitalWrite (greenled1, basse),
digitalWrite (verteLED2, basse),
digitalWrite (greenled3, basse),
Delay(250),
digitalWrite (greenled1, HIGH),
digitalWrite (verteLED2, HIGH),
digitalWrite (greenled3, HIGH),
Delay(250),
digitalWrite (greenled1, basse),
digitalWrite (verteLED2, basse),
digitalWrite (greenled3, basse),
Delay(250) ;
}
}