Sisällysluettelo:

IR-Remote Color Guessing Game: 3 vaihetta
IR-Remote Color Guessing Game: 3 vaihetta

Video: IR-Remote Color Guessing Game: 3 vaihetta

Video: IR-Remote Color Guessing Game: 3 vaihetta
Video: Все о покраске валиком за 20 минут. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #32 2024, Heinäkuu
Anonim
IR-Remote Color Guessing Game
IR-Remote Color Guessing Game

Tässä ohjeessa näytän sinulle, kuinka hallita RGB-lediä IR-kaukosäätimellä ja tehdä siitä hauska peli!

Vaihe 1: Tarvittavat osat

Tarvittavat osat
Tarvittavat osat

Osat, joita tarvitset tähän projektiin, ovat:

- arduino one- RGB Led-IR-anturi

(ledien määrä riippuu pelistä, henkien määrästä tai)- 2 vihreää lediä- 1 keltainen led- 1 oranssi led- 3 punaista lediä

Vaihe 2: Koodi

#sisältää

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

int tasoPin1 = 2;

int tasoPin2 = 3; int tasoPin3 = 4; int tasoPin4 = 7;

int RECV_PIN = 11;

IRrecv irrecv (RECV_PIN); decode_results tulokset;

// syöttää värejä

int -tulo = {-1, -1, -1}; int väri = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// luoda värejä

int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;

// pelimuuttujat

int diff = 200;

int levelNumber = 1;

int -taso = {-1, -1, -1, -1};

int t = 0;

int taso1 = 255;

int taso2 = 0; int taso3 = 0; int taso4 = 0;

int elämää = 3;

int levens1 = 255; int levens2 = 255; int levens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

void setup () {

Sarja.alku (9600); irrecv.enableIRIn (); // Käynnistä vastaanotin pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);

}

void loop () {

if (irrecv.decode (& results)) // vastaanottaa signaalit kauko -ohjaimesta {Serial.println (results.value, DEC); // näyttää jokaisesta painetusta painikkeesta vastaanotetut signaalit irrecv.resume (); // vastaanottaa seuraavan signaalikytkimen (results.value) {// muuttaa signaalit painikkeiden numeroiksi ja määrittää painikkeille toimintoja

tapaus 109562864:

addWaarde (1); tauko;

tapaus 109562824:

addWaarde (2); tauko;

tapaus 109562856:

addWaarde (3); tauko;

tapaus 109562872:

addWaarde (4); tauko;

tapaus 109562820:

addWaarde (5); tauko;

tapaus 109562852:

addWaarde (6); tauko;

tapaus 109562868:

addWaarde (7); tauko;

tapaus 109562828:

addWaarde (8); tauko;

tapaus 109562860:

addWaarde (9); tauko;

tapaus 109562876:

addWaarde (0); tauko;

tapaus 109562818: // oud ding enter/R CLK

handleInput (); tauko;

tapaus 109562816: // oud ding power

kahvaVäri (); tauko; tapaus 109562878: // oud ding Cancel/L CLK resetColor (); tauko;

tapaus 109562866: // lege knop midden

randomColor (); tauko;

tapaus 109562830: // pijltje naar rechts

displayEverything (); tauko; tapaus 109562838: // esc -tapaus 109562822: // AV -lähteen nollausEverything (); tauko; }

// määritä kauko -ohjaimen painikkeet värin hallitsemiseksi: tällä tavalla pelaajat voivat nähdä miltä värit näyttävät ja miten ne yhdistetään, // ennen pelin aloittamista. kytkin (tulokset.arvo) {tapaus 109562840: rood = 255; tauko;

tapaus 109562844:

groen = 255; tauko;

tapaus 109562850:

blauw = 255; tauko;

tapaus 109562836:

rood = 0; groen = 0; blauw = 0; tauko; }

}

analogWrite (redPin, abs (255 - rood)); // RGB -ledin ohjaus: taaksepäin, koska omani on kytketty taaksepäin.

analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - musta));

// live -ledien hallinta

jos (elää == 2) {levens1 = 0; } jos (elää == 1) {levens2 = 0; } jos (elää == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// tason ledien hallinta

jos (levelNumber == 1) {level1 = 255; } jos (levelNumber == 2) {level1 = 255; taso2 = 255; } jos (levelNumber == 3) {level1 = 255; taso2 = 255; taso3 = 255; } jos (levelNumber == 4) {level1 = 255; taso2 = 255; taso3 = 255; taso4 = 255; } analogWrite (tasoPin1, taso1); analogWrite (tasoPin2, taso2); analogWrite (tasoPin3, taso3); analogWrite (tasoPin4, taso4);

}

void addWaarde (int -arvo) {// lisää painettu arvo luetteloon

jos (indeksinumero == 3) {

palata; }

jos (syöte [indeksinumero] == -1) {

input [indexNumber] = arvo; indeksinumero ++; }}

void handleInput () {// tee waarde (arvo) luettelosta

waarde = abs (tulo [0] * 100 + tulo [1] * 10 + tulo [2]); tulo [0] = -1; // signaalin tulon nollaus [1] = -1; tulo [2] = -1;

indeksinumero = 0;

Serial.print ("waarde opgeslagen:"); Sarja.println (waarde); addColor (waarde); }

void addColor (int waarde) {// lisää 3-numeroinen waarde luetteloon

jos (indexColor == 3) {

palata; }

jos (väri [indexColor] == -1) {

väri [indeksiväri] = waarde; if (väri [indeksin väri]> 255) {väri [indeksin väri] = 255; } indexColor ++; }

}

void randomColor () {// tee valosta satunnainen väri ja tallenna se muuttujiin

roodRandom = satunnainen (0, 255);

groenRandom = satunnainen (0, 255);

blauwRandom = satunnainen (0, 255);

rood = roodRandom;

groen = groenRandom; blauw = blauwRandom; Serial.print ("roodRandom ="); Sarja.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Sarja.println (blauwRandom);

}

void handleColor () {// muuttaa Waarden luettelosta Gok -arvaimiksi

roodGok = väri [0]; groenGok = väri [1]; blauwGok = väri [2]; // tarkista, eroavatko Gok -muuttujat liikaa todellisesta satunnaisesta väristä: jos on, näytä arvaus kolmen sekunnin ajan, vilkku vihreänä ja vaihda väri uudelleen, lisää taso ja pienennä sallittu ero // jos ei, näytä arvata kolme sekuntia, vilkkua punaisena ja vähentää elämä // jos olet poissa elämästä, peli alkaa uudelleen, jos (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (vihreäPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); viive (3000); analogWrite (redPin, 255); analogWrite (vihreäPin, 0); analogWrite (bluePin, 255); viive (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (300); analogWrite (redPin, 255); analogWrite (vihreäPin, 0); analogWrite (bluePin, 255); viive (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (300);

Serial.print ("roodGok =");

Sarja.println (roodGok); Serial.print ("groenGok ="); Sarja.println (groenGok); Serial.print ("blauwGok ="); Sarja.println (blauwGok); resetColor (); randomColor (); levelNumber ++; diff -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (vihreäPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); viive (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (300); Serial.print ("roodGok ="); Sarja.println (roodGok); Serial.print ("groenGok ="); Sarja.println (groenGok); Serial.print ("blauwGok ="); Sarja.println (blauwGok);

resetColor ();

elää-; } if (lives == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viive (100); resetEverything (); }

}

void resetColor () {// käytetään arvojen nollaamiseen, väärään painallukseen tai jokaiseen uuteen arvaukseen (varmuuden vuoksi)

väri [0] = -1; väri [1] = -1; väri [2] = -1;

indeksinumero = 0;

indexColor = 0; }

void resetEverything () {// käynnistä peli uudelleen

väri [0] = -1; väri [1] = -1; väri [2] = -1;

indeksinumero = 0;

indexColor = 0;

elämää = 3;

rood = 0; groen = 0; blauw = 0;

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

taso1 = 255;

taso2 = 0; taso3 = 0; taso4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// käytä tätä näyttääksesi tärkeät tiedot sarjamonitorissa

Serial.print ("roodGok ="); Sarja.println (roodGok); Serial.print ("groenGok ="); Sarja.println (groenGok); Serial.print ("blauwGok ="); Sarja.println (blauwGok); Serial.print ("roodRandom ="); Sarja.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Sarja.println (blauwRandom);

Serial.print ("rood =");

Sarja.println (rood); Serial.print ("groen ="); Sarja.println (groen); Serial.print ("blauw ="); Sarja.println (sininen);

Serial.print ("waarde opgeslagen:");

Sarja.println (waarde); }

Vaihe 3: Rakenna

Rakentaa
Rakentaa
Rakentaa
Rakentaa
Rakentaa
Rakentaa
Rakentaa
Rakentaa

Haluat ilmeisesti hyvän rakenteen tälle projektille. Tämä osa on melko avoin tulkinnalle, mutta tässä on pidettävä mielessä muutama asia: - pidä etupaneeli ohuena, jotta voit edelleen kiinnittää ledit sen läpi ja IR -vastaanotin toimii edelleen

- pidä rakennuksessa tarpeeksi tilaa arduinoa ja juotoslevyä varten

- Varmista, että takana on reikä arduinon teholle

Lisäsin karkean kaavion johdotukselle.

Onnea ja pidä hauskaa!

Suositeltava: