Obsah:

IR-Remote Hra na odhadovanie farieb: 3 kroky
IR-Remote Hra na odhadovanie farieb: 3 kroky

Video: IR-Remote Hra na odhadovanie farieb: 3 kroky

Video: IR-Remote Hra na odhadovanie farieb: 3 kroky
Video: 24 HOURS WITH TRIBES IN THAILAND 🇹🇭 (Shocking) 2024, November
Anonim
IR-Remote hra na odhadovanie farieb
IR-Remote hra na odhadovanie farieb

V tomto návode vám ukážem, ako ovládať RGB LED diódu pomocou IR diaľkového ovládača a urobiť z toho zábavnú hru!

Krok 1: Potrebné diely

Potrebné diely
Potrebné diely

Časti, ktoré budete potrebovať pre tento projekt, sú:

- arduino one- RGB LED- IR-senzor

(počet LED diód závisí od hry, počtu životov alebo)- 2 zelené LED diódy- 1 žltá LED- 1 oranžová LED- 3 červené LED diódy

Krok 2: Kód

#zahrnúť

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

int úroveňPin1 = 2;

int úroveňPin2 = 3; int úroveňPin3 = 4; int úroveňPin4 = 7;

int RECV_PIN = 11;

IRrecv unbcv (RECV_PIN); decode_results výsledky;

// zadanie farieb

int vstup = {-1, -1, -1}; vnútorná farba = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// generovanie farieb

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

// herné premenné

int rozdiel = 200;

int levelNumber = 1;

int úroveň = {-1, -1, -1, -1};

int t = 0;

int úroveň1 = 255;

int úroveň2 = 0; int úroveň3 = 0; int úroveň4 = 0;

int životy = 3;

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

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

neplatné nastavenie () {

Serial.begin (9600); unbcv.enableIRIn (); // spustenie prijímača pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

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

}

prázdna slučka () {

if (unbcv.decode (& results)) // prijíma signály zo vzdialeného {Serial.println (results.value, DEC); // zobrazenie signálov prijatých z každého stlačeného tlačidla ircc.resume (); // príjem prepínača ďalšieho signálu (results.value) {// premena signálov na čísla na tlačidlách a priradenie akcií tlačidlám

prípad 109562864:

addWaarde (1); prestávka;

prípad 109562824:

addWaarde (2); prestávka;

prípad 109562856:

addWaarde (3); prestávka;

prípad 109562872:

addWaarde (4); prestávka;

prípad 109562820:

addWaarde (5); prestávka;

prípad 109562852:

addWaarde (6); prestávka;

prípad 109562868:

addWaarde (7); prestávka;

prípad 109562828:

addWaarde (8); prestávka;

prípad 109562860:

addWaarde (9); prestávka;

prípad 109562876:

addWaarde (0); prestávka;

prípad 109562818: // oud ding enter/R CLK

handleInput (); prestávka;

prípad 109562816: // oud ding power

handleColor (); prestávka; case 109562878: // oud ding cancel/L CLK resetColor (); prestávka;

prípad 109562866: // lege knop midden

randomColor (); prestávka;

prípad 109562830: // pijltje naar rechts

displayEverything (); prestávka; case 109562838: // esc case 109562822: // AV source resetEverything (); prestávka; }

// priradenie tlačidiel na diaľkovom ovládači na ovládanie farieb: hráči tak môžu vidieť, ako farby vyzerajú a ako ich kombinovať, // pred spustením hry. prepínač (results.value) {prípad 109562840: rood = 255; prestávka;

prípad 109562844:

groen = 255; prestávka;

prípad 109562850:

blauw = 255; prestávka;

prípad 109562836:

rood = 0; groen = 0; blauw = 0; prestávka; }

}

analogWrite (redPin, abs (255 - rood)); // ovládanie RGB LED: opačne, pretože moje je zapojené opačne.

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

// ovládanie živých LED diód

ak (žije == 2) {levens1 = 0; } if (žije == 1) {levens2 = 0; } if (žije == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// ovládanie LED diód úrovne

if (levelNumber == 1) {level1 = 255; } if (levelNumber == 2) {level1 = 255; úroveň2 = 255; } if (levelNumber == 3) {level1 = 255; úroveň2 = 255; úroveň3 = 255; } if (levelNumber == 4) {level1 = 255; úroveň2 = 255; úroveň3 = 255; úroveň4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (int hodnota) {// pridanie lisovanej hodnoty do zoznamu

if (indexNumber == 3) {

návrat; }

if (input [indexNumber] == -1) {

vstup [indexNumber] = hodnota; indexNumber ++; }}

void handleInput () {// urobí 'waarde' (hodnotu) zo zoznamu

waarde = abs (vstup [0] * 100 + vstup [1] * 10 + vstup [2]); vstup [0] = -1; // reset vstupného signálu [1] = -1; vstup [2] = -1;

indexNumber = 0;

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

void addColor (int waarde) {// pridanie trojciferného „waarde“do zoznamu

if (indexColor == 3) {

návrat; }

if (farba [indexColor] == -1) {

farba [indexColor] = waarde; if (farba [indexColor]> 255) {farba [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// urobí zo svetla náhodnú farbu a uloží ho do premenných

roodRandom = náhodný (0, 255);

groenRandom = náhodný (0, 255);

blauwRandom = náhodný (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 () {// zmení „waarde“zo zoznamu na „gok“(hádajte) premenné

roodGok = farba [0]; groenGok = farba [1]; blauwGok = farba [2]; // skontrolujte, či sa premenné Gok príliš líšia skutočnou náhodnou farbou: ak áno, zobrazte odhad na tri sekundy, blikajte zelenou farbou a znova zmeňte farbu, pridajte úroveň a zmenšite povolený rozdiel // ak nie, zobrazte hádajte tri sekundy, červeno blikajte a odpočítajte život // ak ste mimo života, hra sa začne znova, ak (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); oneskorenie (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); oneskorenie (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); oneskorenie (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; rozdiel -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); oneskorenie (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

životy--; } if (lives == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); oneskorenie (100); resetVšetko (); }

}

void resetColor () {// použite na resetovanie hodnôt, na nesprávne stlačenie alebo každý nový odhad (len pre istotu)

farba [0] = -1; farba [1] = -1; farba [2] = -1;

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// reštart hry

farba [0] = -1; farba [1] = -1; farba [2] = -1;

indexNumber = 0;

indexColor = 0;

životy = 3;

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

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

úroveň1 = 255;

úroveň2 = 0; úroveň3 = 0; úroveň4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// slúži na zobrazenie dôležitých informácií na sériovom monitore

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); }

Krok 3: Zostavte

Stavať
Stavať
Stavať
Stavať
Stavať
Stavať
Stavať
Stavať

Očividne chcete pre tento projekt peknú zostavu. Táto časť je celkom otvorená interpretácii, ale je potrebné mať na pamäti niekoľko vecí: - Predný panel udržujte tenký, aby ste cez neho stále mohli zasunúť diódy a infračervený prijímač stále funguje.

- v zostave ponechajte dostatok miesta pre arduino a spájkovaciu dosku

- uistite sa, že v zadnej časti je otvor pre silu arduina

Pridal som hrubú schému zapojenia.

Veľa šťastia a zabav sa!

Odporúča: