Mündəricat:

IR-Uzaqdan Rəng Tahmini Oyunu: 3 addım
IR-Uzaqdan Rəng Tahmini Oyunu: 3 addım

Video: IR-Uzaqdan Rəng Tahmini Oyunu: 3 addım

Video: IR-Uzaqdan Rəng Tahmini Oyunu: 3 addım
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Noyabr
Anonim
IR Uzaqdan Rəng Tahmini Oyunu
IR Uzaqdan Rəng Tahmini Oyunu

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

Ehtiyac duyulan hissələr
Ehtiyac duyulan 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

Qurmaq
Qurmaq
Qurmaq
Qurmaq
Qurmaq
Qurmaq
Qurmaq
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ə: