Съдържание:

IR-Remote Color Guessing Game: 3 стъпки
IR-Remote Color Guessing Game: 3 стъпки

Видео: IR-Remote Color Guessing Game: 3 стъпки

Видео: IR-Remote Color Guessing Game: 3 стъпки
Видео: BIGFOOT - SASQUATCH - Mysteries with a History 2024, Ноември
Anonim
IR-Remote Color Guessing Game
IR-Remote Color Guessing Game

В тази инструкция ще ви покажа как да управлявате RGB светодиод с помощта на IR дистанционно и да направите забавна игра от него!

Стъпка 1: Необходими части

Необходими части
Необходими части

Частите, които ще ви трябват за този проект, са:

- arduino one- RGB Led- IR-сензор

(броят на светодиодите зависи от играта, количеството животи или)- 2 зелени светодиода- 1 жълт светодиод- 1 оранжев светодиод- 3 червени светодиода

Стъпка 2: Код

#включва

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

int нивоPin1 = 2;

int нивоPin2 = 3; int нивоPin3 = 4; int нивоPin4 = 7;

int RECV_PIN = 11;

IRrecv unrecv (RECV_PIN); decode_results резултати;

// въвеждане на цветове

int вход = {-1, -1, -1}; int цвят = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// генериране на цветове

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

// игрални променливи

int diff = 200;

int levelNumber = 1;

int ниво = {-1, -1, -1, -1};

int t = 0;

int ниво1 = 255;

int ниво2 = 0; int ниво3 = 0; int ниво4 = 0;

int живота = 3;

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

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

void setup () {

Serial.begin (9600); unrecv.enableIRIn (); // стартиране на приемника pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

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

}

void loop () {

if (unrecv.decode (& results)) // приема сигналите от дистанционното {Serial.println (results.value, DEC); // показва сигналите, получени от всеки натиснат бутон unrecv.resume (); // получавам следващ превключвател на сигнала (results.value) {// превръщам сигналите в цифрите на бутоните и възлагам действия на бутоните

дело 109562864:

addWaarde (1); прекъсване;

дело 109562824:

addWaarde (2); прекъсване;

дело 109562856:

addWaarde (3); прекъсване;

дело 109562872:

addWaarde (4); прекъсване;

дело 109562820:

addWaarde (5); прекъсване;

дело 109562852:

addWaarde (6); прекъсване;

дело 109562868:

addWaarde (7); прекъсване;

дело 109562828:

addWaarde (8); прекъсване;

дело 109562860:

addWaarde (9); прекъсване;

дело 109562876:

addWaarde (0); прекъсване;

случай 109562818: // oud ding enter/R CLK

handleInput (); прекъсване;

case 109562816: // oud ding power

handleColor (); прекъсване; case 109562878: // отмяна на oud/L CLK resetColor (); прекъсване;

случай 109562866: // легенда knop midden

randomColor (); прекъсване;

случай 109562830: // pijltje naar rechts

displayEverything (); прекъсване; case 109562838: // esc case 109562822: // Възстановяване на AV източникаEverything (); прекъсване; }

// присвояване на бутони на дистанционното за управление на цвета: по този начин играчите могат да видят как изглеждат цветовете и как да ги комбинират, // преди да започнете игра. ключ (results.value) {случай 109562840: rood = 255; прекъсване;

дело 109562844:

groen = 255; прекъсване;

дело 109562850:

blauw = 255; прекъсване;

дело 109562836:

rood = 0; groen = 0; blauw = 0; прекъсване; }

}

analogWrite (redPin, abs (255 - rood)); // контролиране на RGB LED: обратно, защото моят е свързан обратно.

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

// контролиране на живи светодиоди

if (животи == 2) {levens1 = 0; } if (животи == 1) {levens2 = 0; } if (животи == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// контролиране на светодиодите за ниво

if (номер на ниво == 1) {ниво1 = 255; } if (levelNumber == 2) {level1 = 255; ниво2 = 255; } if (ниво на номер == 3) {ниво1 = 255; ниво2 = 255; ниво3 = 255; } if (levelNumber == 4) {level1 = 255; ниво2 = 255; ниво3 = 255; ниво4 = 255; } analogWrite (levelPin1, ниво1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (int value) {// добавяне на натисната стойност към списъка

if (indexNumber == 3) {

връщане; }

if (въвеждане [indexNumber] == -1) {

вход [индекс] = стойност; indexNumber ++; }}

void handleInput () {// прави 'waarde' (стойност) от списъка

waarde = abs (вход [0] * 100 + вход [1] * 10 + вход [2]); вход [0] = -1; // нулиране на сигнален вход [1] = -1; вход [2] = -1;

indexNumber = 0;

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

void addColor (int waarde) {// добавя 3-цифрения „waarde“към списък

if (indexColor == 3) {

връщане; }

if (цвят [indexColor] == -1) {

цвят [indexColor] = waarde; ако (цвят [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// кара светлината да превръща случаен цвят и да я записва в променливи

roodRandom = случаен (0, 255);

groenRandom = случаен (0, 255);

blauwRandom = случаен (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 () {// превърнете „waarde“от списъка в „Gok“(предполагам) променливи

roodGok = цвят [0]; groenGok = цвят [1]; blauwGok = цвят [2]; // проверяваме дали променливите Gok се различават твърде много от реалния случаен цвят: ако е така, покажете предположението за три секунди, премигвайте в зелено и променете цвета отново, добавете ниво abd, намалете разрешената разлика // ако не, покажете познайте за три секунди, мигнете червено и извадете живот // ако сте извън живота, играта започва отново, ако (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); забавяне (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); забавяне (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); забавяне (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; разница -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); забавяне (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

живота-; } if (животи == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); забавяне (100); resetEverything (); }

}

void resetColor () {// използвайте за нулиране на стойности, за грешно натискане или всяко ново предположение (само за сигурност)

цвят [0] = -1; цвят [1] = -1; цвят [2] = -1;

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// рестартирайте играта

цвят [0] = -1; цвят [1] = -1; цвят [2] = -1;

indexNumber = 0;

indexColor = 0;

животи = 3;

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

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

ниво1 = 255;

ниво2 = 0; ниво3 = 0; ниво4 = 0;

нивоNumber = 1;

t = 0;

}

void displayEverything () {// използвайте това за показване на важна информация на серийния монитор

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: Изградете

Изграждане
Изграждане
Изграждане
Изграждане
Изграждане
Изграждане
Изграждане
Изграждане

Очевидно искате хубава конструкция за този проект. тази част е доста отворена за тълкуване, но има някои неща, които трябва да имате предвид с това: - дръжте предния панел тънък, така че все още можете да прокарате светодиодите през него и инфрачервеният приемник все още работи

- запазете достатъчно място в конструкцията за arduino и дъска за запояване

- уверете се, че има дупка в гърба за силата на arduino

Добавих груба схема за окабеляване.

Късмет и се забавлявай!

Препоръчано: