Indholdsfortegnelse:

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

Video: IR-Remote Color Guessing Game: 3 trin

Video: IR-Remote Color Guessing Game: 3 trin
Video: Remoteduino: A Low Power DIY Programmable IR Remote 2024, November
Anonim
IR-Remote Color Guessing Game
IR-Remote Color Guessing Game

I denne instruktive vil jeg vise dig, hvordan du styrer en RGB-led ved hjælp af en IR-fjernbetjening, og gør et sjovt spil ud af det!

Trin 1: Nødvendige dele

Nødvendige dele
Nødvendige dele

De dele, du skal bruge til dette projekt, er:

- arduino one- RGB LED- IR-sensor

(antal led afhænger af spillet, livsmængden eller)- 2 grønne lysdioder- 1 gul lysdiode- 1 orange lysdiode- 3 røde lysdioder

Trin 2: Kode

#omfatte

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); decode_results resultater;

// inputfarver

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

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// generere farver

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

// spilvariabler

int diff = 200;

int levelNumber = 1;

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

int t = 0;

int niveau1 = 255;

int niveau2 = 0; int niveau3 = 0; int niveau4 = 0;

int liv = 3;

int liv1 = 255; int levens2 = 255; int levens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

ugyldig opsætning () {

Serial.begin (9600); irrecv.enableIRIn (); // start modtageren pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

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

}

void loop () {

hvis (irrecv.decode (& resultater)) // modtager signalerne fra fjernbetjeningen {Serial.println (results.value, DEC); // vis de signaler, der modtages fra hver tryk på knappen irrecv.resume (); // modtag næste signalafbryder (results.value) {// forvandl signalerne til tallene på knapperne, og tildel handlinger til knapper

sag 109562864:

addWaarde (1); pause;

sag 109562824:

addWaarde (2); pause;

sag 109562856:

addWaarde (3); pause;

sag 109562872:

addWaarde (4); pause;

sag 109562820:

addWaarde (5); pause;

sag 109562852:

addWaarde (6); pause;

sag 109562868:

addWaarde (7); pause;

sag 109562828:

addWaarde (8); pause;

sag 109562860:

addWaarde (9); pause;

sag 109562876:

addWaarde (0); pause;

sag 109562818: // oud ding enter/R CLK

handleInput (); pause;

sag 109562816: // oud ding power

handleColor (); pause; sag 109562878: // oud ding cancel/L CLK resetColor (); pause;

sag 109562866: // lege knop mellem

randomColor (); pause;

sag 109562830: // pijltje naar rechts

displayEverything (); pause; sag 109562838: // esc sag 109562822: // AV kilde resetEverything (); pause; }

// tildel knapper på fjernbetjeningen til styring af farven: På denne måde kan spillerne se, hvordan farverne ser ud, og hvordan de kombineres, // inden du starter et spil. switch (results.value) {case 109562840: rood = 255; pause;

sag 109562844:

groen = 255; pause;

sag 109562850:

blauw = 255; pause;

sag 109562836:

rood = 0; groen = 0; blauw = 0; pause; }

}

analogWrite (redPin, abs (255 - rood)); // styring af RGB -led: omvendt, fordi min er kablet omvendt.

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

// kontrol af levende lysdioder

hvis (lever == 2) {levens1 = 0; } hvis (lever == 1) {levens2 = 0; } hvis (lever == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// styring af lysdioder

hvis (levelNumber == 1) {level1 = 255; } hvis (levelNumber == 2) {level1 = 255; niveau2 = 255; } hvis (levelNumber == 3) {level1 = 255; niveau2 = 255; niveau3 = 255; } hvis (levelNumber == 4) {level1 = 255; niveau2 = 255; niveau3 = 255; niveau4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (int value) {// tilføj presset værdi til listen

hvis (indexNumber == 3) {

Vend tilbage; }

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

input [indexNumber] = værdi; indexNumber ++; }}

void handleInput () {// lav et 'waarde' (værdi) ud af listen

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

indexNumber = 0;

Serial.print ("værdi opbevaret:"); Serial.println (værdi); addColor (værdi); }

void addColor (int waarde) {// tilføj det 3-cifrede 'waarde' til en liste

hvis (indexColor == 3) {

Vend tilbage; }

hvis (farve [indexColor] == -1) {

farve [indexColor] = værdi; hvis (farve [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// få lyset til at dreje en tilfældig farve og gemme det i variabler

roodRandom = tilfældig (0, 255);

groenRandom = tilfældig (0, 255);

blauwRandom = tilfældig (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 () {// drej 'waarde' fra listen til 'Gok' (gæt) variabler

roodGok = farve [0]; groenGok = farve [1]; blauwGok = farve [2]; // tjek om Gok -variablerne adskiller sig for meget med den virkelige tilfældige farve: vis i så fald gætten i tre sekunder, blink grønt og skift farven igen, tilføj et niveau abd gør den tilladte forskel mindre // hvis ikke, vis gæt i tre sekunder, blink rødt og træk et liv // hvis du er uden for liv, starter spillet igen hvis (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); forsinkelse (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); forsinkelse (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); forsinkelse (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); forsinkelse (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); forsinkelse (300);

Serial.print ("roodGok =");

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

resetColor ();

lever--; } if (lives == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); forsinkelse (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); forsinkelse (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); forsinkelse (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); forsinkelse (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); forsinkelse (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); forsinkelse (100); resetEverything (); }

}

void resetColor () {// brug til nulstilling af værdier, til et forkert tryk eller hvert nyt gæt (bare for en sikkerheds skyld)

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

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// genstart spillet

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

indexNumber = 0;

indexColor = 0;

liv = 3;

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

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

liv1 = 255;

liv2 = 255; liv3 = 255;

niveau1 = 255;

niveau2 = 0; niveau3 = 0; niveau4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// brug dette til at vise vigtige oplysninger på den serielle skærm

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 ("værdi opbevaret:");

Serial.println (værdi); }

Trin 3: Byg

Byg
Byg
Byg
Byg
Byg
Byg
Byg
Byg

Du vil naturligvis gerne have et godt byggeri til dette projekt. denne del er temmelig åben for fortolkning, men der er nogle ting at huske på med dette: - hold frontpanelet tyndt, så du stadig kan stikke lysdioderne igennem det, og IR -modtageren fungerer stadig

- behold nok plads i bygningen til arduinoen og et loddebræt

- sørg for, at der er et hul i ryggen for arduinoens kraft

Jeg har tilføjet en grov ordning for ledningerne.

Held og lykke og hav det sjovt!

Anbefalede: