INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
In hierdie instruksies sal ek jou wys hoe om 'n RGB-LED met 'n IR-afstandsbediening te beheer en 'n prettige speletjie daarvan te maak!
Stap 1: Onderdele benodig
Die onderdele wat u benodig vir hierdie projek is:
- arduino one- RGB LED- IR-sensor
(led-telling hang af van die spel, die hoeveelheid lewens of)- 2 groen leds- 1 geel led- 1 oranje led- 3 rooi leds
Stap 2: Kode
#insluit
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); resultate van dekode_resultate;
// invoer kleure
int input = {-1, -1, -1}; int kleur = {-1, -1, -1};
int indexNumber = 0;
int indexColor = 0;
int waarde = 0;
int rood = 0;
int groen = 0; int blauw = 0;
// genereer kleure
int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;
// spel veranderlikes
int diff = 200;
int levelNumber = 1;
int -vlak = {-1, -1, -1, -1};
int t = 0;
int vlak1 = 255;
int level2 = 0; int level3 = 0; int level4 = 0;
int lewens = 3;
int lewens1 = 255; int lewens2 = 255; int lewens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
ongeldige opstelling () {
Serial.begin (9600); irrecv.enableIRIn (); // begin die ontvanger pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);
pinMode (levensPin1, OUTPUT);
pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);
}
leemte -lus () {
as (irrecv.decode (& resultate)) // die seine van die afgeleë {Serial.println (results.value, DEC) ontvang; // vertoon die seine wat ontvang word van elke ingedrukte knoppie irrecv.resume (); // ontvang die volgende seinskakelaar (results.value) {// verander die seine in die syfers op die knoppies en ken aksies toe aan knoppies
saak 109562864:
addWaarde (1); breek;
saak 109562824:
addWaarde (2); breek;
saak 109562856:
addWaarde (3); breek;
saak 109562872:
addWaarde (4); breek;
saak 109562820:
addWaarde (5); breek;
saak 109562852:
addWaarde (6); breek;
saak 109562868:
addWaarde (7); breek;
saak 109562828:
addWaarde (8); breek;
saak 109562860:
addWaarde (9); breek;
saak 109562876:
addWaarde (0); breek;
saak 109562818: // oud ding enter/R CLK
handleInput (); breek;
saak 109562816: // oud ding power
handleColor (); breek; saak 109562878: // oud ding kanselleer/L CLK resetColor (); breek;
saak 109562866: // lege knop midden
randomColor (); breek;
saak 109562830: // pijltje naar rechts
displayEverything (); breek; saak 109562838: // esc saak 109562822: // AV bron resetEverything (); breek; }
// knoppies op die afstandsbediening toewys om die kleur te beheer: op hierdie manier kan spelers sien hoe die kleure lyk en hoe hulle dit kan kombineer, // voordat u 'n wedstryd begin. skakelaar (result.value) {saak 109562840: rood = 255; breek;
saak 109562844:
groen = 255; breek;
saak 109562850:
blauw = 255; breek;
saak 109562836:
rood = 0; groen = 0; blauw = 0; breek; }
}
analogWrite (redPin, abs (255 - rood)); // die beheer van RGB LED: omgekeerd, want myne is omgekeerd bedraad.
analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));
// beheer van lewendige leds
as (lewe == 2) {levens1 = 0; } as (lewens == 1) {levens2 = 0; } as (lewens == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// die beheer van die vlak leds
as (levelNumber == 1) {level1 = 255; } as (levelNumber == 2) {level1 = 255; vlak2 = 255; } as (levelNumber == 3) {level1 = 255; vlak2 = 255; vlak3 = 255; } as (levelNumber == 4) {level1 = 255; vlak2 = 255; vlak3 = 255; vlak4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);
}
void addWaarde (int value) {// voeg gepersonaliseerde waarde by die lys
as (indexNumber == 3) {
terugkeer; }
as (invoer [indexNumber] == -1) {
invoer [indexNumber] = waarde; indexNumber ++; }}
void handleInput () {// maak 'n 'waarde' (waarde) uit die lys
waarde = abs (invoer [0] * 100 + invoer [1] * 10 + invoer [2]); invoer [0] = -1; // herstel die seininvoer [1] = -1; invoer [2] = -1;
indeksNommer = 0;
Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (waarde); }
void addColor (int waarde) {// voeg die 3-syfer 'waarde' by 'n lys
as (indexColor == 3) {
terugkeer; }
as (kleur [indexColor] == -1) {
kleur [indexColor] = waarde; as (kleur [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }
}
void randomColor () {// laat die lig 'n ewekansige kleur verander en stoor dit in veranderlikes
roodRandom = ewekansig (0, 255);
groenRandom = ewekansig (0, 255);
blauwRandom = ewekansig (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 () {// verander die 'waarde' uit die lys in 'Gok' (raai) veranderlikes
roodGok = kleur [0]; groenGok = kleur [1]; blauwGok = kleur [2]; // kyk of die Gok -veranderlikes te veel verskil met die werklike ewekansige kleur: as dit die geval is, vertoon die raai vir drie sekondes, knip groen en verander die kleur weer, voeg 'n vlak by en maak die toegelate verskil kleiner // indien nie, vertoon die raai vir drie sekondes, knip rooi en trek 'n lewe af // as jy nie meer lewe nie, begin die spel weer as (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); vertraging (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300);
Serial.print ("roodGok =");
Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; ewenaar -= 50; } anders {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); vertraging (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);
resetColor ();
lewens--; } if (lives == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); resetEverything (); }
}
void resetColor () {// gebruik vir die terugstel van waardes, vir 'n verkeerde pers of elke nuwe raaiskoot (net vir sekerheid)
kleur [0] = -1; kleur [1] = -1; kleur [2] = -1;
indexNumber = 0;
indexColor = 0; }
void resetEverything () {// begin die spel weer
kleur [0] = -1; kleur [1] = -1; kleur [2] = -1;
indexNumber = 0;
indexColor = 0;
lewens = 3;
rood = 0; groen = 0; blauw = 0;
roodRandom = 0;
groenRandom = 0; blauwRandom = 0;
lewens1 = 255;
lewens2 = 255; lewens3 = 255;
vlak1 = 255;
vlak2 = 0; vlak3 = 0; vlak4 = 0;
levelNumber = 1;
t = 0;
}
void displayEverything () {// gebruik dit om belangrike inligting op die seriële monitor te vertoon
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 opgeslagen:");
Serial.println (waarde); }
Stap 3: Bou
U wil natuurlik 'n goeie bou vir hierdie projek hê. hierdie deel is redelik oop vir interpretasie, maar daar is 'n paar dinge om in gedagte te hou: - hou die voorpaneel dun, sodat u steeds u leds daardeur kan steek en die IR -ontvanger werk nog steeds
- Hou genoeg ruimte in die bou vir die arduino en 'n soldeerbord
- Maak seker dat daar 'n gat in die rug is vir die krag van die arduino
Ek het 'n rowwe skema vir die bedrading bygevoeg.
Sterkte, en om pret te hê!