Taula de continguts:
Vídeo: IR-Remote Color Guessing Game: 3 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
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
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
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:
Seient calent: construeix un coixí escalfador que canvia de color: 7 passos (amb imatges)
Seient calent: construeix un coixí calefactiu que canvia el color: vols mantenir-te torrat els dies freds d’hivern? Hot Seat és un projecte que utilitza dues de les possibilitats de tèxtil electrònic més emocionants: el canvi de color i la calor. Construirem un coixí de seient que s’escalfi i, quan estigui llest, revelarà t
Núvol de color controlat per aplicació: 7 passos (amb imatges)
Núvol de color controlat per aplicació: Hola, en aquest instructiu us mostro com construir una il·luminació de l'habitació a partir d'una xarxa de camins de grava. Tot es pot controlar a través de WLAN amb una app.https: //youtu.be/NQPSnQKSuoUT Hi va haver alguns problemes amb el projecte. Però al final ho podeu fer amb enginy
Arduino Game Controller + Unity Game: 5 passos
Arduino Game Controller + Unity Game: En aquest instructiu us mostraré com construir / programar un controlador de joc arduino que es pugui connectar a la unitat
Increïble funda de color Game Boy IPod Touch (1a generació): 5 passos
Increïble funda de color Game Boy per a iPod Touch (1a generació): es tracta d’una funda per a iPod feta d’un antic color GB. com podeu veure, encara sembla exactament com un videojoc al davant, però a la part posterior hi ha un iPod. és bo si no voleu que us robin l'iPod, perquè sembla un vell i brunzit
Game Boy Color Cartridge Ilummination (GBC): 5 passos
Game Boy Color Cartridge Ilummination (GBC): aquest instructiu mostra com utilitzar un LED per il·luminar un cartutx GBC