Sisukord:
Video: IR-kaugvärvimäng: 3 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Selles juhendis näitan teile, kuidas IR-kaugjuhtimispuldi abil RGB-d juhtida ja sellest lõbusat mängu teha!
Samm: vajalikud osad
Selle projekti jaoks vajalikud osad on järgmised:
- arduino one- RGB LED-IR-andur
(ledide arv sõltub mängust, elude arvust või)- 2 rohelist LED-i- 1 kollane LED- 1 oranž LED- 3 punast LED-i
2. samm: kood
#kaasake
int redPin = 10;
int rohelinePin = 6; int bluePin = 5;
int levensPin1 = 8;
int levensPin2 = 9; int levensPin3 = 12;
int tasePin1 = 2;
int tasePin2 = 3; int tasePin3 = 4; int tasePin4 = 7;
int RECV_PIN = 11;
IRrecv irrecv (RECV_PIN); decode_results tulemused;
// sisesta värvid
int sisend = {-1, -1, -1}; int värv = {-1, -1, -1};
int indeksNumber = 0;
int indeksVärv = 0;
int waarde = 0;
int rood = 0;
int groen = 0; int blauw = 0;
// genereerige värve
int roodJuhuslik = 0; int groenJuhuslik = 0; int blauwRandom = 0;
// mängu muutujad
int erinevus = 200;
int levelNumber = 1;
int tase = {-1, -1, -1, -1};
int t = 0;
int tase1 = 255;
int tase2 = 0; int tase3 = 0; int tase4 = 0;
int elu = 3;
int levens1 = 255; int levens2 = 255; int levens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
tühine seadistus () {
Seriaalne algus (9600); irrecv.enableIRIn (); // käivita vastuvõtja pinMode (redPin, OUTPUT); pinMode (rohelinePin, VÄLJUND); pinMode (bluePin, OUTPUT);
pinMode (levensPin1, OUTPUT);
pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);
}
void loop () {
if (irrecv.decode (& results)) // võtavad vastu signaale kaugjuhtimispuldilt {Serial.println (results.value, DEC); // kuvab igalt vajutatud nupult saadud signaale irrecv.resume (); // järgmise signaalilüliti vastuvõtmine (results.value) {// muutke signaalid nuppudel olevateks numbriteks ja määrake nuppudele toimingud
juhtum 109562864:
addWaarde (1); murda;
juhtum 109562824:
addWaarde (2); murda;
juhtum 109562856:
addWaarde (3); murda;
juhtum 109562872:
addWaarde (4); murda;
juhtum 109562820:
addWaarde (5); murda;
juhtum 109562852:
addWaarde (6); murda;
juhtum 109562868:
addWaarde (7); murda;
juhtum 109562828:
addWaarde (8); murda;
juhtum 109562860:
addWaarde (9); murda;
juhtum 109562876:
addWaarde (0); murda;
juhtum 109562818: // oud ding enter/R CLK
handleInput (); murda;
juhtum 109562816: // oud ding power
käepideVärv (); murda; juhtum 109562878: // oud ding cancel/L CLK resetColor (); murda;
juhtum 109562866: // lege knop midden
randomColor (); murda;
juhtum 109562830: // pijltje naar rechts
kuvaKõik (); murda; case 109562838: // esc case 109562822: // AV source resetEverything (); murda; }
// määrake värvide juhtimiseks kaugjuhtimispuldi nupud: nii saavad mängijad näha, millised värvid välja näevad ja kuidas neid kombineerida, // enne mängu alustamist. lüliti (tulemused.väärtus) {juht 109562840: rood = 255; murda;
juhtum 109562844:
groen = 255; murda;
juhtum 109562850:
blauw = 255; murda;
juhtum 109562836:
rood = 0; groen = 0; blauw = 0; murda; }
}
analogWrite (redPin, abs (255 - rood)); // RGB ledi juhtimine: tagurpidi, sest minu oma on juhtmega tagurpidi.
analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - must));
// reaalajas LED -ide juhtimine
kui (elab == 2) {levens1 = 0; } kui (elab == 1) {levens2 = 0; } kui (elab == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// taseme LED -ide juhtimine
kui (levelNumber == 1) {level1 = 255; } kui (levelNumber == 2) {level1 = 255; tase2 = 255; } kui (levelNumber == 3) {level1 = 255; tase2 = 255; tase3 = 255; } kui (levelNumber == 4) {level1 = 255; tase2 = 255; tase3 = 255; tase4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);
}
void addWaarde (int väärtus) {// lisage loendisse pressitud väärtus
kui (indeksiNumber == 3) {
tagasipöördumine; }
kui (sisend [indeksiNumber] == -1) {
input [indexNumber] = väärtus; indeksNumber ++; }}
void handleInput () {// tehke loendist „waarde” (väärtus)
waarde = abs (sisend [0] * 100 + sisend [1] * 10 + sisend [2]); sisend [0] = -1; // signale sisendi lähtestamine [1] = -1; sisend [2] = -1;
indeksiNumber = 0;
Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (waarde); }
void addColor (int waarde) {// lisage loendisse 3-kohaline Waarde
kui (indexColor == 3) {
tagasipöördumine; }
if (värv [indexColor] == -1) {
värv [indeksvärv] = waarde; if (värv [indeksivärv]> 255) {värv [indeksivärv] = 255; } indexVärv ++; }
}
void randomColor () {// pane valgus juhuslikuks värviks ja salvesta see muutujateks
roodJuhuslik = juhuslik (0, 255);
groenRandom = juhuslik (0, 255);
blauwRandom = juhuslik (0, 255);
rood = roodJuhuslik;
groen = groenJuhuslik; blauw = blauwJuhuslik; Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);
}
void handleColor () {// muuda loendist „waarde” muutujateks „Gok” (arvan)
roodGok = värv [0]; groenGok = värv [1]; blauwGok = värv [2]; // kontrollige, kas Goki muutujad erinevad tegeliku juhusliku värviga liiga palju: kui nii, siis näidake oletust kolm sekundit, vilgutage roheliselt ja muutke uuesti värvi, lisage tase ja tehke lubatud erinevus väiksemaks // kui ei, kuvage arvake kolm sekundit, vilgutage punaselt ja lahutage elu // kui olete elust väljas, algab mäng uuesti, kui (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); viivitus (3000); analogWrite (redPin, 255); analogWrite (rohelinePin, 0); analogWrite (bluePin, 255); viivitus (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (300); analogWrite (redPin, 255); analogWrite (rohelinePin, 0); analogWrite (bluePin, 255); viivitus (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (300);
Serial.print ("roodGok =");
Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; erinevus -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); viivitus (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);
resetColor ();
elab-; } kui (elab == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); viivitus (100); resetEverything (); }
}
void resetColor () {// kasutatakse väärtuste lähtestamiseks, vale vajutuse või iga uue oletuse jaoks (lihtsalt kindluse huvides)
värv [0] = -1; värv [1] = -1; värv [2] = -1;
indeksiNumber = 0;
indeksVärv = 0; }
void resetEverything () {// taaskäivitage mäng
värv [0] = -1; värv [1] = -1; värv [2] = -1;
indeksiNumber = 0;
indeksVärv = 0;
elu = 3;
rood = 0; groen = 0; blauw = 0;
roodJuhuslik = 0;
groenJuhuslik = 0; blauwJuhuslik = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
tase1 = 255;
tase2 = 0; tase3 = 0; tase4 = 0;
levelNumber = 1;
t = 0;
}
void displayEverything () {// kasutage seda olulise teabe kuvamiseks jadamonitoril
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);
Seeria.print ("rood =");
Serial.println (rood); Seeria.print ("groen ="); Serial.println (groen); Serial.print ("blauw ="); Serial.println (blauw);
Serial.print ("waarde opgeslagen:");
Serial.println (waarde); }
3. samm: ehitage
Ilmselgelt soovite selle projekti jaoks kena ehitust. see osa on tõlgendamiseks üsna avatud, kuid siin tuleb meeles pidada mõningaid asju: - hoidke esipaneel õhukesena, nii et saate oma LED -id ikkagi läbi torgata ja IR -vastuvõtja töötab endiselt
- jätke ehitises piisavalt ruumi arduino ja jootelaua jaoks
- veenduge, et tagaküljel on auk arduino võimsuse jaoks
Lisasin juhtmestiku jaoks umbkaudse skeemi.
Õnn kaasa ja toredat olemist!
Soovitan:
Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega)
Atari punkkonsool koos beebi 8-astmelise sekveneerijaga: see vaheehitus on kõik-ühes Atari punk-konsool ja beebi 8-astmeline järjestus, mida saate freesida Bantam Tools töölaua PCB-freespingis. See koosneb kahest trükkplaadist: üks on kasutajaliidese (UI) plaat ja teine on utiliit
Akustiline levitatsioon Arduino Unoga samm-sammult (8 sammu): 8 sammu
Akustiline levitatsioon Arduino Uno abil samm-sammult (8 sammu): ultraheliheli muundurid L298N DC-naissoost adapteri toiteallikas isase alalisvoolupistikuga Arduino UNOBreadboard ja analoogpordid koodi teisendamiseks (C ++)
4G/5G HD -video otseülekanne DJI droonilt madala latentsusega [3 sammu]: 3 sammu
4G/5G HD-video otseülekanne DJI droonilt madala latentsusega [3 sammu]: Järgnev juhend aitab teil saada HD-kvaliteediga otseülekandeid peaaegu igalt DJI droonilt. FlytOSi mobiilirakenduse ja veebirakenduse FlytNow abil saate alustada drooni video voogesitust
Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega)
Bolt - DIY juhtmeta laadimise öökell (6 sammu): Induktiivsed laadimised (tuntud ka kui juhtmeta laadimine või juhtmeta laadimine) on traadita jõuülekande tüüp. See kasutab kaasaskantavatele seadmetele elektrit pakkumiseks elektromagnetilist induktsiooni. Kõige tavalisem rakendus on Qi traadita laadimisst
4 sammu aku sisemise takistuse mõõtmiseks: 4 sammu
4 sammu aku sisemise takistuse mõõtmiseks: Siin on 4 lihtsat sammu, mis aitavad mõõta taigna sisemist takistust