Talaan ng mga Nilalaman:
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-13 06:58
Sa itinuturo na ito, ipapakita ko sa iyo kung paano makontrol ang isang RGB na humantong gamit ang isang IR-remote, at gumawa ng isang masayang laro dito!
Hakbang 1: Kailangan ng Mga Bahagi
Ang mga bahagi na kakailanganin mo para sa proyektong ito ay:
- Arduino isa- RGB Led- IR-Sensor
(ang led count ay depende sa laro, ang dami ng buhay o) - 2 green leds- 1 dilaw na led - 1 orange led- 3 red leds
Hakbang 2: Code
# isama
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); mga resulta sa pag-decode_resulta;
// mga kulay ng pag-input
int input = {-1, -1, -1}; int kulay = {-1, -1, -1};
int indexNumber = 0;
int indexColor = 0;
int waarde = 0;
int rood = 0;
int gren = 0; int blauw = 0;
// makabuo ng mga kulay
int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;
// variable ng laro
int diff = 200;
int levelNumber = 1;
int level = {-1, -1, -1, -1};
int t = 0;
int antas1 = 255;
int antas2 = 0; int antas3 = 0; int antas4 = 0;
int buhay = 3;
int levens1 = 255; int levens2 = 255; int levens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
walang bisa ang pag-setup () {
Serial.begin (9600); irrecv.enableIRIn (); // simulan ang receiver pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);
pinMode (levensPin1, OUTPUT);
pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);
}
void loop () {
kung (irrecv.decode (& mga resulta)) // makatanggap ng mga signal mula sa remote na {Serial.println (results.value, DEC); // ipakita ang mga signal na natanggap mula sa bawat pinindot na pindutan na irrecv.resume (); // makatanggap ng susunod na switch ng signal (results.value) {// buksan ang mga signal sa mga numero sa mga pindutan, at magtalaga ng mga pagkilos sa mga pindutan
kaso 109562864:
addWaarde (1); pahinga;
kaso 109562824:
addWaarde (2); pahinga;
kaso 109562856:
addWaarde (3); pahinga;
kaso 109562872:
addWaarde (4); pahinga;
kaso 109562820:
addWaarde (5); pahinga;
kaso 109562852:
addWaarde (6); pahinga;
kaso 109562868:
addWaarde (7); pahinga;
kaso 109562828:
addWaarde (8); pahinga;
kaso 109562860:
addWaarde (9); pahinga;
kaso 109562876:
addWaarde (0); pahinga;
kaso 109562818: // oud ding enter / R CLK
hawakanInput (); pahinga;
kaso 109562816: // oud ding power
hawakanColor (); pahinga; kaso 109562878: // oud ding cancel / L CLK resetColor (); pahinga;
kaso 109562866: // lege knop midden
randomColor (); pahinga;
kaso 109562830: // pijltje naar rechts
displayEverything (); pahinga; case 109562838: // esc case 109562822: // AV source resetEverything (); pahinga; }
// magtalaga ng mga pindutan sa remote para sa pagkontrol sa kulay: sa ganitong paraan, makikita ng mga manlalaro kung ano ang hitsura ng mga kulay at kung paano pagsamahin ang mga ito, // bago simulan ang isang laro. switch (results.value) {case 109562840: rood = 255; pahinga;
kaso 109562844:
singit = 255; pahinga;
kaso 109562850:
blauw = 255; pahinga;
kaso 109562836:
rood = 0; singit = 0; blauw = 0; pahinga; }
}
analogWrite (redPin, abs (255 - rood)); // pagkontrol sa RGB na humantong: sa kabaligtaran, dahil ang minahan ay wired sa kabaligtaran.
analogWrite (greenPin, abs (255 - gren)); analogWrite (bluePin, abs (255 - blauw));
// pagkontrol sa live leds
kung (nabubuhay == 2) {levens1 = 0; } kung (nabubuhay == 1) {levens2 = 0; } kung (nabubuhay == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// pagkontrol sa antas ng mga leds
kung (levelNumber == 1) {level1 = 255; } kung (levelNumber == 2) {level1 = 255; antas2 = 255; } kung (levelNumber == 3) {level1 = 255; antas2 = 255; antas3 = 255; } kung (levelNumber == 4) {level1 = 255; antas2 = 255; antas3 = 255; antas4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);
}
walang bisa ang addWaarde (int halaga) {// magdagdag ng pinindot na halaga sa listahan
kung (indexNumber == 3) {
bumalik; }
kung (input [indexNumber] == -1) {
input [indexNumber] = halaga; indexNumber ++; }}
void handleInput () {// gumawa ng 'waarde' (halaga) sa listahan
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 ("waarde opgeslagen:"); Serial.println (waarde); addColor (waarde); }
void addColor (int waarde) {// idagdag ang 3-digit na 'waarde' sa isang listahan
kung (indexColor == 3) {
bumalik; }
kung (kulay [indexColor] == -1) {
kulay [indexColor] = waarde; kung (kulay [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }
}
void randomColor () {// gawin ang ilaw na isang random na kulay at i-save ito sa mga variable
roodRandom = random (0, 255);
groenRandom = random (0, 255);
blauwRandom = random (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 () {// turn the 'waarde' from the list into 'Gok' (hulaan) variable
roodGok = kulay [0]; groenGok = kulay [1]; blauwGok = kulay [2]; // suriin kung ang mga variable ng Gok ay naiiba nang magkakaiba sa tunay na random na kulay: kung gayon, ipakita ang hulaan sa loob ng tatlong segundo, kumurap berde at baguhin ulit ang kulay, magdagdag ng isang antas na abd gawing mas maliit ang pinapayagan na pagkakaiba // kung hindi, ipakita ang hulaan sa loob ng tatlong segundo, blink red at ibawas ang isang buhay // kung wala ka sa buhay, magsisimula muli ang laro kung (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); pagkaantala (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); pagkaantala (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); pagkaantala (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (300);
Serial.print ("roodGok =");
Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; diff - = 50; } iba pa {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); pagkaantala (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);
resetColor ();
buhay--; } kung (nabubuhay == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); i-reset ang Lahat (); }
}
void resetColor () {// gamitin para sa mga halaga ng pag-reset, para sa isang maling pindutin o bawat bagong hula (para lamang sa katiyakan)
kulay [0] = -1; kulay [1] = -1; kulay [2] = -1;
indexNumber = 0;
indexColor = 0; }
void resetEverything () {// i-restart ang laro
kulay [0] = -1; kulay [1] = -1; kulay [2] = -1;
indexNumber = 0;
indexColor = 0;
nabubuhay = 3;
rood = 0; singit = 0; blauw = 0;
roodRandom = 0;
groenRandom = 0; blauwRandom = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
antas1 = 255;
antas2 = 0; antas3 = 0; antas4 = 0;
levelNumber = 1;
t = 0;
}
void displayEverything () {// gamitin ito upang maipakita ang mahalagang impormasyon sa serial monitor
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); }
Hakbang 3: Bumuo
Malinaw na nais mo ang isang magandang build para sa proyektong ito. ang bahaging ito ay bukas sa interpretasyon, ngunit may ilang mga bagay na dapat tandaan sa ito: - panatilihing payat ang front panel, upang maaari mo pa ring idikit ang iyong mga leds dito at gagana pa rin ang IR-receiver
- panatilihin ang sapat na puwang sa build para sa arduino at isang solder board
- tiyakin na mayroong isang butas sa likod para sa lakas ng arduino
Nagdagdag ako ng isang magaspang na pamamaraan para sa mga kable.
Good luck, at magsaya!