2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Š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!