Mündəricat:
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
Bu təlimatda sizə IR uzaqdan idarəetmə vasitəsi ilə bir RGB idarə etməyi və bundan əyləncəli bir oyun qurmağı göstərəcəyəm!
Addım 1: Lazım olan hissələr
Bu layihə üçün sizə lazım olan hissələr bunlardır:
- arduino one- RGB Led- IR Sensor
(led sayı oyundan, həyatın miqdarından asılıdır)- 2 yaşıl led- 1 sarı led- 1 narıncı led- 3 qırmızı led
Addım 2: Kod
#daxil edin
int redPin = 10;
int greenPin = 6; int bluePin = 5;
int levensPin1 = 8;
int levensPin2 = 9; int levensPin3 = 12;
int səviyyəsiPin1 = 2;
int səviyyəsiPin2 = 3; int səviyyəsiPin3 = 4; int səviyyəsiPin4 = 7;
int RECV_PIN = 11;
IRrecv irrecv (RECV_PIN); decode_results nəticələri;
// giriş rəngləri
int giriş = {-1, -1, -1}; int rəngi = {-1, -1, -1};
int indexNumber = 0;
int indexColor = 0;
int waarde = 0;
int rood = 0;
int groen = 0; int blauw = 0;
// rənglər yaradın
int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;
// oyun dəyişənləri
int fərqi = 200;
int səviyyəsiSayı = 1;
int səviyyəsi = {-1, -1, -1, -1};
int t = 0;
int səviyyəsi1 = 255;
int səviyyəsi2 = 0; int səviyyəsi3 = 0; int səviyyəsi4 = 0;
int life = 3;
int levens1 = 255; int levens2 = 255; int levens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
boş quraşdırma () {
Serial.begin (9600); irrecv.enableIRIn (); // alıcı pinMode (redPin, ÇIXIŞ) başlayın; pinMode (greenPin, ÇIXIŞ); pinMode (bluePin, ÇIXIŞ);
pinMode (levensPin1, Çıxış);
pinMode (levensPin2, Çıxış); pinMode (levensPin3, Çıxış);
}
boşluq döngəsi () {
if (irrecv.decode (& results)) // siqnalları uzaqdan {Serial.println (results.value, DEC) alır; // hər basılan düymədən alınan siqnalları göstər irrecv.resume (); // növbəti siqnal keçidini əldə edin (results.value) {// siqnalları düymələrdəki nömrələrə çevirin və düymələrə hərəkətlər təyin edin
dava 109562864:
addWaarde (1); fasilə;
iş 109562824:
addWaarde (2); fasilə;
iş 109562856:
addWaarde (3); fasilə;
iş 109562872:
addWaarde (4); fasilə;
dava 109562820:
addWaarde (5); fasilə;
iş 109562852:
addWaarde (6); fasilə;
iş 109562868:
addWaarde (7); fasilə;
iş 109562828:
addWaarde (8); fasilə;
iş 109562860:
addWaarde (9); fasilə;
iş 109562876:
addWaarde (0); fasilə;
dava 109562818: // ud ding enter/R CLK
handleInput (); fasilə;
case 109562816: // ud ding gücü
handleColor (); fasilə; case 109562878: // ud ding ləğv/L CLK resetColor (); fasilə;
dava 109562866: // lege knop midden
randomColor (); fasilə;
dava 109562830: // pijltje naar rechts
displayEverything (); fasilə; case 109562838: // esc case 109562822: // AV source resetEverything (); fasilə; }
// rəngi idarə etmək üçün pultdakı düymələri təyin edin: bu yolla oyunçular rənglərin necə göründüyünü və onları necə birləşdirəcəyini görə bilər, // oyuna başlamazdan əvvəl. keçid (results.value) {halda 109562840: rood = 255; fasilə;
dava 109562844:
groen = 255; fasilə;
iş 109562850:
blauw = 255; fasilə;
dava 109562836:
rood = 0; groen = 0; blauw = 0; fasilə; }
}
analogWrite (redPin, abs (255 - rood)); // idarə edən RGB led: tərsinə, çünki mənimki tərs tellidir.
analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));
// canlı ledləri idarə etmək
əgər (yaşayır == 2) {levens1 = 0; } əgər (yaşayır == 1) {levens2 = 0; } əgər (yaşayır == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// səviyyəli ledləri idarə etmək
if (levelNumber == 1) {level1 = 255; } if (levelNumber == 2) {level1 = 255; səviyyə2 = 255; } if (levelNumber == 3) {level1 = 255; səviyyə2 = 255; səviyyə3 = 255; } if (levelNumber == 4) {level1 = 255; səviyyə2 = 255; səviyyə3 = 255; səviyyə4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);
}
void addWaarde (int value) {// siyahıya sıxılmış dəyər əlavə edin
əgər (indexNumber == 3) {
qayıtmaq; }
if (giriş [indexNumber] == -1) {
giriş [indexNumber] = dəyər; indexNumber ++; }}
void handleInput () {// siyahıdan 'waarde' (dəyər) çıxarın
waarde = abs (giriş [0] * 100 + giriş [1] * 10 + giriş [2]); giriş [0] = -1; // siqnal girişini sıfırla [1] = -1; giriş [2] = -1;
indexNumber = 0;
Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (mülayim); }
void addColor (int waarde) {// 3 rəqəmli 'waarde' siyahısına əlavə edin
əgər (indexColor == 3) {
qayıtmaq; }
əgər (rəng [indexColor] == -1) {
rəng [indexColor] = cılız; if (color [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }
}
void randomColor () {// işığın təsadüfi bir rəngə çevrilməsini və dəyişənlərdə saxlamasını təmin edin
roodRandom = təsadüfi (0, 255);
groenRandom = təsadüfi (0, 255);
blauwRandom = təsadüfi (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 () {// siyahıdakı 'waarde'ı' Gok '(tahmin) dəyişənlərinə çevirin
roodGok = rəng [0]; groenGok = rəng [1]; blauwGok = rəng [2]; // Gok dəyişənlərinin həqiqi təsadüfi rənglə çox fərqlənib -fərqlənmədiyini yoxlayın: əgər belədirsə, təxminləri üç saniyə ərzində göstərin, yaşıl yanıb -sönün və rəngi yenidən dəyişdirin, icazə verilən fərqi kiçiltmək üçün bir səviyyəyə əlavə edin. üç saniyə təxmin et, qırmızı yanıb -sön və bir həyat kəs.. // əgər həyatın bitmirsə, oyun yenidən başlayır (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= fərq) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); gecikmə (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); gecikmə (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); gecikmə (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (300);
Serial.print ("roodGok =");
Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; fərq -= 50; } başqa {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); gecikmə (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);
resetColor ();
yaşayır--; } if (yaşayır == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); gecikmə (100); resetEverything (); }
}
void resetColor () {// dəyərləri sıfırlamaq, yanlış basmaq və ya hər yeni tahmin üçün istifadə edin (yalnız əminlik üçün)
rəng [0] = -1; rəng [1] = -1; rəng [2] = -1;
indexNumber = 0;
indexColor = 0; }
void resetEverything () {// oyunu yenidən başladın
rəng [0] = -1; rəng [1] = -1; rəng [2] = -1;
indexNumber = 0;
indexColor = 0;
həyat = 3;
rood = 0; groen = 0; blauw = 0;
roodRandom = 0;
groenRandom = 0; blauwRandom = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
səviyyə1 = 255;
səviyyə2 = 0; səviyyə3 = 0; səviyyə4 = 0;
levelNumber = 1;
t = 0;
}
void displayEverything () {// seriyalı monitorda vacib məlumatları göstərmək üçün bundan istifadə edin
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); }
Addım 3: Qurmaq
Aydındır ki, bu layihə üçün gözəl bir tikinti istəyirsiniz. bu hissə təfsir üçün olduqca açıqdır, lakin bunu nəzərə almalı olduğunuz bəzi şeylər var: - ön paneli incə saxlayın, buna görə də hələ də ledlərinizi oradan yapışdıra bilərsiniz və IR qəbuledicisi hələ də işləyir
- Arduino və lehim taxtası üçün quruluşda kifayət qədər yer saxlayın
- Arduinonun gücü üçün arxada bir çuxur olduğundan əmin olun
Kablolama üçün kobud bir sxem əlavə etdim.
Uğurlar, əylənin!