Indholdsfortegnelse:
Video: IR-Remote Color Guessing Game: 3 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
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
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
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:
Sådan bruges Detect Color TCS3200 med SkiiiD: 9 trin
Sådan bruges Detect Color TCS3200 med SkiiiD: En tutorial til at udvikle Detect Color TCS3200 med skiiiD
Arduino Game Controller + Unity Game: 5 trin
Arduino Game Controller + Unity Game: I denne instruktive vil jeg vise dig, hvordan du bygger/programmerer en arduino game controller, som kan oprette forbindelse til enhed
Simple Python Number Guessing Game: 11 trin
Simple Python Number Guessing Game: I denne vejledning lærer vi, hvordan du opretter simpelt Python -gættespil i Pycharm -applikationen. Python er et scriptsprog, der er fantastisk til både begyndere og eksperter. Kodestilen i Python er let at læse og følge
Arduino Pocket Game Console + A -Maze - Maze Game: 6 trin (med billeder)
Arduino Pocket Game Console + A -Maze - Maze Game: Velkommen til min første instruerbare! Det projekt, jeg vil dele med dig i dag, er Arduino labyrintspil, der blev en lommekonsol, der var lige så god som Arduboy og lignende Arduino -baserede konsoller. Det kan flashes med mine (eller dine) fremtidige spil takket være ekspo
Game Boy Color Cartridge Ilummination (GBC): 5 trin
Game Boy Color Cartridge Ilummination (GBC): Denne instruktør viser, hvordan man bruger en LED til at belyse en GBC -patron