Obsah:

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

Video: IR-Remote Color Guessing Game: 3 kroky

Video: IR-Remote Color Guessing Game: 3 kroky
Video: Изучаем плагины в ChatGPT и прокачиваем бота на максимум 2024, Listopad
Anonim
IR-Remote Color Guessing Game
IR-Remote Color Guessing Game

V tomto pokynu vám ukážu, jak ovládat RGB LED pomocí IR dálkového ovladače a udělat z toho zábavnou hru!

Krok 1: Potřebné součásti

Potřebné díly
Potřebné díly

Díly, které budete pro tento projekt potřebovat, jsou:

- arduino one- RGB LED- IR-senzor

(počet LED závisí na hře, množství životů nebo)- 2 zelené LED diody- 1 žlutá LED- 1 oranžová LED- 3 červené LED diody

Krok 2: Kód

#zahrnout

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;

// zadání barev

int vstup = {-1, -1, -1}; int barva = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// generování barev

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

// herní proměnné

int rozdíl = 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é nastavení () {

Serial.begin (9600); unbcv.enableIRIn (); // spusťte přijímač pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

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

}

prázdná smyčka () {

if (unbcv.decode (& results)) // přijímá signály ze vzdáleného {Serial.println (results.value, DEC); // zobrazení signálů přijatých z každého stisknutého tlačítka ircv.resume (); // přijímání dalšího přepínače signálu (results.value) {// přeměňuje signály na čísla na tlačítkách a přiřazuje tlačítkům akce

pouzdro 109562864:

addWaarde (1); přestávka;

pouzdro 109562824:

addWaarde (2); přestávka;

pouzdro 109562856:

addWaarde (3); přestávka;

pouzdro 109562872:

addWaarde (4); přestávka;

pouzdro 109562820:

addWaarde (5); přestávka;

pouzdro 109562852:

addWaarde (6); přestávka;

pouzdro 109562868:

addWaarde (7); přestávka;

pouzdro 109562828:

addWaarde (8); přestávka;

pouzdro 109562860:

addWaarde (9); přestávka;

pouzdro 109562876:

addWaarde (0); přestávka;

case 109562818: // oud ding enter/R CLK

handleInput (); přestávka;

case 109562816: // oud ding power

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

případ 109562866: // lege knop midden

náhodná barva(); přestávka;

případ 109562830: // pijltje naar rechts

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

// přiřazení tlačítek na dálkovém ovládání pro ovládání barvy: tímto způsobem mohou hráči vidět, jak barvy vypadají a jak je kombinovat, // před spuštěním hry. switch (results.value) {case 109562840: rood = 255; přestávka;

pouzdro 109562844:

groen = 255; přestávka;

pouzdro 109562850:

blauw = 255; přestávka;

pouzdro 109562836:

rood = 0; groen = 0; blauw = 0; přestávka; }

}

analogWrite (redPin, abs (255 - rood)); // ovládání RGB LED: obráceně, protože moje je zapojeno obráceně.

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

// ovládání živých LED diod

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

// ovládání LED diod úrovně

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) {// přidání lisované hodnoty do seznamu

if (indexNumber == 3) {

vrátit se; }

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

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

void handleInput () {// vytvoří ze seznamu „waarde“(hodnotu)

waarde = abs (vstup [0] * 100 + vstup [1] * 10 + vstup [2]); vstup [0] = -1; // reset de signalen input [1] = -1; vstup [2] = -1;

indexNumber = 0;

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

void addColor (int waarde) {// přidání 3místného 'waarde' do seznamu

if (indexColor == 3) {

vrátit se; }

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

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

}

void randomColor () {// donutí světlo proměnit náhodnou barvu a uložit ji do proměnný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 () {// proměnit 'waarde' ze seznamu na 'Gok' (hádat) proměnné

roodGok = barva [0]; groenGok = barva [1]; blauwGok = barva [2]; // zkontrolujte, zda se proměnné Gok příliš liší skutečnou náhodnou barvou: pokud ano, zobrazte odhad na tři sekundy, blikněte zeleně a znovu změňte barvu, přidejte úroveň abd, zmenšte povolený rozdíl // pokud ne, zobrazte hádejte tři sekundy, červeně blikněte a odečtěte život // pokud jste mimo životy, hra se spustí znovu, pokud (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); zpoždění (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); zpoždění (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); zpoždění (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); náhodná barva(); levelNumber ++; rozdíl -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); zpoždění (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (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); zpoždění (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); zpoždění (100); resetEverything (); }

}

void resetColor () {// použití pro reset hodnot, pro špatné stisknutí nebo každý nový odhad (jen pro jistotu)

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

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// restart hry

barva [0] = -1; barva [1] = -1; barva [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 () {// použijte k zobrazení důležitých informací na sériovém monitoru

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: Stavět

Stavět
Stavět
Stavět
Stavět
Stavět
Stavět
Stavět
Stavět

Očividně chcete pro tento projekt pěknou sestavu. tato část je docela otevřená interpretaci, ale je třeba mít na paměti několik věcí: - Přední panel udržujte tenký, abyste přes něj mohli přilepit LED diody a IR přijímač stále funguje.

- ponechte v sestavě dostatek místa pro arduino a pájecí desku

- ujistěte se, že vzadu je otvor pro sílu arduina

Přidal jsem hrubé schéma zapojení.

Hodně štěstí a bav se!

Doporučuje: