Mündəricat:
Video: IR-Uzaqdan Rəng Tahmini Oyunu: 3 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
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!
Tövsiyə:
Arduino RGB Rəng Seçici - Real Həyat Obyektlərindən Rəng Seçin: 7 Addım (Şəkillərlə)
Arduino RGB Rəng Seçici - Real Həyat Nəsillərindən Rəng Seçin: Kompüterinizdə və ya cib telefonunuzda real həyatda gördüyünüz rəngləri yenidən yaratmağa imkan verən bu Arduino əsaslı RGB rəng seçici ilə fiziki obyektlərdən rəngləri asanlıqla seçin. Ucuz bir TCS347 istifadə edərək obyektin rəngini skan etmək üçün sadəcə bir düyməni basmaq kifayətdir
Sadə Python Nömrəsi Tahmini Oyunu: 11 addım
Sadə Python Nömrəsi Tahmini Oyunu: Bu dərsdə Pycharm tətbiqində sadə Python sayı tahmin oyunu yaratmağı öyrədəcəyik. Python həm yeni başlayanlar, həm də mütəxəssislər üçün əla olan bir skript dilidir. Pythondakı kodlaşdırma tərzini oxumaq və izləmək asandır
"Rəng Maçı" (Refleks Oyunu): 4 addım
"Rəng Maçı" (Refleks Oyunu): Giriş: Məktəb layihəm üçün nə edəcəyimi bilmirdim, amma bir az düşündükdən sonra bir refleks oyunu etməyi qərara aldım. Axı biz bir oyun məktəbiyik. İnteraktiv və bənzərsiz bir şey etmək məcburiyyətindəyik, buna görə bir oyun mükəmməl olardı! Hər şeyin necə olduğuna sevinirəm
LED Oyunu: Mavi Rəng: 4 addım
LED Oyunu: Mavi Rəng: Bu LED oyununda oyunçular LEDləri mavi etmək üçün joystickdən istifadə edirlər. Ortada bir işıq mavi yanır və oyunçular ya sol yarısını, ya da sağ yarısını mavi rəngə çevirməlidir. Sarı işıq LED -lərdən birini təsadüfi olaraq yandırır və oyunçular sevinclərini dəyişməlidirlər
Zəhmli IPod Touch (1 -ci Nəsil) Oyunu Boy Rəng Çantası: 5 addım
Awesome IPod Touch (1st Gen) Game Boy Color Case: bu köhnə GB rəngindən hazırlanmış bir ipod çantasıdır. Gördüyünüz kimi, hələ də qabaqda bir oyun oğlanına bənzəyir, ancaq arxada bir ipod var! ipodunuzun oğurlanmasını istəmirsinizsə yaxşıdır, çünki köhnə, cılız bir oyunçuya bənzəyir