Daftar Isi:

Game Arkade LED Cyclone: 4 Langkah
Game Arkade LED Cyclone: 4 Langkah

Video: Game Arkade LED Cyclone: 4 Langkah

Video: Game Arkade LED Cyclone: 4 Langkah
Video: Arduino Cyclone Arcade Game 2024, September
Anonim
Image
Image
Instal di Fixture
Instal di Fixture

Tujuan dari proyek ini adalah untuk membuat permainan sederhana menggunakan Arduino yang interaktif dan menghibur untuk anak-anak. Saya ingat game arcade Cyclone menjadi salah satu game arcade favorit saya ketika saya masih muda, jadi saya memutuskan untuk menirunya. Ini adalah proyek yang sangat sederhana yang terdiri dari Arduino, rangkaian LED yang dapat dialamatkan secara individual, dan tombol tekan.

Tujuan dari permainan ini adalah untuk menghentikan lampu bersepeda ketika mencapai LED yang ditunjukkan (merah). Jika berhasil, tingkat kesulitan akan meningkat. Jika tidak berhasil, siklus cahaya akan dimulai kembali pada tingkat kesulitan saat ini.

Instruksi ini adalah sumber daya yang sangat besar untuk inti pengkodean saya.

Langkah 1: Kumpulkan Persediaan

  • Komponen utama:

    • Arduino (saya menggunakan UNO)
    • String LED yang dapat dialamatkan secara individual (saya menggunakan tautan)
    • Tombol tekan (saya menggunakan tautan)
    • Papan sirkuit tercetak (PCB) atau papan tempat memotong roti
    • Catu Daya (Saya menggunakan dua catu daya terpisah, Anda dapat menggunakan satu catu daya jika Anda kreatif)

      • 5V 3A untuk LED
      • 9V 1A untuk Arduino
  • Kerangka:

    • Perumahan elektronik (saya memodifikasi perlengkapan lampu kayu dari Goodwill)
    • Rumah LED (Saya memodifikasi jam dinding standar Anda dan mengebor lubang menggunakan pengenal menit sebagai penanda lubang. Gunakan jam kayu jika memungkinkan untuk mempermudah pengeboran.)
    • Rumah kancing (saya menggunakan pipa PVC siku)
  • Alat / Bahan Lainnya:

    • Kabel cadangan untuk sirkuit Anda
    • 10K (resistor pull-down untuk sakelar) dan resistor 470 ohm (untuk kabel data pada LED)
    • Bor untuk membuat lubang untuk menempatkan LED Anda dan dan membuat lubang yang diperlukan di perlengkapan Anda untuk melewatkan kabel
    • Besi solder untuk menyolder sirkuit Anda ke PCB
    • Pistol lem panas untuk mengamankan LED ke perlengkapan Anda
    • Velcro atau beberapa cara untuk mengamankan kerangka bersama
    • Gasket opsional untuk lubang yang dibor untuk dilewati kabel

Langkah 2: Unggah Kode

Pastikan Anda mengunduh dan menambahkan perpustakaan "FastLED"

Inti kode (void loop) terdiri dari dua status: tombol tekan tinggi (End Game) dan tombol tekan rendah (Bermain). Setelah pengguna menekan tombol, alamat LED saat lampu dimatikan dibandingkan dengan alamat LED tengah. Jika tidak sama, semua lampu berkedip merah dua kali dan level saat ini dimulai ulang. Jika sama, cylon (skrip perpustakaan FastLED) berjalan dua kali, tingkat kesulitan meningkat, dan pemutaran dilanjutkan. Setelah pemain mengalahkan level terakhir, cylon berjalan kedelapan kali dan permainan dimulai kembali di level 1.

//Permainan Siklon

