Isi kandungan:

Permainan Arked LED Cyclone: 4 Langkah
Permainan Arked LED Cyclone: 4 Langkah

Video: Permainan Arked LED Cyclone: 4 Langkah

Video: Permainan Arked LED Cyclone: 4 Langkah
Video: Arduino Cyclone Arcade LED Chaser Game 2024, November
Anonim
Image
Image
Pasang dalam lekapan
Pasang dalam lekapan

Tujuan projek ini adalah untuk membuat permainan sederhana menggunakan Arduino yang akan interaktif dan menghiburkan untuk anak-anak. Saya masih ingat permainan Cyclone arcade menjadi salah satu permainan arcade kegemaran saya ketika saya masih muda, jadi saya memutuskan untuk menirunya. Ini adalah projek yang sangat sederhana yang terdiri daripada Arduino, rentetan LED yang dapat ditangani secara individu, dan butang tekan.

Matlamat permainan ini adalah untuk menghentikan lampu berbasikal ketika mencapai LED (merah) yang ditunjukkan. Sekiranya berjaya, tahap kesukaran akan meningkat. Sekiranya tidak berjaya, kitaran cahaya akan dimulakan semula pada tahap kesukaran semasa.

Instruksional ini adalah sumber yang sangat besar untuk inti pengkodan saya.

Langkah 1: Kumpulkan Bekalan

  • Komponen Utama:

    • Arduino (saya menggunakan UNO)
    • Rentetan daripada LED yang boleh ditujukan secara individu (saya menggunakan pautan)
    • Tekan butang (saya menggunakan pautan)
    • Papan litar bercetak (PCB) atau papan roti
    • Bekalan Kuasa (Saya menggunakan dua bekalan kuasa yang berasingan, anda mungkin akan melepaskannya jika anda kreatif)

      • 5V 3A untuk LED
      • 9V 1A untuk Arduino
  • Rangka Kerja:

    • Perumahan elektronik (saya mengubah suai lampu kayu dari Muhibah)
    • Perumahan LED (Saya mengubah jam dinding standard dan lubang yang digerudi menggunakan pengecam minit sebagai tanda lubang. Gunakan jam kayu jika mungkin untuk membuat penggerudian lebih mudah.)
    • Perumahan butang (saya menggunakan paip PVC siku)
  • Alatan / Bahan Lain:

    • Pendawaian ganti untuk litar anda
    • Perintang 10K (perintang tarik untuk suis) dan perintang 470 ohm (untuk wayar data pada LED)
    • Latih tubi untuk membuat lubang untuk menempatkan LED anda dan dan membuat lubang yang diperlukan dalam lekapan anda untuk melewati wayar
    • Pateri solder untuk menyolder litar anda ke PCB
    • Pistol gam panas untuk mengamankan LED ke lekapan anda
    • Velcro atau beberapa kaedah untuk mengamankan rangka kerja bersama
    • Gasket pilihan untuk lubang yang digerudi agar wayar dapat dilalui

Langkah 2: Muat naik Kod

Pastikan anda memuat turun dan menambah pustaka "FastLED"

Inti kod (gelung void) terdiri daripada dua keadaan: butang tekan tinggi (Permainan Akhir) dan butang tekan rendah (Bermain). Setelah pengguna menekan butang, alamat LED di mana lampu dihentikan dibandingkan dengan alamat LED tengah. Sekiranya tidak sama, semua lampu menyala merah dua kali dan tahap semasa dimulakan semula. Sekiranya sama, cylon (skrip perpustakaan FastLED) berjalan dua kali, tahap kesukaran meningkat, dan memainkan semula. Setelah pemain mengalahkan tahap terakhir, cylon berjalan kelapan kali dan permainan dimulakan semula di tahap 1.

// Permainan Taufan

#include "FastLED.h" // hingga 50 #tentukan NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // range 0-64 #define BRIGHTNESS 50 // Definisi tahap kesukaran # tentukan MUDAH 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 // Mula kesukaran int kesukaran = 1; // Tentukan susunan LED CRGB led [NUM_LEDS]; // Adakah pemain memenangi pusingan ini? Teg ini digunakan untuk parameter kesukaran. bool wonThisRound = palsu; // Lokasi permulaan lampu berkitar int LEDaddress = 0; // Adakah permainan berjalan? bool Bermain = benar; // Adakah ini kemenangan pertama? bool CycleEnded = benar; // Butang butiran const int buttonPin = 9; int buttonState = 0; // Memulakan pustaka yang dipimpin dan fungsi arduino membatalkan penyediaan () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (KECERDASAN); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Daging dan kentang // Dua Mod - Main dan Tamatkan Gelung kekosongan Permainan () {// TAMAT PERMAINAN butangState = digitalRead (buttonPin); jika (buttonState == TINGGI) {Bermain = salah; // Pengguna telah menekan butang, dan LED berhenti di alamat pemenang. untuk (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Hitam; } leds [CENTER_LED] = CRGB:: Merah; leds [LEDaddress] = CRGB:: Hijau; FastLED.show (); jika (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Mencari jarak antara lampu LED dan pusat diketuai jika (diff == 0) {wonThisRound = true; // Pemain berjaya mengalahkan tahap jika (kesukaran! = MISI_TIDAKKAN) {untuk (int i = 0; i <2; i ++) {cylon (); }} jika (kesukaran == MISSION_IMPOSSIBLE) {untuk (int i = 0; i <8; i ++) {cylon (); } kesukaran = 0; } tingkatkan Kesukaran (); wonThisRound = palsu; } lain {kelewatan (1000); untuk (int i = 0; i <2; i ++) {flash (); }} CycleEnded = palsu; } Alamat LED = 0; kelewatan (250); buttonState = digitalRead (buttonPin); jika (buttonState == RENDAH) {Bermain = benar; }} // BERMAIN jika (Bermain) {untuk (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Hitam; // Mematikan semua leds} leds [CENTER_LED] = CRGB:: Merah; // Menetapkan warna led pusat ke led hijau [LEDaddress] = CRGB:: Green; // Menetapkan warna led cyling menjadi FastLED.show merah) (); // Memulakan LED light cycle ++; // Menetapkan kitaran cahaya ke satu petunjuk pada satu masa jika (LEDaddress == NUM_LEDS) {LEDaddress = 0; } kelewatan (getTime (kesukaran)); buttonState = digitalRead (buttonPin); jika (buttonState == TINGGI) {Bermain = salah; CycleEnded = benar; }}} // Parameter Tahap int getTime (int diff) // Mengembalikan kelewatan masa untuk pergerakan dipimpin berdasarkan kesukaran {int timeValue = 0; suis (diff) {case MUDAH: timeValue = 100; rehat; kes MEDIUM: timeValue = 80; rehat; kes HARD: timeValue = 60; rehat; kes ON_SPEED: timeValue = 40; rehat; kes SONIC_SPEED: timeValue = 30; rehat; kes ROCKET_SPEED: timeValue = 20; rehat; kes LIGHT_SPEED: timeValue = 13; rehat; kes MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Pulangkan jumlah kelewatan} // Kesukaran menang meningkatkan parameter batal kenaikan Kesukaran () {if (kesukaran! = MISSION_IMPOSSIBLE && wonThisRound) {kesukaran ++; }} // Lost LED Show flash void () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); kelewatan (500); fill_solid (led, NUM_LEDS, CRGB:: Hitam); FastLED.show (); kelewatan (500); } // Menang LED Show void fadeall () {untuk (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} tiang kosong () {static uint8_t hue = 0; Cetakan bersiri ("x"); // Luncurkan pertama led ke satu arah untuk (int i = 0; i = 0; i--) {// Tetapkan led ke led merah = CHSV (rona ++, 255, 255); // Tunjukkan leds FastLED.show (); // sekarang setelah kita menunjukkan led, tetapkan semula led ke hitam // leds = CRGB:: Black; fadeall (); // Tunggu sebentar sebelum kita berpusing dan lakukan lagi kelewatan (10); }}

Langkah 3: Pasang di Fixture

Pasang dalam lekapan
Pasang dalam lekapan
Pasang dalam lekapan
Pasang dalam lekapan

Saya tidak akan memperincikan bahagian ini. Terdapat seribu cara yang berbeza untuk menyelesaikan bahagian ini dan saya fikir anda harus kreatif untuk membuatnya kelihatan seperti yang anda suka. Oleh itu, jam itu cukup mudah digunakan untuk memasang LED kerana ia mempunyai petunjuk kecil yang dapat saya gunakan sebagai tanda gerudi. Juga, penutup kaca juga membolehkan saya menggunakannya sebagai meja.

Velcro juga berguna untuk mengamankan lekapan LED ke lekapan perumahan elektronik. Saya juga menggunakan velcro di Arduino. Ini menjadikannya sangat senang untuk menarik Arduino keluar sekiranya saya ingin mengubah kodnya.

Disyorkan: