Innholdsfortegnelse:

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

Video: IR-Remote Color Guessing Game: 3 trinn

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

I denne instruksen vil jeg vise deg hvordan du styrer en RGB-ledning ved hjelp av en IR-fjernkontroll, og gjør et morsomt spill ut av det!

Trinn 1: Nødvendige deler

Nødvendige deler
Nødvendige deler

Delene du trenger for dette prosjektet er:

- arduino one- RGB LED- IR-sensor

(antall ledninger avhenger av spillet, livsmengden eller)- 2 grønne lysdioder- 1 gul lysdiode- 1 oransje ledning- 3 røde lysdioder

Trinn 2: Kode

#inkludere

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int levensPin1 = 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); resultater for dekoderesultater;

// input farger

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

int indexNumber = 0;

int indexColor = 0;

int verdi = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// generere farger

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

// spillvariabler

int diff = 200;

int levelNumber = 1;

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

int t = 0;

int nivå1 = 255;

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

int liv = 3;

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

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

ugyldig oppsett () {

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

pinMode (levensPin1, OUTPUT);

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

}

void loop () {

if (irrecv.decode (& results)) // motta signalene fra den eksterne {Serial.println (results.value, DEC); // vise signalene mottatt fra hver trykk på knappen irrecv.resume (); // motta neste signalbryter (results.value) {// snu signalene til tallene på knappene, og tilordne handlinger til knappene

sak 109562864:

addWaarde (1); gå i stykker;

sak 109562824:

addWaarde (2); gå i stykker;

sak 109562856:

addWaarde (3); gå i stykker;

sak 109562872:

addWaarde (4); gå i stykker;

sak 109562820:

addWaarde (5); gå i stykker;

sak 109562852:

addWaarde (6); gå i stykker;

sak 109562868:

addWaarde (7); gå i stykker;

sak 109562828:

addWaarde (8); gå i stykker;

sak 109562860:

addWaarde (9); gå i stykker;

sak 109562876:

addWaarde (0); gå i stykker;

sak 109562818: // oud ding enter/R CLK

handleInput (); gå i stykker;

sak 109562816: // oud ding power

handleColor (); gå i stykker; sak 109562878: // oud ding cancel/L CLK resetColor (); gå i stykker;

sak 109562866: // lege knop mellom

randomColor (); gå i stykker;

sak 109562830: // pijltje naar rechts

displayEverything (); gå i stykker; sak 109562838: // esc sak 109562822: // AV kilde resetEverything (); gå i stykker; }

// tilordne knapper på fjernkontrollen for å kontrollere fargen: på denne måten kan spillerne se hvordan fargene ser ut og hvordan de kombineres, // før du starter et spill. switch (results.value) {case 109562840: rood = 255; gå i stykker;

sak 109562844:

groen = 255; gå i stykker;

sak 109562850:

blauw = 255; gå i stykker;

sak 109562836:

rood = 0; groen = 0; blauw = 0; gå i stykker; }

}

analogWrite (redPin, abs (255 - rood)); // kontrollere RGB led: i revers, fordi min er kablet i revers.

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

// kontrollere levende lysdioder

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

// kontrollerende lysdioder

hvis (levelNumber == 1) {level1 = 255; } hvis (levelNumber == 2) {level1 = 255; nivå 2 = 255; } hvis (levelNumber == 3) {level1 = 255; nivå 2 = 255; nivå3 = 255; } hvis (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 verdi) {// legg presset verdi til listen

hvis (indexNumber == 3) {

komme tilbake; }

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

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

void handleInput () {// lage et 'waarde' (verdi) ut av listen

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

indexNumber = 0;

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

void addColor (int waarde) {// legg til det tresifrede "verdien" i en liste

hvis (indexColor == 3) {

komme tilbake; }

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

color [indexColor] = verdi; hvis (farge [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// få lyset til å bli en tilfeldig farge og lagre det i variabler

roodRandom = tilfeldig (0, 255);

groenRandom = tilfeldig (0, 255);

blauwRandom = tilfeldig (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 () {// slå 'waarde' fra listen til 'Gok' (gjetning) variabler

roodGok = farge [0]; groenGok = farge [1]; blauwGok = farge [2]; // sjekk om Gok -variablene avviker for mye med den virkelige tilfeldige fargen: vis i så fall gjetningen i tre sekunder, blink grønt og endre fargen igjen, legg til et nivå og gjør den tillatte forskjellen mindre // hvis ikke, vis gjett i tre sekunder, blunker rødt og trekk et liv // hvis du er tom for liv, starter spillet igjen 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; } annet {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 ();

bor--; } 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 () {// bruk for tilbakestillingsverdier, for feil trykk eller hvert nytt gjetning (bare for sikkerhet)

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

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// start spillet på nytt

farge [0] = -1; farge [1] = -1; farge [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 () {// bruk dette til å vise viktig informasjon på den serielle skjermen

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 bevart:");

Serial.println (verdi); }

Trinn 3: Bygg

Bygge
Bygge
Bygge
Bygge
Bygge
Bygge
Bygge
Bygge

Du vil tydeligvis ha et fint bygg for dette prosjektet. denne delen er ganske åpen for tolkning, men det er noen ting du må huske på med dette: - hold frontpanelet tynt, slik at du fortsatt kan holde lysdiodene dine gjennom det og IR -mottakeren fungerer fortsatt

- behold nok plass i bygget for arduinoen og et loddebrett

- sørg for at det er et hull i ryggen for arduinoens kraft

Jeg har lagt til et grovt opplegg for ledningene.

Lykke til og ha det moro!

Anbefalt: