Paso 5: El código
El código para este proyecto es bastante simple. La primera parte es para defing todo, el segundo para crear un color aleatorio y el tercero para uso de los potenciómetros y dando los comandos pulsador y LED.
Aquí está:
/ * Código para rgb led shield juego. Por Ikestarm17. Agradecimiento especial a Ladyada para
todos los productos grandes, mbeckler por su sitio informativo, marklar, grumpy_mike,
y AWOL en el forums.* de Arduino /
int greenled1 = 13;
int greenled2 = 8;
int greenled3 = 4;
int redled1 = 19;
int redled2 = 7;
int redled3 = 12; LEDs que indican si usted justo o no
int buttonstate;
int val;
int val2;
val3 int;
int switchpin = 2;
int switchpin2 = 0; variables para la materia de botón
int redactual;
int greenactual;
int blueactual; variables para almacenar los colores que usted necesita para que coincida con
redPin int = 3;
bluePin int = 5;
int greenPin = 6; Pins para el rgb led de control se
redIn int = 2;
int greenIn = 3;
int blueIn = 4; Pins para los potenciómetros para el rgb led
int redguess;
int greenguess;
int blueguess; variables para almacenar los valores de su conducido para comparar a los aleatorios
/ * Esta parte siguiente antes de "void setup()"
* trata de hacer el rgb led
* un color aleatorio "bueno", no sólo una whited hacia fuera.
* No sé mucho sobre esta parte,
* porque sólo he cambiado una pequeña parte,
* Marklar desde los foros de arduino creados * /
#ifndef RGBCommonLED_H
#define RGBCommonLED_H
#include "WProgram.h"
clase RGBCommonLED {}
público:
RGBCommonLED (int rpin, gpin int, int bpin);
~ RGBCommonLED();
void setRGB (byte r, byte g, byte b);
void setHSV (byte h, s byte, byte v);
Colores vacío (v largo sin signo);
void setHue (nivel de byte);
void setSat (nivel de byte);
setVal nula (nivel de byte);
void adjHue (int nivel);
void adjSat (int nivel);
void adjVal (int nivel);
void setRandomColor();
void setRandomHue();
void setRandomSat();
void setRandomVal();
void setHSVLevel (int sección, nivel de byte);
void adjHSVLevel (int sección, int nivel);
void setRandomHSVLevel (int sección);
void updateLED();
void HSVToRGB (unsigned int inHue, inSaturation unsigned int, unsigned int inValue,
unsigned int * o, unsigned int * oG, unsigned int * oB);
void RGBToHSV (unsigned int inRed, unsigned int inGreen, unsigned int inBlue,
unsigned int * oH, unsigned int * oS, unsigned int * oV);
void updateHSVFromRGB();
pernos de int [3];
int rgb [3];
hsv int [3];
privado:
hsvSet Boolean;
void setRGBFromHSV();
void setHSVFromRGB();
};
#endif
RGBCommonLED::RGBCommonLED (int rpin, gpin int, int bpin) {}
alfileres [0] = rpin;
alfileres [1] = gpin;
alfileres [2] = bpin;
hsvSet = false;
}
RGBCommonLED:: ~ RGBCommonLED() {}
}
void RGBCommonLED::setColor (unsigned v largo)
{
Esto -> setRGB ((v y 255), ((v >> 8) y 255), (v >> 16) & 255);
}
void RGBCommonLED::setRGB (byte r, byte g, byte b) {}
RGB [0] = r;
RGB [1] = g;
RGB [2] = b;
hsvSet = false;
}
void RGBCommonLED::setHSV (byte h, s byte, byte v) {}
HSV [0] = h;
HSV [1] = s;
HSV [2] = v;
Esto -> setRGBFromHSV();
hsvSet = true;
}
void RGBCommonLED::setHSVLevel (int sección, nivel de byte) {}
updateHSVFromRGB();
HSV [sección] = nivel;
Esto -> setRGBFromHSV();
}
void RGBCommonLED::setHue (nivel de byte) {}
Esto -> setHSVLevel(0,level);
}
void RGBCommonLED::setSat (nivel de byte) {}
Esto -> setHSVLevel(1,level);
}
void RGBCommonLED::setVal (nivel de byte) {}
Esto -> setHSVLevel(2,level);
}
void RGBCommonLED::adjHSVLevel (int sección, int nivel) {}
updateHSVFromRGB();
int th = hsv [sección] + nivel;
Si (th < 0) {}
TH = 255 + th;
}
else if (th > 255) {}
TH = 255 - th;
}
TH = constrain(th,0,255);
HSV [sección] = th;
Esto -> setRGBFromHSV();
}
void RGBCommonLED::adjHue (int nivel) {}
Esto -> adjHSVLevel(0,level);
}
void RGBCommonLED::adjSat (int nivel) {}
Esto -> adjHSVLevel(1,level);
}
void RGBCommonLED::adjVal (int nivel) {}
Esto -> adjHSVLevel(2,level);
}
void RGBCommonLED::RGBToHSV (unsigned int inRed, unsigned int inGreen, unsigned int inBlue,
unsigned int * oH, unsigned int * oS, unsigned int * oV)
{
doble vals [3];
unsigned char maxc = 0, minc = 0;
doble matiz, sat, val;
Vals [0] = inRed;
Vals [1] = inGreen;
Vals [2] = inBlue;
rojo se establece como máximo y mínimo
Si (vals [1] > maxc vals[maxc]) = 1;
Si (vals [2] > maxc vals[maxc]) = 2;
Si (vals [1] < vals[minc]) minc = 1;
Si (vals [2] < vals[minc]) minc = 2;
Val = vals [maxc];
if(vals[maxc]==0)
SAT = hue = 0;
otra cosa
{
SAT=255*(1-(vals[MinC]/vals[maxc]));
Hue = 60 * ((maxc*2) + (vals [(maxc+1) %3]-vals [(maxc+2) %3]) / (vals [maxc] - vals[minc]));
}
Si += de hue (tonalidad < 0) 360; Corrector de tonos de -60 a 0 gama
* oH = hue; Map(Hue,0,360,0,255);
* oS = sentado;
* oV = val;
}
void RGBCommonLED::HSVToRGB (unsigned int inHue, inSaturation unsigned int, unsigned int inValue,
unsigned int * o, unsigned int * oG, unsigned int * oB)
{
Si (inSaturation == 0)
{
acromáticos (grises)
* o = * oG = * oB = inValue;
}
otra cosa
{
unsigned int scaledHue = (inHue * 6);
unsigned int sector = scaledHue >> 8; sector de 0 a 5 en la rueda de color
unsigned int offsetInSector = scaledHue - (sector << 8); posición dentro del sector
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;
interruptor (sector) {}
caso 0:
* o = inValue;
* oG = t;
* oB = p;
rotura;
caso 1:
* o = q;
* oG = inValue;
* oB = p;
rotura;
caso 2:
* o = p;
* oG = inValue;
* oB = t;
rotura;
caso 3:
* o = p;
* oG = q;
* oB = inValue;
rotura;
caso 4:
* o = t;
* oG = p;
* oB = inValue;
rotura;
default: / / caso 5:
* o = inValue;
* oG = p;
* oB = q;
rotura;
}
}
}
void RGBCommonLED::setRandomColor() {}
Esto -> colores ((unsigned long)random(0x01000000));
}
void RGBCommonLED::setRandomHue() {}
Esto -> setRandomHSVLevel(0);
}
void RGBCommonLED::setRandomSat() {}
Esto -> setRandomHSVLevel(1);
}
void RGBCommonLED::setRandomVal() {}
Esto -> setRandomHSVLevel(2);
}
void RGBCommonLED::setRandomHSVLevel (int sección) {}
Esto -> setHSVLevel (sección, (sin firmar int)random(0x0100));
}
void RGBCommonLED::updateHSVFromRGB() {}
Esto -> setHSVFromRGB();
hsvSet = true;
}
void RGBCommonLED::updateLED() {}
analogWrite (este-> pernos [0], rgb[0]);
analogWrite (este-> pernos [1], rgb[1]);
analogWrite (este-> pernos [2], rgb[2]);
redactual = rgb [0];
greenactual = rgb [1];
blueactual = rgb [2];
}
void RGBCommonLED::setRGBFromHSV() {}
unsigned int h = hsv [0];
unsigned int s = hsv [1];
unsigned int v = hsv [2];
unsigned int i = 0;
unsigned int g = 0;
unsigned int b = 0;
HSVToRGB (h, s, v y r, g & b);
Esto -> setRGB(r,g,b);
}
void RGBCommonLED::setHSVFromRGB() {}
unsigned int r = rgb [0];
unsigned int g = rgb [1];
unsigned int b = rgb [2];
unsigned int h;
unsigned int s;
unsigned int v;
Esto -> RGBToHSV (r, g, b y h y s y v);
HSV [0] = map(h,0,360,0,255);
HSV [1] = s;
HSV [2] = v;
hsvSet = true;
}
Led1(10,11,9) de RGBCommonLED;
void setup()
{
pinMode (redled1, salida);
pinMode (redled2, salida);
pinMode (redled3, salida);
pinMode (greenled1, salida);
pinMode (greenled2, salida);
pinMode (greenled3, salida);
pinMode (switchpin, entrada);
pinMode (switchpin2, entrada); / / configurar el LED como salida y el interruptor de entrada
Serial.Begin(9600); Inicio serie
randomSeed(analogRead(0)); leyó el pin analógico 0 para obtener el valor aleatorio
LED1.setRandomHue();
LED1.setSat(255);
LED1.setVal(255);
LED1.setRandomColor();
LED1.updateLED(); establecer un color al azar en el primer rgb led
ButtonState = digitalRead(switchpin); leer como apagar
}
void loop() {}
redguess = analogRead(redIn);
greenguess = analogRead(greenIn);
blueguess = analogRead(blueIn); leer los potenciómetros
redguess = mapa (redguess, 0, 1023, 0, 255);
greenguess = mapa (greenguess, 0, 1023, 0, 255);
blueguess = mapa (blueguess, 0, 1023, 0, 255); escala de los valores
analogWrite (redPin, redguess);
analogWrite (greenPin, greenguess);
analogWrite (bluePin, blueguess); establecer los valores de color
redguess = 255 - redguess;
blueguess = 255 - blueguess;
greenguess = 255 - greenguess; fijar el valor los números 0 es 255 y 255 es 0
Val = digitalRead(switchpin);
Delay(10);
val2 = digitalRead(switchpin);
val3 = digitalRead(switchpin2); leer interruptores y fijar el rebote
Si (val3 == baja & & val == val2 & & val! = buttonstate & & val == LOW & & redactual + 55 < redguess ||
val3 == baja & & val == val2 & & val! = buttonstate & & val == LOW & & redactual - 55 > redguess ||
val3 == baja & & val == val2 & & val! = buttonstate & & val == LOW & & blueactual + 55 < blueguess ||
val3 == baja & & val == val2 & & val! = buttonstate & & val == LOW & & blueactual - 55 > blueguess ||
val3 == baja & & val == val2 & & val! = buttonstate & & val == LOW & & greenactual + 55 < greenguess ||
val3 == baja & & val == val2 & & val! = buttonstate & & val == LOW & & greenactual - 55 > greenguess ||
val3 == alto & & val == val2 & & val! = buttonstate & & val == LOW & & redactual + 85 < redguess ||
val3 == alto & & val == val2 & & val! = buttonstate & & val == LOW & & redactual - 85 > redguess ||
val3 == alto & & val == val2 & & val! = buttonstate & & val == LOW & & blueactual + 85 < blueguess ||
val3 == alto & & val == val2 & & val! = buttonstate & & val == LOW & & blueactual - 85 > blueguess ||
val3 == alto & & val == val2 & & val! = buttonstate & & val == LOW & & greenactual + 85 < greenguess ||
val3 == alto & & val == val2 & & val! = buttonstate & & val == LOW & & greenactual - 85 > greenguess) {/ / asegurarse de que colores de su led no coinciden con el otro para el nivel más fácil
digitalWrite (greenled1, bajo), / / enciende LED rojo
digitalWrite (redled1, HIGH),
Delay(500),
digitalWrite (redled1, bajo),
digitalWrite (redled2, HIGH),
Delay(500),
digitalWrite (redled2, bajo),
digitalWrite (redled3, HIGH),
Delay(500),
digitalWrite(redled3,LOW);
digitalWrite (redled1, HIGH),
Delay(500),
digitalWrite (redled1, bajo),
digitalWrite (redled2, HIGH),
Delay(500),
digitalWrite (redled2, bajo),
digitalWrite (redled3, HIGH),
Delay(500),
digitalWrite(redled3,LOW),
digitalWrite (redled1, HIGH),
digitalWrite (redled2, HIGH),
digitalWrite (redled3, HIGH),
Delay(250),
digitalWrite (redled1, bajo),
digitalWrite (redled2, bajo),
digitalWrite (redled3, bajo),
Delay(250),
digitalWrite (redled1, HIGH),
digitalWrite (redled2, HIGH),
digitalWrite (redled3, HIGH),
Delay(250),
digitalWrite (redled1, bajo),
digitalWrite (redled2, bajo),
digitalWrite (redled3, bajo),
Delay(250),
digitalWrite (redled1, HIGH),
digitalWrite (redled2, HIGH),
digitalWrite (redled3, HIGH),
Delay(250),
digitalWrite (redled1, bajo),
digitalWrite (redled2, bajo),
digitalWrite (redled3, bajo),
Delay(250),
digitalWrite (redled1, HIGH),
digitalWrite (redled2, HIGH),
digitalWrite (redled3, HIGH),
Delay(250),
digitalWrite (redled1, bajo),
digitalWrite (redled2, bajo),
digitalWrite (redled3, bajo),
Delay(250);
}
mientras que (val3 == baja & & val == val2 & & val! = buttonstate & & val == LOW & & / / asegurarse de que se presiona el botón
redactual + 55 > = redguess & & redactual - 55 < = redguess & &
blueactual + 55 > = blueguess & & blueactual - 55 < = blueguess & &
greenactual + 55 > = greenguess & & greenactual - 55 < = greenguess ||
val3 == alto & & val == val2 & & val! = buttonstate & & val == LOW & &
redactual + 85 > = redguess & & redactual - 85 < = redguess & &
blueactual + 85 > = blueguess & & blueactual - 85 < = blueguess & &
greenactual + 85 > = greenguess & & greenactual - 85 < = greenguess) {/ / asegurarse de que colores de su led es lo suficientemente cerca como para el otro para el nivel fácil
digitalWrite(redled1,LOW), / / enciende el LED verde
digitalWrite (greenled1, HIGH),
Delay(500),
digitalWrite (greenled1, bajo),
digitalWrite (greenled2, HIGH),
Delay(500),
digitalWrite (greenled2, bajo),
digitalWrite (greenled3, HIGH),
Delay(500),
digitalWrite (greenled3, bajo),
digitalWrite(redled1,LOW), / / enciende el LED verde
digitalWrite (greenled1, HIGH),
Delay(500),
digitalWrite (greenled1, bajo),
digitalWrite (greenled2, HIGH),
Delay(500),
digitalWrite (greenled2, bajo),
digitalWrite (greenled3, HIGH),
Delay(500),
digitalWrite (greenled3, bajo),
digitalWrite (greenled1, HIGH),
digitalWrite (greenled2, HIGH),
digitalWrite (greenled3, HIGH),
Delay(250),
digitalWrite (greenled1, bajo),
digitalWrite (greenled2, bajo),
digitalWrite (greenled3, bajo),
Delay(250),
digitalWrite (greenled1, HIGH),
digitalWrite (greenled2, HIGH),
digitalWrite (greenled3, HIGH),
Delay(250),
digitalWrite (greenled1, bajo),
digitalWrite (greenled2, bajo),
digitalWrite (greenled3, bajo),
Delay(250),
digitalWrite (greenled1, HIGH),
digitalWrite (greenled2, HIGH),
digitalWrite (greenled3, HIGH),
Delay(250),
digitalWrite (greenled1, bajo),
digitalWrite (greenled2, bajo),
digitalWrite (greenled3, bajo),
Delay(250),
digitalWrite (greenled1, HIGH),
digitalWrite (greenled2, HIGH),
digitalWrite (greenled3, HIGH),
Delay(250),
digitalWrite (greenled1, bajo),
digitalWrite (greenled2, bajo),
digitalWrite (greenled3, bajo),
Delay(250);
}
}