Sadržaj:

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

Video: IR-Remote Color Guessing Game: 3 koraka

Video: IR-Remote Color Guessing Game: 3 koraka
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Juli
Anonim
IR-daljinsko igra pogađanja boja
IR-daljinsko igra pogađanja boja

U ovom uputstvu ću vam pokazati kako kontrolirati RGB LED pomoću daljinskog upravljača i od toga napraviti zabavnu igru!

Korak 1: Potrebni dijelovi

Potrebni dijelovi
Potrebni dijelovi

Dijelovi koji će vam trebati za ovaj projekt su:

- arduino jedan- RGB LED- IR-senzor

(broj LED dioda ovisi o igri, količini života ili)- 2 zelene LED diode- 1 žuta LED dioda- 1 narančasta LED dioda- 3 crvene LED diode

Korak 2: Kodirajte

#include

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

int levelPin1 = 2;

int levelPin2 = 3; int levelPin3 = 4; int levelPin4 = 7;

int RECV_PIN = 11;

IRrecv unrecv (RECV_PIN); decode_results rezultati;

// unos boja

int input = {-1, -1, -1}; int boja = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// generiranje boja

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

// varijable igre

int diff = 200;

int levelNumber = 1;

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

int t = 0;

int nivo1 = 255;

int level2 = 0; int nivo3 = 0; int level4 = 0;

int životi = 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 (); // pokrećemo prijemnik pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

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

}

void loop () {{100} {101}

if (unrecv.decode (& results)) // prima signale sa udaljenog {Serial.println (results.value, DEC); // prikazuje signale primljene od svakog pritisnutog dugmeta unrecv.resume (); // prima sljedeći signalni prekidač (results.value) {// pretvara signale u brojeve na gumbima i dodjeljuje radnje gumbima

slučaj 109562864:

addWaarde (1); break;

slučaj 109562824:

addWaarde (2); break;

slučaj 109562856:

addWaarde (3); break;

slučaj 109562872:

addWaarde (4); break;

slučaj 109562820:

addWaarde (5); break;

slučaj 109562852:

addWaarde (6); break;

slučaj 109562868:

addWaarde (7); break;

slučaj 109562828:

addWaarde (8); break;

slučaj 109562860:

addWaarde (9); break;

slučaj 109562876:

addWaarde (0); break;

case 109562818: // oud ding enter/R CLK

handleInput (); break;

case 109562816: // oud ding power

handleColor (); break; case 109562878: // oud ding cancel/L CLK resetColor (); break;

case 109562866: // lege knop midden

randomColor (); break;

case 109562830: // pijltje naar rechts

displayEverything (); break; case 109562838: // esc case 109562822: // Resetovanje AV izvoraEverything (); break; }

// dodijelite tipke na daljinskom upravljaču za kontrolu boje: na ovaj način igrači mogu vidjeti kako boje izgledaju i kako ih kombinirati, // prije početka igre. switch (results.value) {case 109562840: rood = 255; break;

slučaj 109562844:

groen = 255; break;

slučaj 109562850:

blauw = 255; break;

slučaj 109562836:

rood = 0; groen = 0; blauw = 0; break; }

}

analogWrite (redPin, abs (255 - rood)); // kontrola RGB LED diode: obrnuto, jer je moja ožičena obrnuto.

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

// kontrola LED dioda

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

// kontrola nivoa LED dioda

if (broj nivoa == 1) {nivo1 = 255; } if (broj nivoa == 2) {nivo1 = 255; nivo2 = 255; } if (broj nivoa == 3) {nivo1 = 255; nivo2 = 255; nivo3 = 255; } if (broj nivoa == 4) {nivo1 = 255; nivo2 = 255; nivo3 = 255; nivo4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (int vrijednost) {// dodaj pritisnutu vrijednost na listu

if (indeksni broj == 3) {

return; }

if (unos [indeksni broj] == -1) {

input [indexNumber] = vrijednost; indexNumber ++; }}

void handleInput () {// napravi 'waarde' (vrijednost) sa liste

waarde = abs (ulaz [0] * 100 + ulaz [1] * 10 + ulaz [2]); ulaz [0] = -1; // resetiranje signalizacijskog ulaza [1] = -1; ulaz [2] = -1;

indexNumber = 0;

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

void addColor (int waarde) {// dodaje trocifreni 'waarde' na listu

if (indexColor == 3) {

return; }

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

boja [indexColor] = boja; if (boja [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// učini da svjetlo postane nasumične boje i sačuva ga u varijablama

roodRandom = random (0, 255);

groenRandom = random (0, 255);

blauwRandom = random (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 () {// pretvorite 'waarde' sa liste u 'Gok' (pogodi) varijable

roodGok = boja [0]; groenGok = boja [1]; blauwGok = boja [2]; // provjeravamo da li se varijable Gok previše razlikuju od stvarne slučajne boje: ako je tako, prikažite pogađanje tri sekunde, trepćite zeleno i ponovo promijenite boju, dodajte nivo abd i dozvolite razliku manjom // ako nije, prikažite pogađajte tri sekunde, trepćite crveno i oduzmite život // ako ste izvan života, igra počinje ponovo ako (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); kašnjenje (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); kašnjenje (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); kašnjenje (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (300);

Serial.print ("roodGok =");

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

resetColor ();

životi--; } if (životi == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kašnjenje (100); resetEverything (); }

}

void resetColor () {// koristi se za poništavanje vrijednosti, za pogrešan pritisak ili svako novo pogađanje (samo radi sigurnosti)

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

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// ponovo pokrenite igru

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

indexNumber = 0;

indexColor = 0;

životi = 3;

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

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

nivo1 = 255;

nivo2 = 0; nivo3 = 0; nivo4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// koristite ovo za prikaz važnih informacija na serijskom 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); }

Korak 3: Izgradite

Build
Build
Build
Build
Build
Build
Build
Build

Očigledno želite lijepu gradnju za ovaj projekt. ovaj dio je prilično otvoren za tumačenje, ali imajte na umu neke stvari: - držite prednju ploču tankom, tako da i dalje možete provlačiti LED diode kroz nju, a IR prijemnik i dalje radi

- zadržite dovoljno prostora u izgradnji za arduino i ploču za lemljenje

- provjerite postoji li rupa na stražnjoj strani za snagu arduina

Dodao sam grubu shemu ožičenja.

Sretno i zabavite se!

Preporučuje se: