İçindekiler:
Video: Cyclone LED Arcade Oyunu: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bu projenin amacı, çocuklar için etkileşimli ve eğlenceli olacak bir Arduino kullanarak basit bir oyun yaratmaktı. Cyclone atari oyununun gençken en sevdiğim atari oyunlarından biri olduğunu hatırlıyorum, bu yüzden onu kopyalamaya karar verdim. Bu, bir Arduino, ayrı ayrı adreslenebilir LED'ler dizisi ve bir butondan oluşan çok basit bir projedir.
Oyunun amacı, belirtilen (kırmızı) LED'e ulaştığında bisiklet ışığını durdurmaktır. Başarılı olursa, zorluk seviyesi artacaktır. Başarısız olursa, ışık döngüsü mevcut zorluk seviyesinde yeniden başlar.
Bu talimat, kodlamamın özü için büyük bir kaynaktı.
Adım 1: Sarf Malzemelerini Toplayın
-
Ana bileşenler:
- Arduino (Bir UNO kullandım)
- Ayrı ayrı adreslenebilir LED dizisi (bağlantıyı kullandım)
- Basma düğmesi (bağlantıyı kullandım)
- Baskılı devre kartı (PCB) veya devre tahtası
-
Güç Kaynağı (İki ayrı güç kaynağı kullandım, yaratıcıysanız bir tanesini alabilirsiniz)
- LED'ler için 5V 3A
- Arduino için 9V 1A
-
Çerçeve:
- Elektronik muhafaza (Goodwill'den bir ahşap lamba armatürünü değiştirdim)
- LED muhafaza (Standart duvar saatinizi değiştirdim ve delik işaretleri olarak dakika tanımlayıcılarını kullanarak delikler açtım. Delmeyi kolaylaştırmak için mümkünse ahşap bir saat kullanın.)
- Düğme muhafazası (ben dirsek PVC boru kullandım)
-
Araçlar / Diğer Malzemeler:
- Devreniz için yedek kablolama
- 10K (anahtar için aşağı çekme direnci) ve 470 ohm (LED'lerdeki veri kablosu için) dirençler
- LED'lerinizi yerleştirmek için delikler oluşturmak ve armatürünüzde kabloları geçirmek için gerekli delikleri açmak için matkap.
- Devrenizi bir PCB'ye lehimlemek için havya
- LED'leri armatürünüze sabitlemek için sıcak tutkal tabancası
- Velcro veya çerçeveyi bir arada tutmanın bazı yolları
- Tellerin geçmesi için açılan delikler için isteğe bağlı contalar
2. Adım: Kodu Yükleyin
"FastLED" kitaplığını indirip eklediğinizden emin olun
Kodun özü (boş döngü) iki durumdan oluşur: yüksek basma düğmesi (Oyunu Sonlandır) ve düşük basma düğmesi (Oynuyor). Kullanıcı düğmeye bastığında, ışığın durduğu LED adresi, merkez LED'in adresi ile karşılaştırılır. Aynı değilse, tüm ışıklar iki kez kırmızı yanıp söner ve mevcut seviye yeniden başlar. Aynıysa, cylon (FastLED kitaplık komut dosyası) iki kez çalışır, zorluk seviyesi artar ve oynatma devam eder. Oyuncu son seviyeyi geçtiğinde, cylon sekizinci kez koşar ve oyun 1. seviyede yeniden başlar.
// Siklon Oyunu
#include "FastLED.h" //50'ye kadar #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB //aralığı 0-64 #define PARLAKLIK 50 //Zorluk seviyelerinin tanımı #define EASY 1 #define MEDIUM 2 #define HARD 3 #define ON_SPEED 4 #define SONIC_SPEED 5 #define ROCKET_SPEED 6 #define LIGHT_SPEED 7 #define MISSION_IMPOSSIBLE 8 //Başlangıç zorluğu int zorluk = 1; // Led dizisini tanımlayın CRGB ledleri[NUM_LEDS]; // Oyuncu bu raundu kazandı mı? Bu etiket zorluk parametreleri için kullanılır. bool wonThisRound = yanlış; // Dönen ışığın başlangıç konumu int LEDaddress = 0; // Oyun çalışıyor mu? bool Oynama = doğru; // Bu ilk galibiyet mi? bool CycleEnded = true; // Düğme ayrıntıları const int buttonPin = 9; int düğmeDurumu = 0; // led kütüphanesini ve arduino fonksiyonlarını sıfırla void setup() { FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness(PARLAKLIK); pinMode(buttonPin, INPUT); Seri.başla(9600); } // Et ve patates //İki Mod - Oyun Oynama ve Oyunu Bitir void loop() { // OYUNU SONLANDIR buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { Playing = false; //Kullanıcı düğmeye bastı ve kazanan adresteki LED durdu. for (int i = 0; i < NUM_LEDS; i++) { led'ler = CRGB::Siyah; } ledler[CENTER_LED] = CRGB::Kırmızı; led'ler[LEDadresi] = CRGB::Yeşil; FastLED.show(); if (CycleEnded = true) { int diff = abs(CENTER_LED - LEDaddress); // Yanan led ile merkez led arasındaki mesafeyi bulur if (diff == 0) { wonThisRound = true; //Oyuncu seviyeyi başarıyla geçti if (difficulty != MISSION_IMPOSSIBLE) { for (int i = 0; i < 2; i++) { cylon(); } } if (zorluk == MISSION_IMPOSSIBLE) { for (int i = 0; i < 8; i++) { cylon(); } zorluk = 0; } zorluk artışı(); wonThisRound = yanlış; } başka { gecikme(1000); for (int i = 0; i < 2; i++) { flash(); } } CycleEnded = false; } LEDadresi = 0; gecikme(250); buttonState = digitalRead(buttonPin); if (buttonState == LOW) { Playing = true; } } //PLAYING if(Playing) { for (int i = 0; i < NUM_LEDS; i++) { led'ler = CRGB::Black; //Tüm ledleri kapatır } ledler[CENTER_LED] = CRGB::Kırmızı; //Merkez led rengini yeşil ledlere ayarlar[LEDadresi] = CRGB::Yeşil; //Cyling led rengini kırmızıya ayarlar FastLED.show(); //Işık döngüsü LEDadresi'ni başlatır++; //(LEDadresi == NUM_LEDS) { LEDadresi = 0; } gecikme(getTime(zorluk)); buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { Playing = false; CycleEnded = true; } } } //Seviye Parametreleri int getTime(int diff) // Zorluk bazında ledli hareket için zaman gecikmesini döndürür { int timeValue = 0; geçiş (fark) { durum KOLAY: timeValue = 100; kırmak; durum ORTA: timeValue = 80; kırmak; durum ZOR: timeValue = 60; kırmak; durum ON_SPEED: timeValue = 40; kırmak; durum SONIC_SPEED: timeValue = 30; kırmak; durum ROCKET_SPEED: timeValue = 20; kırmak; durum LIGHT_SPEED: timeValue = 13; kırmak; case MISSION_IMPOSSIBLE: timeValue = 7; } timeValue geri;// Gecikme miktarını döndür } //Kazanma zorluğu arttırma parametreleri void boostDifficulty() { if (difficulty != MISSION_IMPOSSIBLE && wonThisRound) { zorluk++; } } //Kayıp LED Gösterisi void flash() { fill_solid(led'ler, NUM_LEDS, CRGB::Kırmızı); FastLED.show(); gecikme(500); fill_solid(led'ler, NUM_LEDS, CRGB::Siyah); FastLED.show(); gecikme(500); } //Won LED Show void fadeall() { for(int i = 0; i < NUM_LEDS; i++) { leds.nscale8(250); } } void cylon() { statik uint8_t hue = 0; Seri.print("x"); // Önce led'i bir yöne kaydırın for(int i = 0; i = 0; i--) { // i'inci led'i kırmızı ledlere ayarlayın = CHSV(hue++, 255, 255); // Ledleri göster FastLED.show(); // ledleri gösterdiğimize göre, i'nci led'i siyaha sıfırlayın // ledler = CRGB::Black; karartma(); // Dönüp dolaşmadan önce biraz bekleyip tekrar yapalım delay(10); } }
3. Adım: Fikstürde Kurun
Bu bölümde ayrıntılara girmeyeceğim. Bu kısım hakkında gitmenin binlerce farklı yolu var ve bence beğendiğiniz gibi görünmesi için yaratıcı olmalısınız. Bununla birlikte, matkap işaretleri olarak kullanabileceğim küçük göstergelere sahip olduğundan, saat LED'leri yerleştirmek için oldukça uygundu. Ayrıca cam kapak da bunu masa olarak kullanmamı sağlıyor.
Velcro, LED armatürünü elektronik muhafaza armatürüne sabitlemek için de çok kullanışlıydı. Arduino'da da cırt cırt kullandım. Bu, kodu değiştirmek istersem Arduino'yu çıkarmayı çok kolaylaştırdı.
Önerilen:
Octarine: WS2812 RGB LED'lerle Renk Eşleştirme Oyunu: 6 Adım
Octarine: WS2812 RGB LED'leri ile Renk Eşleştirme Oyunu: Sihrin rengi Octarine. Canlıydı ve canlı bir şekilde parlıyordu ve hayal gücünün tartışmasız pigmentiydi, çünkü ortaya çıktığı her yerde, yalnızca maddenin büyülü aklın güçlerinin hizmetkarı olduğunun bir işaretiydi. Büyücüydü
FPGA Cyclone IV DueProLogic Raspberry Pi Kamerayı Kontrol Ediyor: 5 Adım
FPGA Cyclone IV DueProLogic Raspberry Pi Kamerayı Kontrol Ediyor: FPGA DueProLogic resmi olarak Arduino için tasarlanmış olmasına rağmen, FPGA ve Raspberry Pi 4B'yi iletilebilir hale getireceğiz. FPGA açısını çevirmek için
FPGA Cyclone IV DueProLogic - Basmalı Düğme ve LED: 5 Adım
FPGA Cyclone IV DueProLogic - Basmalı Düğme ve LED: Bu eğitimde, harici LED devresini kontrol etmek için FPGA kullanacağız. Aşağıdaki görevleri uygulayacağız(A) LED'i kontrol etmek için FPGA Cyclone IV DuePrologic üzerindeki butonları kullanın.(B) Flash LED on & periyodik olarak kapalıVideo demo Lab
FPGA Cyclone IV DueProLogic Servo Motoru Kontrol Ediyor: 4 Adım
FPGA Cyclone IV DueProLogic Servo Motor Kontrolleri: Bu dersimizde servo motoru kontrol etmek için Verilog kodu yazacağız. Servo SG-90, Waveshare tarafından üretilmiştir. Servo motoru satın aldığınızda, çalışma voltajını, maksimum torku ve önerilen Pu'yu listeleyen bir veri sayfası alabilirsiniz
Stackers Arcade Oyunu: 6 Adım (Resimlerle)
Stackers Arcade Game: Merhaba arkadaşlar, bugün sizlerle bir sürü Ws2812b LED'leri ve bir mikrodenetleyici/FPGA ile yapabileceğiniz bu muhteşem atari oyununu paylaşmak istiyorum. İşte Stack Overflow - klasik bir arcade oyununun donanım uygulamamız. Bir okul projesi olarak başlayan şey