Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
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
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
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!