#termasuk "FastLED.h" //hingga 50 #menentukan NUM_LEDS 40 #menentukan CENTER_LED 21 #menentukan DATA_PIN 7 #menentukan LED_TYPE WS2811 #menentukan COLOR_ORDER RGB //rentang 0-64 #menentukan BRIGHTNESS 50 //Definisi tingkat kesulitan #define MUDAH 1 #menentukan SEDANG 2 #menentukan KERAS 3 #menentukan ON_SPEED 4 #menentukan SONIC_SPEED 5 #menentukan ROCKET_SPEED 6 #menentukan LIGHT_SPEED 7 #menentukan MISSION_IMPOSSIBLE 8 //Memulai kesulitan dengan tingkat kesulitan = 1; // Tentukan array leds CRGB leds[NUM_LEDS]; // Apakah pemain memenangkan ronde ini? Tag ini digunakan untuk parameter kesulitan. bool wonThisRound = salah; // Lokasi awal lampu sepeda int LEDaddress = 0; // Apakah permainan berjalan? bool Bermain = benar; // Apakah ini kemenangan pertama? bool CycleEnded = benar; // Detail tombol const int buttonPin = 9; int keadaan tombol = 0; // Inisialisasi perpustakaan led dan fungsi arduino void setup() { FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness(KECERAHAN); pinMode(tombolPin, INPUT); Serial.begin(9600); } // Daging dan kentang //Dua Mode - Memainkan dan Mengakhiri Game void loop() { //END GAME buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { Memutar = false; //Pengguna telah menekan tombol, dan LED telah berhenti pada alamat pemenang. for (int i = 0; i < NUM_LEDS; i++) { led = CRGB::Hitam; } leds[CENTER_LED] = CRGB::Merah; leds[LEDaddress] = CRGB::Hijau; FastLED.show(); if (CycleEnded = true) { int diff = abs(CENTER_LED - LEDaddress); //Menemukan jarak antara led yang menyala dan led tengah if (diff == 0) { wonThisRound = true; //Pemain berhasil mengalahkan level jika (kesulitan != MISSION_IMPOSSIBLE) { for (int i = 0; i < 2; i++) { cylon(); } } if (kesulitan == MISSION_IMPOSSIBLE) { for (int i = 0; i < 8; i++) { cylon(); } kesulitan = 0; } peningkatanKesulitan(); wonThisRound = salah; } else { tunda(1000); for (int i = 0; i < 2; i++) { flash(); } } CycleEnded = salah; } alamat LED = 0; penundaan (250); buttonState = digitalRead(buttonPin); if (buttonState == LOW) { Memutar = true; } } //MAINKAN if(Memutar) { for (int i = 0; i < NUM_LEDS; i++) { leds = CRGB::Hitam; //Matikan semua led } leds[CENTER_LED] = CRGB::Red; //Mengatur warna led tengah menjadi led hijau[LEDaddress] = CRGB::Green; //Mengatur warna led cyling menjadi merah FastLED.show(); //Menginisialisasi siklus cahaya LEDaddress++; //Mengatur siklus cahaya ke satu led pada satu waktu if (LEDaddress == NUM_LEDS) { LEDaddress = 0; } delay(getTime(kesulitan)); buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { Memutar = false; CycleEnded = benar; } } } //Parameter Level int getTime(int diff) // Mengembalikan waktu tunda untuk pergerakan led berdasarkan kesulitan { int timeValue = 0; switch (diff) { kasus MUDAH: timeValue = 100; merusak; kasus MEDIUM: timeValue = 80; merusak; kasus SULIT: timeValue = 60; merusak; kasus ON_SPEED: timeValue = 40; merusak; kasus SONIC_SPEED: timeValue = 30; merusak; kasus ROCKET_SPEED: timeValue = 20; merusak; kasus LIGHT_SPEED: timeValue = 13; merusak; kasus MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue;// Mengembalikan jumlah penundaan } //Memenangkan kesulitan meningkatkan parameter void meningkatkanKesulitan() { if (kesulitan != MISSION_IMPOSSIBLE && wonThisRound) { kesulitan++; } } //LED Hilang Tampilkan void flash() { fill_solid(leds, NUM_LEDS, CRGB::Red); FastLED.show(); penundaan (500); fill_solid(led, NUM_LEDS, CRGB::Hitam); FastLED.show(); penundaan (500); } //Menang LED Tampilkan void fadeall() { for(int i = 0; i < NUM_LEDS; i++) { leds.nscale8(250); } } void cylon() { static uint8_t rona = 0; Serial.print("x"); // Pertama geser led ke satu arah for(int i = 0; i = 0; i--) { // Atur led ke-i ke led merah = CHSV(hue++, 255, 255); // Menampilkan led FastLED.show(); // sekarang setelah kita menunjukkan led, reset led ke-i menjadi hitam // leds = CRGB::Black; memudar(); // Tunggu sebentar sebelum kita mengulang dan melakukannya lagi delay(10); } }

Langkah 3: Instal di Fixture

Instal di Fixture
Instal di Fixture
Instal di Fixture
Instal di Fixture

Saya tidak akan membahas detailnya di bagian ini. Ada seribu cara berbeda untuk melakukan bagian ini dan saya pikir Anda harus kreatif untuk membuatnya terlihat seperti yang Anda suka. Meskipun demikian, jam ini cukup nyaman digunakan untuk memasang LED karena memiliki indikator menit yang dapat saya gunakan sebagai tanda bor. Selain itu, penutup kaca juga memungkinkan saya menggunakan ini sebagai meja.

Velcro juga sangat berguna untuk mengamankan perlengkapan LED ke perlengkapan rumah elektronik. Saya juga menggunakan velcro di Arduino. Ini membuatnya sangat nyaman untuk menarik Arduino keluar jika saya ingin memodifikasi kodenya.

Direkomendasikan: