Cuprins:
Video: IR-Remote Color Guessing Game: 3 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
În acest instructable, vă voi arăta cum să controlați un LED RGB folosind o telecomandă IR și să creați un joc distractiv din el!
Pasul 1: Piese necesare
Părțile de care aveți nevoie pentru acest proiect sunt:
- Arduino one- Led RGB- Senzor IR
(numărul de leduri depinde de joc, de numărul de vieți sau) - 2 leduri verzi- 1 led galben - 1 led portocaliu- 3 leduri roșii
Pasul 2: Cod
#include
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); rezultate decode_results;
// introduceți culorile
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;
// generează culori
int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;
// variabile de joc
int dif = 200;
int levelNumber = 1;
int level = {-1, -1, -1, -1};
int t = 0;
int nivel 1 = 255;
int level2 = 0; int level3 = 0; int level4 = 0;
vieti int = 3;
int levens1 = 255; int levens2 = 255; int levens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
configurare nulă () {
Serial.begin (9600); irrecv.enableIRIn (); // porniți receptorul pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);
pinMode (levensPin1, OUTPUT);
pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);
}
bucla nulă () {
if (irrecv.decode (& results)) // primesc semnalele de la distanță {Serial.println (results.value, DEC); // afișează semnalele primite de la fiecare buton apăsat irrecv.resume (); // primiți următorul comutator de semnal (results.value) {// transformați semnalele în numerele de pe butoane și atribuiți acțiuni butoanelor
cazul 109562864:
addWaarde (1); pauză;
cazul 109562824:
addWaarde (2); pauză;
cazul 109562856:
addWaarde (3); pauză;
cazul 109562872:
addWaarde (4); pauză;
cazul 109562820:
addWaarde (5); pauză;
cazul 109562852:
addWaarde (6); pauză;
cazul 109562868:
addWaarde (7); pauză;
cazul 109562828:
addWaarde (8); pauză;
cazul 109562860:
addWaarde (9); pauză;
cazul 109562876:
addWaarde (0); pauză;
cazul 109562818: // oud ding enter / R CLK
handleInput (); pauză;
cazul 109562816: // puterea de ding
handleColor (); pauză; case 109562878: // anulați anularea / L CLK resetColor (); pauză;
case 109562866: // lege knop midden
culoare aleatorie(); pauză;
case 109562830: // pijltje naar rechts
displayEverything (); pauză; case 109562838: // esc case 109562822: // Sursă AV resetEverything (); pauză; }
// atribuiți butoane pe telecomandă pentru controlul culorii: în acest fel, jucătorii pot vedea cum arată culorile și cum să le combine, // înainte de a începe un joc. switch (results.value) {case 109562840: rood = 255; pauză;
cazul 109562844:
groen = 255; pauză;
cazul 109562850:
blauw = 255; pauză;
cazul 109562836:
rood = 0; groen = 0; blauw = 0; pauză; }
}
analogWrite (redPin, abs (255 - rood)); // controlul LED-ului RGB: în sens invers, deoarece al meu este cablat în sens invers.
analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));
// controlul ledurilor live
if (trăiește == 2) {levens1 = 0; } if (trăiește == 1) {levens2 = 0; } if (trăiește == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// controlul ledurilor 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 (valoare int) {// adăugați valoarea apăsată la listă
if (indexNumber == 3) {
întoarcere; }
if (input [indexNumber] == -1) {
input [Număr index] = valoare; indexNumber ++; }}
void handleInput () {// faceți o „waarde” (valoare) din listă
waarde = abs (input [0] * 100 + input [1] * 10 + input [2]); intrare [0] = -1; // reset de signalen input [1] = -1; intrare [2] = -1;
Număr index = 0;
Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (waarde); }
void addColor (int waarde) {// adăugați „waarde” din 3 cifre la o listă
if (indexColor == 3) {
întoarcere; }
if (culoare [indexColor] == -1) {
color [indexColor] = waarde; if (color [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }
}
void randomColor () {// face ca lumina să devină o culoare aleatorie și să o salvezi în variabile
roodRandom = aleatoriu (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 () {// transformați „waarde” din listă în variabile „Gok” (ghici)
roodGok = culoare [0]; groenGok = culoare [1]; blauwGok = culoare [2]; // verificați dacă variabilele Gok diferă prea mult cu culoarea reală aleatorie: dacă da, afișați ghiciul timp de trei secunde, clipiți în verde și schimbați din nou culoarea, adăugați un nivel abd micșorați diferența permisă // dacă nu, afișați ghici timp de trei secunde, clipește roșu și scade o viață // dacă nu ai viață, jocul începe din nou dacă (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); întârziere (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300);
Serial.print ("roodGok =");
Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); culoare aleatorie(); levelNumber ++; dif - = 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); întârziere (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);
resetColor ();
vieți--; } if (trăiește == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); resetEverything (); }
}
void resetColor () {// utilizați pentru valorile de resetare, pentru o apăsare greșită sau pentru fiecare estimare nouă (doar pentru certitudine)
culoare [0] = -1; culoare [1] = -1; culoare [2] = -1;
Număr index = 0;
indexColor = 0; }
void resetEverything () {// reporniți jocul
culoare [0] = -1; culoare [1] = -1; culoare [2] = -1;
Număr index = 0;
indexColor = 0;
vieți = 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 () {// utilizați acest lucru pentru a afișa informații importante pe monitorul 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); }
Pasul 3: Construiți
În mod evident, doriți o construcție frumoasă pentru acest proiect. această parte este destul de deschisă interpretării, dar există câteva lucruri de care trebuie să ții cont: - păstrați panoul frontal subțire, astfel încât să vă puteți lipi ledurile și receptorul IR funcționează în continuare
- păstrați suficient spațiu în construcție pentru arduino și o placă de lipit
- asigurați-vă că există o gaură în spate pentru puterea arduino-ului
Am adăugat o schemă brută pentru cablare.
Noroc si sa te distrezi!
Recomandat:
Cloud color controlat de aplicație: 7 pași (cu imagini)
Cloud color controlat de aplicație: Bună, în acest instructiv vă arăt cum să construiți o iluminare a camerei dintr-o rețea de cărare cu pietriș. Întregul lucru poate fi controlat prin WLAN cu o aplicație. Http://youtu.be/NQPSnQKSuoUT Au existat unele probleme cu proiectul. Dar până la urmă poți să-l faci
Arduino Game Controller + Unity Game: 5 pași
Arduino Game Controller + Unity Game: În acest instructiv vă voi arăta cum să construiți / programați un controller de joc arduino care se poate conecta la unitate
„Color Match” (Reflex Game): 4 pași
„Color Match” (Reflex Game): Introducere: Pentru proiectul meu școlar nu eram sigur ce să fac, dar după ce m-am gândit, am decis să fac un joc reflex. La urma urmei, suntem o școală de jocuri. A trebuit să facem ceva interactiv și unic, așa că un joc ar fi perfect! Sunt fericit cum totul
Carcasă minunată IPod Touch (prima generație) Game Boy Color Case: 5 pași
Minunat Carcasă de culoare Game Boy IPod Touch (prima generație): aceasta este o carcasă pentru iPod realizată dintr-o culoare GB veche. după cum puteți vedea, încă arată exact ca un băiat în față, dar în spate există un iPod! e bine dacă nu vrei să-ți fie furat ipod-ul, pentru că pare un băiat vechi, ciudat
Game Boy Color Cartridge Ilummination (GBC): 5 pași
Game Boy Color Cartridge Ilummination (GBC): Această instrucțiune arată cum să utilizați un LED pentru a ilumina un cartuș GBC