Cuprins:

IR-Remote Color Guessing Game: 3 pași
IR-Remote Color Guessing Game: 3 pași

Video: IR-Remote Color Guessing Game: 3 pași

Video: IR-Remote Color Guessing Game: 3 pași
Video: CUM SĂ AJUNGEȚI LA JOCUL DE SQUID?! Cele mai bune modalități de a ajunge la JOCUL DE CALAMARI! 2024, Noiembrie
Anonim
IR-Remote Color Guessing Game
IR-Remote Color Guessing Game

În acest instructable, vă voi arăta cum să controlați un LED RGB folosind o telecomandă IR și să creați un joc distractiv din el!

Pasul 1: Piese necesare

Piese necesare
Piese necesare

Părțile de care aveți nevoie pentru acest proiect sunt:

- Arduino one- Led RGB- Senzor IR

(numărul de leduri depinde de joc, de numărul de vieți sau) - 2 leduri verzi- 1 led galben - 1 led portocaliu- 3 leduri roșii

Pasul 2: Cod

#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 irrecv (RECV_PIN); rezultate decode_results;

// introduceți culorile

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

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// generează culori

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

// variabile de joc

int dif = 200;

int levelNumber = 1;

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

int t = 0;

int nivel 1 = 255;

int level2 = 0; int level3 = 0; int level4 = 0;

vieti int = 3;

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

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

configurare nulă () {

Serial.begin (9600); irrecv.enableIRIn (); // porniți receptorul pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

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

}

bucla nulă () {

if (irrecv.decode (& results)) // primesc semnalele de la distanță {Serial.println (results.value, DEC); // afișează semnalele primite de la fiecare buton apăsat irrecv.resume (); // primiți următorul comutator de semnal (results.value) {// transformați semnalele în numerele de pe butoane și atribuiți acțiuni butoanelor

cazul 109562864:

addWaarde (1); pauză;

cazul 109562824:

addWaarde (2); pauză;

cazul 109562856:

addWaarde (3); pauză;

cazul 109562872:

addWaarde (4); pauză;

cazul 109562820:

addWaarde (5); pauză;

cazul 109562852:

addWaarde (6); pauză;

cazul 109562868:

addWaarde (7); pauză;

cazul 109562828:

addWaarde (8); pauză;

cazul 109562860:

addWaarde (9); pauză;

cazul 109562876:

addWaarde (0); pauză;

cazul 109562818: // oud ding enter / R CLK

handleInput (); pauză;

cazul 109562816: // puterea de ding

handleColor (); pauză; case 109562878: // anulați anularea / L CLK resetColor (); pauză;

case 109562866: // lege knop midden

culoare aleatorie(); pauză;

case 109562830: // pijltje naar rechts

displayEverything (); pauză; case 109562838: // esc case 109562822: // Sursă AV resetEverything (); pauză; }

// atribuiți butoane pe telecomandă pentru controlul culorii: în acest fel, jucătorii pot vedea cum arată culorile și cum să le combine, // înainte de a începe un joc. switch (results.value) {case 109562840: rood = 255; pauză;

cazul 109562844:

groen = 255; pauză;

cazul 109562850:

blauw = 255; pauză;

cazul 109562836:

rood = 0; groen = 0; blauw = 0; pauză; }

}

analogWrite (redPin, abs (255 - rood)); // controlul LED-ului RGB: în sens invers, deoarece al meu este cablat în sens invers.

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

// controlul ledurilor live

if (trăiește == 2) {levens1 = 0; } if (trăiește == 1) {levens2 = 0; } if (trăiește == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// controlul ledurilor de nivel

if (levelNumber == 1) {level1 = 255; } if (levelNumber == 2) {level1 = 255; nivel2 = 255; } if (levelNumber == 3) {level1 = 255; nivel2 = 255; nivel3 = 255; } if (levelNumber == 4) {level1 = 255; nivel2 = 255; nivel3 = 255; nivel4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (valoare int) {// adăugați valoarea apăsată la listă

if (indexNumber == 3) {

întoarcere; }

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

input [Număr index] = valoare; indexNumber ++; }}

void handleInput () {// faceți o „waarde” (valoare) din listă

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

Număr index = 0;

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

void addColor (int waarde) {// adăugați „waarde” din 3 cifre la o listă

if (indexColor == 3) {

întoarcere; }

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

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

}

void randomColor () {// face ca lumina să devină o culoare aleatorie și să o salvezi în variabile

roodRandom = aleatoriu (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 () {// transformați „waarde” din listă în variabile „Gok” (ghici)

roodGok = culoare [0]; groenGok = culoare [1]; blauwGok = culoare [2]; // verificați dacă variabilele Gok diferă prea mult cu culoarea reală aleatorie: dacă da, afișați ghiciul timp de trei secunde, clipiți în verde și schimbați din nou culoarea, adăugați un nivel abd micșorați diferența permisă // dacă nu, afișați ghici timp de trei secunde, clipește roșu și scade o viață // dacă nu ai viață, jocul începe din nou dacă (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); întârziere (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); culoare aleatorie(); levelNumber ++; dif - = 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); întârziere (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

vieți--; } if (trăiește == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); întârziere (100); resetEverything (); }

}

void resetColor () {// utilizați pentru valorile de resetare, pentru o apăsare greșită sau pentru fiecare estimare nouă (doar pentru certitudine)

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

Număr index = 0;

indexColor = 0; }

void resetEverything () {// reporniți jocul

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

Număr index = 0;

indexColor = 0;

vieți = 3;

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

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

nivel1 = 255;

nivel2 = 0; nivel3 = 0; nivel4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// utilizați acest lucru pentru a afișa informații importante pe monitorul serial

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

Pasul 3: Construiți

Construi
Construi
Construi
Construi
Construi
Construi
Construi
Construi

În mod evident, doriți o construcție frumoasă pentru acest proiect. această parte este destul de deschisă interpretării, dar există câteva lucruri de care trebuie să ții cont: - păstrați panoul frontal subțire, astfel încât să vă puteți lipi ledurile și receptorul IR funcționează în continuare

- păstrați suficient spațiu în construcție pentru arduino și o placă de lipit

- asigurați-vă că există o gaură în spate pentru puterea arduino-ului

Am adăugat o schemă brută pentru cablare.

Noroc si sa te distrezi!

Recomandat: