Turinys:
Video: IR nuotolinis spalvų atspėjimo žaidimas: 3 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Šioje pamokoje aš jums parodysiu, kaip valdyti RGB šviesos diodą naudojant IR nuotolinio valdymo pultą ir padaryti iš to įdomų žaidimą!
1 žingsnis: reikalingos dalys
Šiam projektui reikalingos dalys:
- arduino one- RGB LED- IR jutiklis
(LED skaičius priklauso nuo žaidimo, gyvybių skaičiaus ar)- 2 žalios šviesos diodai- 1 geltona lemputė- 1 oranžinė lemputė- 3 raudonos lemputės
2 žingsnis: kodas
#įtraukti
int redPin = 10;
int greenPin = 6; int bluePin = 5;
int levensPin1 = 8;
int levensPin2 = 9; int levensPin3 = 12;
int lygisPin1 = 2;
int lygisPin2 = 3; int lygisPin3 = 4; int lygisPin4 = 7;
int RECV_PIN = 11;
IRrecv irrecv (RECV_PIN); decode_results rezultatai;
// įvesties spalvos
int įvestis = {-1, -1, -1}; int spalva = {-1, -1, -1};
int indeksasSkaičius = 0;
int indexColor = 0;
int waarde = 0;
int rood = 0;
int groen = 0; int blauw = 0;
// generuoti spalvas
int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;
// žaidimo kintamieji
int skirtumas = 200;
int levelNumber = 1;
int lygis = {-1, -1, -1, -1};
int t = 0;
int lygis1 = 255;
int lygis2 = 0; int lygis3 = 0; int lygis4 = 0;
int gyvenimai = 3;
int levens1 = 255; int levens2 = 255; int levens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
void setup () {
Serial.begin (9600); irrecv.enableIRIn (); // paleisti imtuvą pinMode (redPin, OUTPUT); „pinMode“(žalias „Pin“, OUTPUT); pinMode („bluePin“, OUTPUT);
pinMode (levensPin1, OUTPUT);
pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);
}
void loop () {
if (irrecv.decode (& results)) // gauti signalus iš nuotolinio valdymo pulto {Serial.println (results.value, DEC); // rodyti signalus, gautus iš kiekvieno paspausto mygtuko irrecv.resume (); // gauti kitą signalo jungiklį (results.value) {// paversti signalus mygtukų skaičiais ir priskirti veiksmus mygtukams
byla 109562864:
addWaarde (1); pertrauka;
atvejis 109562824:
addWaarde (2); pertrauka;
byla 109562856:
addWaarde (3); pertrauka;
byla 109562872:
addWaarde (4); pertrauka;
atvejis 109562820:
addWaarde (5); pertrauka;
byla 109562852:
addWaarde (6); pertrauka;
byla 109562868:
addWaarde (7); pertrauka;
byla 109562828:
addWaarde (8); pertrauka;
atvejis 109562860:
addWaarde (9); pertrauka;
byla 109562876:
addWaarde (0); pertrauka;
atvejis 109562818: // oud ding enter/R CLK
handleInput (); pertrauka;
atvejis 109562816: // oud ding power
rankenaColor (); pertrauka; atvejis 109562878: // oud ding cancel/L CLK resetColor (); pertrauka;
atvejis 109562866: // lege knop midden
randomColor (); pertrauka;
byla 109562830: // pijltje naar rechts
displayEverything (); pertrauka; atvejis 109562838: // esc atvejis 109562822: // AV šaltinio nustatymas iš naujo (viskas) (); pertrauka; }
// priskirti mygtukus nuotolinio valdymo pulte spalvai valdyti: taip žaidėjai gali matyti, kaip spalvos atrodo ir kaip jas derinti, // prieš pradedant žaidimą. jungiklis (rezultatai.value) {atvejis 109562840: rood = 255; pertrauka;
byla 109562844:
groenas = 255; pertrauka;
atvejis 109562850:
blauw = 255; pertrauka;
atvejis 109562836:
rood = 0; groenas = 0; blauw = 0; pertrauka; }
}
analogWrite (redPin, abs (255 - rood)); // valdantis RGB LED: atvirkščiai, nes mano yra prijungtas atvirkščiai.
analogWrite (žaliasPin, abs (255 - groen)); analogWrite („bluePin“, abs (255 - blauw));
// tiesioginių šviesos diodų valdymas
jei (gyvena == 2) {levens1 = 0; } jei (gyvena == 1) {levens2 = 0; } jei (gyvena == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// kontroliuoti lygio diodus
if (levelNumber == 1) {level1 = 255; } if (levelNumber == 2) {level1 = 255; 2 lygis = 255; } if (levelNumber == 3) {level1 = 255; 2 lygis = 255; 3 lygis = 255; } if (levelNumber == 4) {level1 = 255; 2 lygis = 255; 3 lygis = 255; 4 lygis = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);
}
void addWaarde (int value) {// pridėkite spaudžiamą vertę prie sąrašo
jei (indekso numeris == 3) {
grįžti; }
if (įvestis [indekso numeris] == -1) {
input [indexNumber] = vertė; indexNumber ++; }}
void handleInput () {// iš sąrašo padarykite „waarde“(reikšmę)
waarde = abs (įvestis [0] * 100 + įvestis [1] * 10 + įvestis [2]); įvestis [0] = -1; // iš naujo nustatyti signalo įvestį [1] = -1; įvestis [2] = -1;
indeksasSkaičius = 0;
Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (waarde); }
void addColor (int waarde) {// prie sąrašo pridėkite 3 skaitmenų „waarde“
if (indexColor == 3) {
grįžti; }
if (spalva [indexColor] == -1) {
spalva [indekso spalva] = waarde; if (spalva [indekso spalva]> 255) {spalva [indekso spalva] = 255; } indexColor ++; }
}
void randomColor () {// kad šviesa įgautų atsitiktinę spalvą ir išsaugotų ją kintamaisiais
roodRandom = atsitiktinis (0, 255);
groenRandom = atsitiktinis (0, 255);
blauwRandom = atsitiktinis (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 () {// paverskite „waarde“iš sąrašo į „Gok“(atspėti) kintamuosius
roodGok = spalva [0]; groenGok = spalva [1]; blauwGok = spalva [2]; // patikrinkite, ar „Gok“kintamieji per daug skiriasi nuo tikrosios atsitiktinės spalvos: jei taip, tris sekundes rodykite spėjimą, mirksėkite žaliai ir vėl pakeiskite spalvą, pridėkite lygį, kad leistinas skirtumas būtų mažesnis // jei ne, rodykite atspėk tris sekundes, mirksėk raudonai ir atimk gyvybę // jei tau negyvena, žaidimas prasideda iš naujo, jei (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (žaliasPin, abs (255 - groenGok)); analogWrite („bluePin“, abs (255 - „blauwGok“)); vėlavimas (3000); analogWrite (redPin, 255); analogWrite (žaliasPin, 0); analogWrite („bluePin“, 255); vėlavimas (300); analogWrite (redPin, 255); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (300); analogWrite (redPin, 255); analogWrite (žaliasPin, 0); analogWrite („bluePin“, 255); vėlavimas (300); analogWrite (redPin, 255); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (300);
Serial.print ("roodGok =");
Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; skirtumas -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (žaliasPin, abs (255 - groenGok)); analogWrite („bluePin“, abs (255 - „blauwGok“)); vėlavimas (3000); analogWrite (redPin, 0); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (300); analogWrite (redPin, 255); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (300); analogWrite (redPin, 0); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (300); analogWrite (redPin, 255); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);
resetColor ();
gyvena-; } if (gyvena == 0) {analogWrite (redPin, 0); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (100); analogWrite (redPin, 255); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (100); analogWrite (redPin, 0); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (100); analogWrite (redPin, 255); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (100); analogWrite (redPin, 0); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (100); analogWrite (redPin, 255); analogWrite (žaliasPin, 255); analogWrite („bluePin“, 255); vėlavimas (100); resetEverything (); }
}
void resetColor () {// naudoti iš naujo nustatant reikšmes, neteisingai spaudžiant ar kiekvieną naują spėjimą (tik dėl aiškumo)
spalva [0] = -1; spalva [1] = -1; spalva [2] = -1;
indeksasSkaičius = 0;
indexColor = 0; }
void resetEverything () {// iš naujo paleiskite žaidimą
spalva [0] = -1; spalva [1] = -1; spalva [2] = -1;
indeksasSkaičius = 0;
indexColor = 0;
gyvenimai = 3;
rood = 0; groenas = 0; blauw = 0;
roodRandom = 0;
groenRandom = 0; blauwRandom = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
1 lygis = 255;
2 lygis = 0; 3 lygis = 0; 4 lygis = 0;
levelNumber = 1;
t = 0;
}
void displayEverything () {// naudokite tai norėdami parodyti svarbią informaciją nuosekliajame monitoriuje
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); }
3 žingsnis: statykite
Akivaizdu, kad norite gražaus projekto. ši dalis yra gana atvira interpretacijai, tačiau reikia nepamiršti kai kurių dalykų: - laikykite ploną priekinį skydelį, kad vis tiek galėtumėte perkišti savo lemputes ir IR imtuvas vis tiek veiks
- konstrukcijoje palikite pakankamai vietos arduino ir lituokliui
- įsitikinkite, kad gale yra skylė arduino galiai
Pridėjau apytikslę laidų schemą.
Sėkmės ir pasilinksmink!
Rekomenduojamas:
„Octarine“: spalvų derinimo žaidimas su WS2812 RGB šviesos diodais: 6 žingsniai
„Octarine“: spalvų derinimo žaidimas su WS2812 RGB šviesos diodais: „Octarine“, magijos spalva. Jis buvo gyvas ir švytėjo gyvybingai, ir tai buvo neabejotinas vaizduotės pigmentas, nes kur jis bebūtų, tai buvo ženklas, kad tik materija yra stebuklingo proto galių tarnas. Tai buvo kerintys
Simono žaidimas - įdomus žaidimas!: 5 žingsniai
Simono žaidimas - įdomus žaidimas!: Nuoroda: čia Laikas mums treniruoti smegenis, ar ne? Be tų nuobodžių ir beprasmių žaidimų, yra žaidimas „Simono žaidimas“
Paprastas atspėjimo žaidimas - „Python + XBees“+ „Arduino“: 10 žingsnių
Paprastas atspėjimo žaidimas - „Python“+ „XBees“+ „Arduino“: Štai kaip veikia žaidimas: Turite 4 bandymus atspėti raidę tarp „a“- „h“- > Atspėk teisingą raidę: tu laimėsi! ?-> Atspėk klaidingą raidę: žaidimas baigtas?-> Atspėk bet kurį kitą personažą, esantį už „a“- „h“ribų: žaidimas baigtas? Jūsų „Arduino“leis jums
Python atspėjimo žaidimas: 9 žingsniai
„Python Guessing Game“: šiose instrukcijose pateikiamos žingsnis po žingsnio instrukcijos, kaip parašyti programą naudojant atsitiktinį modulį ir sukurti atspėjimo žaidimą, kuris sąveikauja su vartotoju. Norėdami pradėti, kompiuteryje turite įdiegti „python“ir taip pat veikti
„Spalvų atitikimas“(refleksinis žaidimas): 4 žingsniai
„Spalvų atitikimas“(refleksinis žaidimas): Įvadas: Savo mokyklos projektui aš nežinojau, ką daryti, bet šiek tiek pagalvojęs nusprendžiau padaryti refleksinį žaidimą. Galų gale mes esame žaidimų mokykla. Turėjome sukurti kažką interaktyvaus ir unikalaus, todėl žaidimas būtų tobulas! Džiaugiuosi, kaip viskas