Sadržaj:

Ciklona LED arkadna igra: 4 koraka
Ciklona LED arkadna igra: 4 koraka

Video: Ciklona LED arkadna igra: 4 koraka

Video: Ciklona LED arkadna igra: 4 koraka
Video: Добро пожаловать в Рэдвью! - Прохождение Need For Speed: Rivals #1 2024, Septembar
Anonim
Image
Image
Instalirajte u Fixture
Instalirajte u Fixture

Namjera ovog projekta bila je stvoriti jednostavnu igru koristeći Arduino koja bi bila interaktivna i zabavna za djecu. Sjećam se da je arkadna igra Cyclone jedna od mojih omiljenih arkadnih igara dok sam bila mlađa, pa sam odlučila da je ponovim. Ovo je vrlo jednostavan projekt koji se sastoji od Arduina, niza LED -ova koje se pojedinačno mogu adresirati i tipke.

Cilj igre je zaustaviti biciklističko svjetlo kada dosegne označenu (crvenu) LED diodu. Ako uspije, nivo težine će se povećati. Ako ne uspije, svjetlosni ciklus će se ponovo pokrenuti na trenutnom nivou težine.

Ovo uputstvo je bilo ogroman resurs za jezgro mog kodiranja.

Korak 1: Prikupite potrepštine

  • Glavne komponente:

    • Arduino (koristio sam UNO)
    • Niz pojedinačno adresabilnih LED dioda (koristio sam vezu)
    • Pritisnite dugme (koristio sam vezu)
    • Štampana ploča (PCB) ili matična ploča
    • Napajanje (koristio sam dva odvojena izvora napajanja, možda ćete se izvući ako ste kreativni)

      • 5V 3A za LED diode
      • 9V 1A za Arduino
  • Okvir:

    • Kućište elektronike (izmijenio sam drveno svjetlo iz Goodwill -a)
    • LED kućište (izmijenio sam vaš standardni zidni sat i izbušio rupe koristeći identifikatore minuta kao oznake rupa. Upotrijebite drveni sat ako je moguće za lakše bušenje.)
    • Kućište dugmadi (koristio sam lakatnu PVC cijev)
  • Alati / drugi materijali:

    • Rezervno ožičenje za vaš krug
    • 10K (otporni otpornik za prekidač) i 470 ohma (za podatkovnu žicu na LED diodama)
    • Bušite za stvaranje rupa u koje će se smjestiti vaše LED diode i napraviti sve potrebne rupe u vašem uređaju za prolaz žica
    • Lemilica za lemljenje vašeg kola na PCB
    • Pištolj za vruće ljepilo za pričvršćivanje LED dioda na vaš uređaj
    • Čičak ili neko drugo sredstvo za zajedničko pričvršćivanje okvira
    • Opciono zaptivke za rupe izbušene za prolaz žica

Korak 2: Otpremite kôd

Obavezno preuzmite i dodajte biblioteku "FastLED"

Jezgro koda (void loop) sastoji se od dva stanja: visoko pritisnuto dugme (Kraj igre) i nisko pritisnuto dugme (sviranje). Kada korisnik pritisne dugme, LED adresa na kojoj je svjetlo bilo zaustavljeno uspoređuje se s adresom središnje LED diode. Ako nisu isti, sva svjetla dvaput trepere crveno i trenutni nivo se ponovo pokreće. Ako su isti, cylon (skripta FastLED biblioteke) radi dva puta, nivo težine se povećava i igranje se nastavlja. Nakon što igrač pobijedi posljednji nivo, cylon trči osmi put i igra se ponovo pokreće na nivou 1.

// Igra ciklona

#include "FastLED.h" // do 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // raspon 0-64 #define BRIGHTNESS 50 // Definicija nivoa težine #define LAKO 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 // početna poteškoća int density = 1; // Definiranje niza LED dioda CRGB LED dioda [NUM_LEDS]; // Je li igrač pobijedio u ovoj rundi? Ova oznaka se koristi za parametre težine. bool wonThisRound = false; // Početna lokacija biciklističkog svjetla int LEDaddress = 0; // Da li igra radi? bool svira = istina; // Je li ovo prva pobjeda? bool CycleEnded = true; // Detalji dugmeta const int buttonPin = 9; int buttonState = 0; // Inicijalizacija LED biblioteke i arduino funkcija void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Meso i krumpir // Dva načina - Igranje i kraj igre void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // Korisnik je pritisnuo dugme i LED je prestao na dobitnoj adresi. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; } LED diode [CENTER_LED] = CRGB:: Crveno; LED diode [LED adresa] = CRGB:: Zelena; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDadress); // Pronalazi udaljenost između upaljenog LED -a i središnjeg LED -a if (diff == 0) {wonThisRound = true; // Igrač je uspješno pobijedio nivo if (poteškoća! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} ako (poteškoća == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } poteškoća = 0; } povećatiDifficulty (); wonThisRound = false; } else {kašnjenje (1000); for (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LED adresa = 0; kašnjenje (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Playing = true; }} // IGRA SE ako (svira) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Isključuje sve LED diode} LED diode [CENTER_LED] = CRGB:: Crveno; // Postavlja boju LED centra na zelene LED diode [LEDaddress] = CRGB:: Green; // Postavlja cikličku LED boju na crvenu FastLED.show (); // Pokreće LEDadresu ++; // Postavlja svjetlosni ciklus na jedno po jedno LED (LEDaddress == NUM_LEDS) {LEDaddress = 0; } kašnjenje (getTime (poteškoće)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = true; }}} // Parametri nivoa int getTime (int diff) // Vraća vremensko kašnjenje za bazu kretanja LED -a na poteškoći {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; break; slučaj SREDNJI: timeValue = 80; break; slučaj HARD: timeValue = 60; break; slučaj ON_SPEED: timeValue = 40; break; slučaj SONIC_SPEED: timeValue = 30; break; slučaj ROCKET_SPEED: timeValue = 20; break; slučaj LIGHT_SPEED: timeValue = 13; break; slučaj MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Vraća iznos kašnjenja} // Dobitni parametri povećanja poteškoće void increaseDifficulty () {if (poteškoća! = MISSION_IMPOSSIBLE && wonThisRound) {poteškoća ++; }} // Lost LED Show void flash () {fill_solid (LED diode, NUM_LEDS, CRGB:: Crveno); FastLED.show (); kašnjenje (500); fill_solid (LED diode, NUM_LEDS, CRGB:: crno); FastLED.show (); kašnjenje (500); } // Pobijedio LED Show void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {static uint8_t hue = 0; Serial.print ("x"); // Prvo pomaknite LED diodu u jednom smjeru za (int i = 0; i = 0; i--) {// Postavite i-tu vodilicu na crvene diode = CHSV (nijansa ++, 255, 255); // Pokaži LED diode FastLED.show (); // sada kada smo prikazali LED diode, resetirajte i'th do crne // LED diode = CRGB:: Crna; fadeall (); // Pričekajte malo prije nego što se okrenemo i ponovimo to delay (10); }}

Korak 3: Instalirajte u Fixture

Instalirajte u Fixture
Instalirajte u Fixture
Instalirajte u Fixture
Instalirajte u Fixture

U ovom odjeljku neću ulaziti u detalje. Postoji hiljadu različitih načina da prođete kroz ovaj dio i mislim da biste trebali biti kreativni kako biste izgledali kako vam se sviđa. S obzirom na to, sat je bio prilično zgodan za korištenje za postavljanje LED dioda jer je imao minute koje sam mogao koristiti kao oznake bušilice. Takođe, stakleni poklopac mi takođe omogućava da ovo koristim kao sto.

Čičak je bio vrlo koristan i za pričvršćivanje LED svjetiljke na kućište elektronike. Koristio sam i čičak na Arduinu. Ovo je bilo vrlo zgodno za izvlačenje Arduina ako ikada poželim izmijeniti kod.

Preporučuje se: