Tabla de contenido:

Juego de adivinanzas de colores con control remoto por infrarrojos: 3 pasos
Juego de adivinanzas de colores con control remoto por infrarrojos: 3 pasos

Video: Juego de adivinanzas de colores con control remoto por infrarrojos: 3 pasos

Video: Juego de adivinanzas de colores con control remoto por infrarrojos: 3 pasos
Video: 15 TRUCOS AVANZADOS para ALEXA - IMPOSIBLE que SEPAS TODOS!!! 2024, Mes de julio
Anonim
Juego de adivinanzas de colores con control remoto por infrarrojos
Juego de adivinanzas de colores con control remoto por infrarrojos

En este instructivo, te mostraré cómo controlar un LED RGB usando un control remoto IR y ¡hacer un juego divertido con él!

Paso 1: Piezas necesarias

Piezas necesarias
Piezas necesarias

Las piezas que necesitará para este proyecto son:

- arduino uno- LED RGB- Sensor de infrarrojos

(el conteo de led depende del juego, la cantidad de vidas o) - 2 leds verdes- 1 led amarillo - 1 led naranja- 3 leds rojos

Paso 2: Código

#incluir

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

int levelPin1 = 2;

int levelPin2 = 3; int levelPin3 = 4; int levelPin4 = 7;

int RECV_PIN = 11;

IRrecv irrecv (RECV_PIN); decode_results resultados;

// colores de entrada

int entrada = {-1, -1, -1}; int color = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// generar colores

int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;

// variables del juego

int diff = 200;

int levelNumber = 1;

int nivel = {-1, -1, -1, -1};

int t = 0;

int nivel1 = 255;

int nivel2 = 0; int nivel3 = 0; int nivel4 = 0;

int vidas = 3;

int levens1 = 255; int levens2 = 255; int levens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

configuración vacía () {

Serial.begin (9600); irrecv.enableIRIn (); // inicia el receptor pinMode (redPin, OUTPUT); pinMode (greenPin, SALIDA); pinMode (bluePin, SALIDA);

pinMode (levensPin1, SALIDA);

pinMode (levensPin2, SALIDA); pinMode (levensPin3, SALIDA);

}

bucle vacío () {

if (irrecv.decode (& results)) // recibe las señales del remoto {Serial.println (results.value, DEC); // muestra las señales recibidas de cada botón presionado irrecv.resume (); // recibe el siguiente interruptor de señal (results.value) {// convierte las señales en números en los botones y asigna acciones a los botones

caso 109562864:

addWaarde (1); rotura;

caso 109562824:

addWaarde (2); rotura;

caso 109562856:

addWaarde (3); rotura;

caso 109562872:

addWaarde (4); rotura;

caso 109562820:

addWaarde (5); rotura;

caso 109562852:

addWaarde (6); rotura;

caso 109562868:

addWaarde (7); rotura;

caso 109562828:

addWaarde (8); rotura;

caso 109562860:

addWaarde (9); rotura;

caso 109562876:

addWaarde (0); rotura;

caso 109562818: // oud ding enter / R CLK

handleInput (); rotura;

caso 109562816: // oud ding power

handleColor (); rotura; case 109562878: // cancelación de sonido en voz alta / L CLK resetColor (); rotura;

caso 109562866: // lege knop midden

Color aleatorio(); rotura;

caso 109562830: // pijltje naar rechts

displayEverything (); rotura; case 109562838: // esc case 109562822: // fuente AV resetEverything (); rotura; }

// asignar botones en el control remoto para controlar el color: de esta manera, los jugadores pueden ver cómo se ven los colores y cómo combinarlos, // antes de comenzar un juego. cambiar (resultados.valor) {caso 109562840: rood = 255; rotura;

caso 109562844:

groen = 255; rotura;

caso 109562850:

blauw = 255; rotura;

caso 109562836:

rood = 0; groen = 0; blauw = 0; rotura; }

}

analogWrite (redPin, abs (255 - rood)); // control de led RGB: al revés, porque el mío está cableado al revés.

analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));

// control de leds en vivo

si (vidas == 2) {levens1 = 0; } si (vive == 1) {levens2 = 0; } si (vive == 0) {levens3 = 0; } escritura analógica (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// control de leds de nivel

if (levelNumber == 1) {level1 = 255; } if (levelNumber == 2) {level1 = 255; nivel2 = 255; } if (levelNumber == 3) {level1 = 255; nivel2 = 255; nivel3 = 255; } if (levelNumber == 4) {level1 = 255; nivel2 = 255; nivel3 = 255; nivel4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (int value) {// agrega el valor presionado a la lista

if (indexNumber == 3) {

regreso; }

if (input [indexNumber] == -1) {

input [indexNumber] = valor; indexNumber ++; }}

void handleInput () {// hacer un 'waarde' (valor) de la lista

waarde = abs (entrada [0] * 100 + entrada [1] * 10 + entrada [2]); entrada [0] = -1; // restablecer la señal input [1] = -1; entrada [2] = -1;

indexNumber = 0;

Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (waarde); }

void addColor (int waarde) {// agrega el 'waarde' de 3 dígitos a una lista

if (indexColor == 3) {

regreso; }

if (color [indexColor] == -1) {

color [indexColor] = waarde; if (color [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// haz que la luz cambie a un color aleatorio y guárdalo en variables

roodRandom = aleatorio (0, 255);

groenRandom = aleatorio (0, 255);

blauwRandom = aleatorio (0, 255);

rood = roodRandom;

groen = groenRandom; blauw = blauwRandom; Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

}

void handleColor () {// convierte el 'waarde' de la lista en variables 'Gok' (adivinar)

roodGok = color [0]; groenGok = color [1]; blauwGok = color [2]; // verifica si las variables de Gok difieren demasiado con el color aleatorio real: si es así, muestra la suposición durante tres segundos, parpadea en verde y cambia el color nuevamente, agrega un nivel y reduce la diferencia permitida // si no, muestra la adivina durante tres segundos, parpadea en rojo y deduce una vida // si te quedas sin vidas, el juego comienza de nuevo si (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); retraso (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); retraso (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); retraso (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); Color aleatorio(); levelNumber ++; diff - = 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); retraso (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

vidas--; } if (vive == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); retraso (100); resetEverything (); }

}

void resetColor () {// se usa para restablecer valores, para una prensa incorrecta o cada nueva suposición (solo para certeza)

color [0] = -1; color [1] = -1; color [2] = -1;

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// reinicia el juego

color [0] = -1; color [1] = -1; color [2] = -1;

indexNumber = 0;

indexColor = 0;

vidas = 3;

rood = 0; groen = 0; blauw = 0;

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

nivel1 = 255;

nivel2 = 0; nivel3 = 0; nivel4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// use esto para mostrar información importante en el monitor serial

Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

Serial.print ("rood =");

Serial.println (rood); Serial.print ("groen ="); Serial.println (groen); Serial.print ("blauw ="); Serial.println (blauw);

Serial.print ("waarde opgeslagen:");

Serial.println (waarde); }

Paso 3: construir

Construir
Construir
Construir
Construir
Construir
Construir
Construir
Construir

Obviamente, quieres una buena construcción para este proyecto. esta parte está bastante abierta a la interpretación, pero hay algunas cosas a tener en cuenta con esto: - mantenga el panel frontal delgado, para que aún pueda pegar sus leds y el receptor de infrarrojos siga funcionando

- mantenga suficiente espacio en la construcción para el arduino y una placa de soldadura

- asegúrese de que haya un agujero en la parte posterior para el poder del arduino

Agregué un esquema aproximado para el cableado.

¡Buena suerte y diviertete!

Recomendado: