Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
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
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
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!