Innehållsförteckning:

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

Video: IR-Remote Color Guessing Game: 3 steg

Video: IR-Remote Color Guessing Game: 3 steg
Video: Thomas Campbell: Remote Viewing, Speaking to Entities 2024, Juli
Anonim
IR-Remote Color Guessing Game
IR-Remote Color Guessing Game

I denna instruerbara, kommer jag att visa dig hur du styr en RGB-LED med en IR-fjärrkontroll, och gör ett roligt spel av det!

Steg 1: Delar som behövs

Delar som behövs
Delar som behövs

De delar du behöver för detta projekt är:

- arduino one- RGB LED- IR-sensor

(antal led beror på spelet, livsmängden eller)- 2 gröna lysdioder- 1 gul lysdiod- 1 orange lysdiod- 3 röda lysdioder

Steg 2: Kod

#omfatta

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int livPin1 = 8;

int levensPin2 = 9; int livPin3 = 12;

int levelPin1 = 2;

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

int RECV_PIN = 11;

IRrecv irrecv (RECV_PIN); resultat avkodningsresultat;

// inmatningsfärger

int input = {-1, -1, -1}; int färg = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int värde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// skapa färger

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

// spelvariabler

int diff = 200;

int levelNumber = 1;

int -nivå = {-1, -1, -1, -1};

int t = 0;

int level1 = 255;

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

int liv = 3;

int liv1 = 255; int liv2 = 255; int liv3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

void setup () {

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

pinMode (levensPin1, OUTPUT);

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

}

void loop () {

if (irrecv.decode (& results)) // ta emot signalerna från fjärrkontrollen {Serial.println (results.value, DEC); // visa signalerna som tas emot från varje nedtryckt knapp irrecv.resume (); // ta emot nästa signalomkopplare (results.value) {// förvandla signalerna till siffrorna på knapparna och tilldela knapparna åtgärder

fall 109562864:

addWaarde (1); ha sönder;

fall 109562824:

addWaarde (2); ha sönder;

fall 109562856:

addWaarde (3); ha sönder;

fall 109562872:

addWaarde (4); ha sönder;

fall 109562820:

addWaarde (5); ha sönder;

fall 109562852:

addWaarde (6); ha sönder;

fall 109562868:

addWaarde (7); ha sönder;

fall 109562828:

addWaarde (8); ha sönder;

fall 109562860:

addWaarde (9); ha sönder;

fall 109562876:

addWaarde (0); ha sönder;

fall 109562818: // oud ding enter/R CLK

handleInput (); ha sönder;

fall 109562816: // oud ding power

handleColor (); ha sönder; fall 109562878: // oud ding cancel/L CLK resetColor (); ha sönder;

fall 109562866: // lege knop midden

slumpmässig färg(); ha sönder;

ärende 109562830: // pijltje naar rechts

displayEverything (); ha sönder; fall 109562838: // esc fall 109562822: // AV källa resetEverything (); ha sönder; }

// tilldela knappar på fjärrkontrollen för att styra färgen: på så sätt kan spelarna se hur färgerna ser ut och hur de kombineras, // innan du startar ett spel. switch (results.value) {case 109562840: rood = 255; ha sönder;

fall 109562844:

groen = 255; ha sönder;

fall 109562850:

blauw = 255; ha sönder;

fall 109562836:

rood = 0; groen = 0; blauw = 0; ha sönder; }

}

analogWrite (redPin, abs (255 - rood)); // styr RGB -led: i omvänd ordning, eftersom min är trådbunden i omvänd ordning.

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

// styr levande lysdioder

if (lives == 2) {levens1 = 0; } if (lives == 1) {levens2 = 0; } if (lives == 0) {levens3 = 0; } analogWrite (livPin1, liv1); analogWrite (livPin2, liv2); analogWrite (levensPin3, liv3);

// kontrollnivåer

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

}

void addWaarde (int -värde) {// lägg till ett pressat värde i listan

if (indexNumber == 3) {

lämna tillbaka; }

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

input [indexNumber] = värde; indexNumber ++; }}

void handleInput () {// gör ett "värde" (värde) ur listan

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

indexNumber = 0;

Serial.print ("värde sparlagen:"); Serial.println (värde); addColor (värde); }

void addColor (int waarde) {// lägg till det tresiffriga "värdet" i en lista

if (indexColor == 3) {

lämna tillbaka; }

if (färg [indexColor] == -1) {

färg [indexColor] = värde; if (färg [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// få ljuset att bli en slumpmässig färg och spara det i variabler

roodRandom = random (0, 255);

groenRandom = slumpmässig (0, 255);

blauwRandom = slumpmässig (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 () {// förvandla 'värde' från listan till 'Gok' (gissnings) variabler

roodGok = färg [0]; groenGok = färg [1]; blauwGok = färg [2]; // kontrollera om Gok -variablerna skiljer sig för mycket med den verkliga slumpmässiga färgen: visa i så fall gissningen i tre sekunder, blinka grönt och ändra färgen igen, lägg till en nivå och gör den tillåtna skillnaden mindre // om inte, visa gissa i tre sekunder, blinka rött och dra av ett liv // om du är slut, börjar spelet igen om (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); fördröjning (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); fördröjning (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); fördröjning (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); slumpmässig färg(); levelNumber ++; diff -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); fördröjning (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (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); fördröjning (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); fördröjning (100); resetEverything (); }

}

void resetColor () {// använd för återställning av värden, för fel tryckning eller varje ny gissning (bara för säkerhets skull)

färg [0] = -1; färg [1] = -1; färg [2] = -1;

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// starta om spelet

färg [0] = -1; färg [1] = -1; färg [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;

nivå 1 = 255;

nivå2 = 0; nivå3 = 0; nivå4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// använd detta för att visa viktig information på den seriella bildskärmen

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ärde sparlagen:");

Serial.println (värde); }

Steg 3: Bygg

Bygga
Bygga
Bygga
Bygga
Bygga
Bygga
Bygga
Bygga

Du vill självklart ha ett fint bygge för det här projektet. denna del är ganska öppen för tolkning, men det finns några saker att tänka på med detta: - håll frontpanelen tunn, så att du fortfarande kan hålla dina lysdioder genom den och IR -mottagaren fungerar fortfarande

- ha tillräckligt med utrymme i byggnaden för arduino och en lödbräda

- se till att det finns ett hål på baksidan för arduinoens kraft

Jag har lagt till ett grovt schema för ledningarna.

Lycka till och ha kul!

Rekommenderad: