Mündəricat:

Siklon LED Arcade Oyunu: 4 addım
Siklon LED Arcade Oyunu: 4 addım

Video: Siklon LED Arcade Oyunu: 4 addım

Video: Siklon LED Arcade Oyunu: 4 addım
Video: ELRAENN - EKİP İLE LEFT 4 DEAD 2 OYNUYOR #1 2024, Sentyabr
Anonim
Image
Image
Armaturda quraşdırın
Armaturda quraşdırın

Bu layihənin məqsədi, uşaqlar üçün interaktiv və əyləncəli bir Arduino istifadə edərək sadə bir oyun yaratmaq idi. Cyclone arcade oyununun gəncliyimdə ən çox sevdiyim arcade oyunlarından biri olduğunu xatırlayıram, buna görə də onu təkrar etməyə qərar verdim. Bu, bir Arduino, ayrı -ayrı ünvanlı LEDlər və bir düymədən ibarət çox sadə bir layihədir.

Oyunun məqsədi, göstərilən (qırmızı) LED -ə çatanda velosiped işığını dayandırmaqdır. Uğurlu olarsa, çətinlik səviyyəsi artacaq. Uğursuz olarsa, işıq dövrü mövcud çətinlik səviyyəsində yenidən başlayacaq.

Bu təlimat kodlaşdırma işinin əsası üçün böyük bir qaynaq idi.

Addım 1: Təchizat toplayın

  • Əsas komponentlər:

    • Arduino (UNO istifadə etdim)
    • Fərdi ünvanlı LED -lərin xətti (linkdən istifadə etdim)
    • Düyməni basın (linkdən istifadə etdim)
    • Çap edilmiş elektron kart (PCB) və ya çörək taxtası
    • Güc Təchizatı (İki ayrı enerji təchizatı istifadə etdim, əgər yaradıcı olsanız, birini ala bilərsiniz)

      • LEDlər üçün 5V 3A
      • Arduino üçün 9V 1A
  • Çərçivə:

    • Elektron korpusu (Goodwill -dən taxta lampa qurğusunu dəyişdirdim)
    • LED korpusu (Standart divar saatınızı dəyişdirdim və deşik işarələri olaraq dəqiqəlik identifikatorlardan istifadə edərək deliklər qazdım. Qazmağı asanlaşdırmaq üçün mümkünsə taxta saat istifadə edin.)
    • Düymə gövdəsi (bir dirsək PVC boru istifadə etdim)
  • Alətlər / Digər Materiallar:

    • Dövrünüz üçün ehtiyat naqilləri
    • 10K (açar üçün açılan müqavimət) və 470 ohm (LED-lərdəki məlumat teli üçün) rezistorlar
    • LED -lərinizi yerləşdirmək üçün deliklər yaratmaq və armaturunuzda tellərin keçməsi üçün lazımi deliklər etmək üçün qazın
    • Dövrünüzü bir PCB -yə lehimləmək üçün havya
    • LEDləri armaturunuza bağlamaq üçün isti yapışqan tabancası
    • Velcro və ya çərçivəni birlikdə təmin etmək üçün bir vasitə
    • Tellərin keçməsi üçün qazılan deliklər üçün isteğe bağlı contalar

Addım 2: Kodu yükləyin

"FastLED" kitabxanasını yükləyib əlavə etdiyinizə əmin olun

Kodun nüvəsi (boşluq döngəsi) iki vəziyyətdən ibarətdir: yüksək düyməni (Oyunu bitir) və aşağı düyməni (Çalma). İstifadəçi düyməni basdıqdan sonra işığın dayandırıldığı LED ünvanı mərkəzi LED -in ünvanı ilə müqayisə edilir. Eyni deyilsə, bütün işıqlar iki dəfə qırmızı yanıb -sönür və cari səviyyəsi yenidən başlayır. Eyni olduqları təqdirdə, cylon (FastLED kitabxana skripti) iki dəfə işləyir, çətinlik səviyyəsi artır və oyun davam edir. Oyunçu son səviyyəni keçdikdən sonra, silon səkkizinci dəfə qaçır və oyun 1 -ci səviyyədə yenidən başlayır.

// Siklon Oyunu

#"FastLED.h" daxil edin // 50-ə qədər #NUM_LEDS 40 müəyyən edin #CENTER_LED 21 təyin edin #DATA_PIN 7 təyin edin #LED_TYPE WS2811 #RENLİ_SAYFA RGB təyin edin // 0-64 #BRIGHTNESS 50 müəyyən edin #Çətinlik səviyyələrini təyin edin EASY 1 #define MEDIUM 2 #define HARD 3 #define ON_SPEED 4 #define SONIC_SPEED 5 #deffine ROCKET_SPEED 6 #deffine LIGHT_SPEED 7 #define MISSION_IMPOSSIBLE 8 // Başlama çətinliyi int çətinlik = 1; // LEDlər CRGB ledlərinin [NUM_LEDS] sıra təyin edin; // Oyunçu bu turu qazandı? Bu etiket çətinlik parametrləri üçün istifadə olunur. bool wonThisRound = yalan; // Velosiped işığının başlanğıc yeri int LEDaddress = 0; // Oyun gedir? bool Playing = doğru; // Bu, ilk qələbədirmi? bool CycleEnded = doğru; // Düymə detalları const int buttonPin = 9; int düyməsiState = 0; // Led kitabxanasını və arduino funksiyalarını boş yerə qoymağı başladın () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (düyməPin, GİRİŞ); Serial.begin (9600); } // Ət və kartof // İki Rejim - Oyunun Void Loopunu Çalma və Bitirmə () {// OYUNU SONLAYIN buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // İstifadəçi düyməni basdı və LED qalib ünvanda dayandı. for (int i = 0; i <NUM_LEDS; i ++) {led = CRGB:: Qara; } led [CENTER_LED] = CRGB:: Qırmızı; led [LEDaddress] = CRGB:: Yaşıl; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // (diff == 0) {wonThisRound = true; // Oyunçu (çətinlik! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cilon (); }} if (çətinlik == MISSION_IMPOSSIBLE) {üçün (int i = 0; i <8; i ++) {cilon (); } çətinlik = 0; } artırDifficulty (); wonThisRound = yalan; } başqa {gecikmə (1000); for (int i = 0; i <2; i ++) {flash (); }} CycleEnded = yalan; } LED ünvanı = 0; gecikmə (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Oynama = doğru; }} // PLAYING if (Playing) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Bütün ledləri söndürür} led [CENTER_LED] = CRGB:: Red; // Mərkəzi led rəngini yaşıl ledlərə təyin edir [LEDaddress] = CRGB:: Green; // Silindrli led rəngi qırmızı FastLED.show () olaraq təyin edir; // LEDaddress ++ işıq dövrünü işə salır; // (LEDaddress == NUM_LEDS) {LEDaddress = 0; } gecikmə (getTime (çətinlik)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = doğru; }}} // Səviyyə Parametrləri int getTime (int diff) // Çətinliyə əsaslanan led hərəkət əsası üçün vaxt gecikməsini qaytarır {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; fasilə; halda MEDIUM: timeValue = 80; fasilə; vəziyyət HARD: timeValue = 60; fasilə; hal ON_SPEED: timeValue = 40; fasilə; hal SONIC_SPEED: timeValue = 30; fasilə; hal ROCKET_SPEED: timeValue = 20; fasilə; hal LIGHT_SPEED: timeValue = 13; fasilə; hal MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Gecikmə məbləğini qaytarın} // Qazanılmış çətinlik parametrləri artırır void artımÇətinlik () {if (çətinlik! = MISSION_IMPOSSIBLE && wonThisRound) {çətinlik ++; }} // Lost LED Show void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); gecikmə (500); fill_solid (ledlər, NUM_LEDS, CRGB:: Qara); FastLED.show (); gecikmə (500); } // LED Show qazandı fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} boş silon () {statik uint8_t hue = 0; Serial.print ("x"); // Əvvəlcə ledi bir istiqamətə sürüşdürün (int i = 0; i = 0; i--) {// I-ci ledi qırmızı ledlərə = CHSV (hue ++, 255, 255); // LEDləri FastLED.show () göstərin; // indi ledləri göstərdiyimiz üçün, i'th'i qara rəngə qaytarın // leds = CRGB:: Black; fadeall (); // Ətrafda dönməzdən əvvəl bir az gözləyin və bunu gecikdirin (10); }}

Addım 3: Armatura quraşdırın

Armaturda quraşdırın
Armaturda quraşdırın
Armaturda quraşdırın
Armaturda quraşdırın

Bu bölmədə detallara girməyəcəyəm. Bu hissəni keçməyin min fərqli yolu var və zövqünüzə uyğun görünməsi üçün yaradıcı olmalısınız. Demək olar ki, saat LED -lərin yerləşdirilməsi üçün istifadə etmək olduqca rahat idi, çünki qazma işarəsi kimi istifadə edə bildiyim dəqiqəlik göstəricilərə malik idi. Ayrıca, şüşə örtük də bir masa kimi istifadə etməyimə imkan verir.

Velcro, LED armaturunu elektronika korpusuna bağlamaq üçün də çox faydalı idi. Arduino'da da cırtdan istifadə etdim. Bu, kodu dəyişdirmək istəsəm, Arduinonu çıxarmaq üçün çox rahat etdi.

Tövsiyə: