Taula de continguts:

IR-Remote Color Guessing Game: 3 passos
IR-Remote Color Guessing Game: 3 passos

Vídeo: IR-Remote Color Guessing Game: 3 passos

Vídeo: IR-Remote Color Guessing Game: 3 passos
Vídeo: Red Moon Rising | Critical Role | Campaign 3, Episode 50 2024, De novembre
Anonim
IR-Remote Game Guessing Game
IR-Remote Game Guessing Game

En aquest instructiu, us mostraré com controlar un LED RGB mitjançant un comandament a distància IR i fer-ne un divertit joc.

Pas 1: parts necessàries

Parts necessàries
Parts necessàries

Les parts que necessitareu per a aquest projecte són:

- Arduino one- Led RGB- Sensor IR

(el nombre de leds depèn del joc, de la quantitat de vides o) - 2 leds verds- 1 led groc - 1 led taronja- 3 led vermells

Pas 2: Codi

#incloure

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); resultats decode_results;

// introduïu colors

int input = {-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 colors

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

// variables del joc

int diff = 200;

int levelNumber = 1;

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

int t = 0;

int nivell 1 = 255;

int nivell2 = 0; int nivell3 = 0; int nivell4 = 0;

vides int = 3;

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

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

configuració nul·la () {

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

pinMode (levensPin1, OUTPUT);

pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);

}

bucle buit () {

if (irrecv.decode (& results)) // rep els senyals del control remot {Serial.println (results.value, DEC); // mostra els senyals rebuts de cada botó premut irrecv.resume (); // rebre el següent commutador de senyal (results.value) {// converteix els senyals en els números dels botons i assigneu accions als botons

cas 109562864:

addWaarde (1); trencar;

cas 109562824:

addWaarde (2); trencar;

cas 109562856:

addWaarde (3); trencar;

cas 109562872:

addWaarde (4); trencar;

cas 109562820:

addWaarde (5); trencar;

cas 109562852:

addWaarde (6); trencar;

cas 109562868:

addWaarde (7); trencar;

cas 109562828:

addWaarde (8); trencar;

cas 109562860:

addWaarde (9); trencar;

cas 109562876:

addWaarde (0); trencar;

case 109562818: // oud ding enter / R CLK

handleInput (); trencar;

case 109562816: // oud ding power

handleColor (); trencar; case 109562878: // oud ding cancel / L CLK resetColor (); trencar;

cas 109562866: // lege knop midden

randomColor (); trencar;

case 109562830: // pijltje naar rechts

displayEverything (); trencar; case 109562838: // esc case 109562822: // AV source resetEverything (); trencar; }

// assignar botons al comandament a distància per controlar el color: d’aquesta manera, els jugadors poden veure com són els colors i com combinar-los, // abans de començar un joc. switch (results.value) {case 109562840: rood = 255; trencar;

cas 109562844:

groen = 255; trencar;

cas 109562850:

blauw = 255; trencar;

cas 109562836:

rood = 0; groen = 0; blauw = 0; trencar; }

}

analogWrite (redPin, abs (255 - rood)); // controlant led RGB: al revés, perquè el meu està connectat al contrari.

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

// controlar leds en directe

if (viu == 2) {levens1 = 0; } if (viu == 1) {levens2 = 0; } if (viu == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// control de leds de nivell

if (levelNumber == 1) {level1 = 255; } if (levelNumber == 2) {level1 = 255; nivell2 = 255; } if (levelNumber == 3) {level1 = 255; nivell2 = 255; nivell3 = 255; } if (levelNumber == 4) {level1 = 255; nivell2 = 255; nivell3 = 255; nivell4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (valor int) {// afegiu un valor premut a la llista

if (indexNumber == 3) {

tornar; }

if (entrada [número_índex] == -1) {

input [Númeroíndex] = valor; indexNumber ++; }}

void handleInput () {// fes un "waarde" (valor) de la llista

waarde = abs (entrada [0] * 100 + entrada [1] * 10 + entrada [2]); entrada [0] = -1; // reset de signalen input [1] = -1; entrada [2] = -1;

númeroíndex = 0;

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

void addColor (int waarde) {// afegiu el "waarde" de 3 dígits a una llista

if (indexColor == 3) {

tornar; }

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

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

}

void randomColor () {// feu que la llum giri d'un color aleatori i deseu-la en variables

roodRandom = aleatori (0, 255);

groenRandom = random (0, 255);

blauwRandom = random (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 () {// converteix el "waarde" de la llista en variables "Gok" (endevinalla)

roodGok = color [0]; groenGok = color [1]; blauwGok = color [2]; // comproveu si les variables Gok difereixen massa amb el color aleatori real: si és així, mostreu la conjectura durant tres segons, parpellegeu en verd i torneu a canviar el color, afegiu un nivell abd i reduïu la diferència permesa // si no, mostreu el endevina durant tres segons, parpelleja en vermell i dedueix una vida // si estàs fora de la vida, el joc torna a començar si (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); retard (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (BluePin, 255); retard (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (BluePin, 255); retard (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; dif - = 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); retard (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

vides--; } if (viu == 0) {analogWrite (Pin vermell, 0); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (BluePin, 255); retard (100); resetEverything (); }

}

void resetColor () {// utilitza per restablir valors, per a una premsa incorrecta o per a cada nova conjectura (només per certesa)

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

númeroíndex = 0;

indexColor = 0; }

void resetEverything () {// reinicia el joc

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

númeroíndex = 0;

indexColor = 0;

vides = 3;

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

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

nivell1 = 255;

nivell2 = 0; nivell3 = 0; nivell4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// utilitzeu això per mostrar informació important al monitor sèrie

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); }

Pas 3: construeix

Construeix
Construeix
Construeix
Construeix
Construeix
Construeix
Construeix
Construeix

Evidentment, voleu una bona construcció per a aquest projecte. aquesta part està força oberta a la interpretació, però hi ha algunes coses que cal tenir en compte amb això: - mantingueu el panell frontal prim, de manera que pugueu enganxar-hi els leds i el receptor IR encara funciona

- Conserveu prou espai a la construcció per a l’arduino i una placa de soldadura

- assegureu-vos que hi hagi un forat a la part posterior per poder alimentar l’arduino

He afegit un esquema aproximat per al cablejat.

Bona sort i diverteix-te!

Recomanat: