Turinys:

IR nuotolinis spalvų atspėjimo žaidimas: 3 žingsniai
IR nuotolinis spalvų atspėjimo žaidimas: 3 žingsniai

Video: IR nuotolinis spalvų atspėjimo žaidimas: 3 žingsniai

Video: IR nuotolinis spalvų atspėjimo žaidimas: 3 žingsniai
Video: Linijų, spalvų ir procentų žaidimas vaikams - Mokykla HEROJUS 2024, Lapkritis
Anonim
IR nuotolinis spalvų atspėjimo žaidimas
IR nuotolinis spalvų atspėjimo žaidimas

Š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

Reikalingos dalys
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

Statyti
Statyti
Statyti
Statyti
Statyti
Statyti
Statyti
Statyti

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: