2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
U ovom uputstvu pokazat ću vam kako kontrolirati RGB LED pomoću daljinskog upravljača i od toga napraviti zabavnu igru!
Korak 1: Potrebni dijelovi
Dijelovi koji će vam trebati za ovaj projekt su:
- arduino jedan- RGB LED- IR-senzor
(broj LED dioda ovisi o igri, broju života ili)- 2 zelene LED diode- 1 žuta LED dioda- 1 narančasta LED dioda- 3 crvene LED diode
Korak 2: Kodiranje
#uključi
int redPin = 10;
int greenPin = 6; int bluePin = 5;
int levensPin1 = 8;
int levensPin2 = 9; int levensPin3 = 12;
int razinaPin1 = 2;
int razinaPin2 = 3; int razinaPin3 = 4; int razinaPin4 = 7;
int RECV_PIN = 11;
IRrecv unrecv (RECV_PIN); decode_results rezultate;
// unos boja
int input = {-1, -1, -1}; int boja = {-1, -1, -1};
int indexNumber = 0;
int indexColor = 0;
int waarde = 0;
int rood = 0;
int groen = 0; int blauw = 0;
// generiranje boja
int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;
// varijable igre
int razlika = 200;
int levelNumber = 1;
int razina = {-1, -1, -1, -1};
int t = 0;
int razina1 = 255;
int razina2 = 0; int razina3 = 0; int razina4 = 0;
int životi = 3;
int levens1 = 255; int levens2 = 255; int levens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
void setup () {
Serial.begin (9600); unrecv.enableIRIn (); // pokrećemo prijemnik pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);
pinMode (levensPin1, OUTPUT);
pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);
}
void loop () {{100} {101}
if (unrecv.decode (& results)) // prima signale s udaljenog {Serial.println (results.value, DEC); // prikazuje signale primljene od svake pritisnute tipke unrecv.resume (); // prima sljedeći signalni prekidač (results.value) {// pretvara signale u brojeve na gumbima i dodjeljuje radnje gumbima
slučaj 109562864:
addWaarde (1); pauza;
slučaj 109562824:
addWaarde (2); pauza;
slučaj 109562856:
addWaarde (3); pauza;
slučaj 109562872:
addWaarde (4); pauza;
slučaj 109562820:
addWaarde (5); pauza;
slučaj 109562852:
addWaarde (6); pauza;
slučaj 109562868:
addWaarde (7); pauza;
slučaj 109562828:
addWaarde (8); pauza;
slučaj 109562860:
addWaarde (9); pauza;
slučaj 109562876:
addWaarde (0); pauza;
case 109562818: // oud ding enter/R CLK
handleInput (); pauza;
case 109562816: // oud ding power
handleColor (); pauza; case 109562878: // oud ding cancel/L CLK resetColor (); pauza;
slučaj 109562866: // lege knop midden
randomColor (); pauza;
slučaj 109562830: // pijltje naar rechts
displayEverything (); pauza; case 109562838: // esc case 109562822: // Resetiranje AV izvoraEverything (); pauza; }
// dodijelite gumbe na daljinskom upravljaču za kontrolu boje: na ovaj način igrači mogu vidjeti kako boje izgledaju i kako ih kombinirati, // prije početka igre. prekidač (rezultati.vrijednost) {slučaj 109562840: rood = 255; pauza;
slučaj 109562844:
groen = 255; pauza;
slučaj 109562850:
blauw = 255; pauza;
slučaj 109562836:
rood = 0; groen = 0; blauw = 0; pauza; }
}
analogWrite (redPin, aps (255 - rood)); // upravljanje RGB LED: obrnuto, jer je moja ožičena obrnuto.
analogWrite (greenPin, aps (255 - groen)); analogWrite (bluePin, aps (255 - blauw));
// kontroliranje živih LED dioda
if (životi == 2) {levens1 = 0; } if (životi == 1) {levens2 = 0; } if (životi == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// kontroliranje LED dioda
if (broj razine == 1) {razina1 = 255; } if (broj razine == 2) {razina1 = 255; razina2 = 255; } if (broj razine == 3) {razina1 = 255; razina2 = 255; razina3 = 255; } if (broj razine == 4) {razina1 = 255; razina2 = 255; razina3 = 255; razina4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);
}
void addWaarde (int vrijednost) {// dodaj pritisnutu vrijednost na popis
if (indeksni broj == 3) {
povratak; }
if (unos [indeksni broj] == -1) {
input [indexNumber] = vrijednost; indexNumber ++; }}
void handleInput () {// napravi 'waarde' (vrijednost) s popisa
waarde = abs (ulaz [0] * 100 + ulaz [1] * 10 + ulaz [2]); ulaz [0] = -1; // reset de signalen input [1] = -1; ulaz [2] = -1;
indexNumber = 0;
Serial.print ("waarde opgeslagen:"); Serijski.println (waarde); addColor (waarde); }
void addColor (int waarde) {// dodaje troznamenkasti 'waarde' na popis
if (indexColor == 3) {
povratak; }
if (boja [indexColor] == -1) {
boja [indexColor] = boja; if (boja [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }
}
void randomColor () {// natjera svjetlo da dobije nasumičnu boju i spremi ga u varijable
roodRandom = slučajno (0, 255);
groenRandom = slučajno (0, 255);
blauwRandom = slučajno (0, 255);
rood = roodRandom;
groen = groenSlučajno; blauw = blauwSlučajno; Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);
}
void handleColor () {// pretvorite 'waarde' sa popisa u 'Gok' (pogodi) varijable
roodGok = boja [0]; groenGok = boja [1]; blauwGok = boja [2]; // provjeravamo razlikuju li se varijable Gok previše od stvarne slučajne boje: ako je tako, prikažite pogađanje tri sekunde, trepćite zeleno i ponovno promijenite boju, dodajte razinu abd učinite dopuštenu razliku manjom // ako nije, prikažite pogađajte tri sekunde, trepćite crveno i oduzmite život // ako ste izvan života, igra počinje ponovo ako (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, aps (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); kašnjenje (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); kašnjenje (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); kašnjenje (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (300);
Serial.print ("roodGok =");
Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serijski.println (blauwGok); resetColor (); randomColor (); levelNumber ++; razlika -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, aps (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); kašnjenje (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serijski.println (blauwGok);
resetColor ();
živi--; } if (životi == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); resetEverything (); }
}
void resetColor () {// koristi se za poništavanje vrijednosti, za pogrešan pritisak ili svako novo pogađanje (samo radi sigurnosti)
boja [0] = -1; boja [1] = -1; boja [2] = -1;
indexNumber = 0;
indexColor = 0; }
void resetEverything () {// ponovno pokrenite igru
boja [0] = -1; boja [1] = -1; boja [2] = -1;
indexNumber = 0;
indexColor = 0;
životi = 3;
rood = 0; groen = 0; blauw = 0;
roodRandom = 0;
groenRandom = 0; blauwRandom = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
razina1 = 255;
razina2 = 0; razina3 = 0; razina4 = 0;
broj razine = 1;
t = 0;
}
void displayEverything () {// koristite ovo za prikaz važnih informacija na serijskom monitoru
Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serijski.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 ="); Serijski.println (groen); Serial.print ("blauw ="); Serijski.println (blauw);
Serial.print ("waarde opgeslagen:");
Serijski.println (waarde); }
Korak 3: Izgradite
Očito želite lijepu gradnju za ovaj projekt. ovaj dio je prilično otvoren za tumačenje, ali imajte na umu neke stvari: - neka prednja ploča ostane tanka, tako da i dalje možete provlačiti LED diode kroz nju, a IR prijemnik i dalje radi
- zadržite dovoljno prostora u izgradnji za arduino i ploču za lemljenje
- pobrinite se da postoji stražnja rupa za snagu arduina
Dodao sam grubu shemu ožičenja.
Sretno i zabavi se!