Kazalo:

Ciklonska LED arkadna igra: 4 koraki
Ciklonska LED arkadna igra: 4 koraki

Video: Ciklonska LED arkadna igra: 4 koraki

Video: Ciklonska LED arkadna igra: 4 koraki
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Junij
Anonim
Image
Image
Namesti v Fixture
Namesti v Fixture

Namen tega projekta je bil ustvariti preprosto igro z uporabo Arduina, ki bi bila interaktivna in zabavna za otroke. Spomnim se, da je bila arkadna igra Cyclone ena mojih najljubših arkadnih iger, ko sem bila mlajša, zato sem se odločila, da jo ponovim. To je zelo preprost projekt, ki je sestavljen iz Arduina, niza LED, ki jih je mogoče individualno pritrditi, in gumba.

Cilj igre je ustaviti kolesarsko luč, ko doseže označeno (rdečo) LED. Če bo uspešen, se bo stopnja težavnosti povečala. Če ne uspe, se bo svetlobni cikel znova zagnal na trenutni stopnji težavnosti.

Ta navodila so bila velik vir za jedro mojega kodiranja.

Korak: Zberite zaloge

  • Glavne komponente:

    • Arduino (uporabil sem UNO)
    • Niz posamično naslovljivih LED (uporabil sem povezavo)
    • Potisni gumb (uporabil sem povezavo)
    • Tiskano vezje (PCB) ali plošča
    • Napajalnik (uporabil sem dva ločena napajalnika, z enim se vam lahko izognete, če ste ustvarjalni)

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

    • Ohišje elektronike (leseno svetilko sem spremenil iz dobre volje)
    • LED ohišje (spremenil sem vašo standardno stensko uro in izvrtal luknje z identifikatorji minut kot oznake lukenj. Če je mogoče, za lažje vrtanje uporabite leseno uro.)
    • Ohišje gumbov (uporabil sem komolčno PVC cev)
  • Orodja / drugi materiali:

    • Rezervna napeljava za vaše vezje
    • 10K (spustni upor za stikalo) in 470 ohmov (za podatkovno žico na LED-jih)
    • Vrtalnik za ustvarjanje lukenj za namestitev LED in izdelavo vseh potrebnih lukenj v napeljavi za prehod žic
    • Spajkalnik za spajkanje vezja na tiskano vezje
    • Pištola za vroče lepilo za pritrditev LED na vašo napeljavo
    • Velcro ali kakšno drugo sredstvo za pritrditev okvirja skupaj
    • Neobvezno tesnilo za luknje, skozi katere lahko preidejo žice

2. korak: Naložite kodo

Prenesite in dodajte knjižnico "FastLED"

Jedro kode (void loop) je sestavljeno iz dveh stanj: visoko pritisnjeni gumb (Konec igre) in nizki gumb (Predvajanje). Ko uporabnik pritisne gumb, se naslov LED, na katerem je bila lučka ustavljena, primerja z naslovom osrednje LED. Če nista enaki, vse lučke dvakrat utripnejo rdeče in trenutna raven se znova zažene. Če sta enaka, se cylon (skript knjižnice FastLED) zažene dvakrat, stopnja težavnosti se poveča in predvajanje se nadaljuje. Ko igralec premaga zadnjo stopnjo, cylon teče osmič in igra se znova zažene na ravni 1.

// Igra ciklona

#include "FastLED.h" // up to 50 #define 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 // Definicija težavnostnih stopenj #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 // Težave pri zagonu int težavnost = 1; // Določimo niz LED diod CRGB LED [NUM_LEDS]; // Ali je igralec zmagal v tem krogu? Ta oznaka se uporablja za parametre težavnosti. bool wonThisRound = false; // Začetna lokacija kolesarske luči int LEDaddress = 0; // Ali igra teče? bool Igranje = res; // Je to prva zmaga? bool CycleEnded = true; // Podrobnosti o gumbu const int buttonPin = 9; int buttonState = 0; // Inicializirajte knjižnico led in arduino funkcije void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (SVETLOST); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Meso in krompir // Dva načina - predvajanje in končanje igre void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // Uporabnik je pritisnil gumb in LED se je ustavil na zmagovalnem naslovu. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Črna; } LED diode [CENTER_LED] = CRGB:: Rdeča; LED [LEDaddress] = CRGB:: Zelena; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - naslov LED); // Poišče razdaljo med osvetljenim LED in sredinskim svetilom if (diff == 0) {wonThisRound = true; // Igralec je uspešno premagal raven if (težavnost! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} če (težavnost == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } težavnost = 0; } povečajZaložnost (); wonThisRound = false; } else {zakasnitev (1000); za (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LED naslov = 0; zamuda (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Igranje = res; }} // PLAYING if (Playing) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // izklopi vse LED diode} LED [CENTER_LED] = CRGB:: Rdeča; // Nastavi srednjo LED barvo na zelene LED diode [LEDaddress] = CRGB:: Green; // Nastavi barvo LED za cikliranje na rdečo FastLED.show (); // Inicializira svetlobni cikel LEDadress ++; // Nastavi svetlobni cikel na eno LED naenkrat, če (LEDaddress == NUM_LEDS) {LEDaddress = 0; } zakasnitev (getTime (težave)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = res; }}} // Parametri ravni int getTime (int diff) // Vrne časovno zakasnitev za osnovo premikanja LED glede na težavnost {int timeValue = 0; stikalo (razlika) {primer EASY: timeValue = 100; zlom; primer SREDNJI: timeValue = 80; zlom; primer HARD: timeValue = 60; zlom; primer ON_SPEED: timeValue = 40; zlom; primer SONIC_SPEED: timeValue = 30; zlom; primer ROCKET_SPEED: timeValue = 20; zlom; primer LIGHT_SPEED: timeValue = 13; zlom; primer MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Vrni znesek zamude} // Zmagovalni parametri povečanja težav povečanje void povečanjeDifficulty () {if (težavnost! = MISSION_IMPOSSIBLE && wonThisRound) {težavnost ++; }} // Lost LED Show void flash () {fill_solid (LED, NUM_LEDS, CRGB:: Red); FastLED.show (); zamuda (500); fill_solid (svetleče diode, NUM_LEDS, CRGB:: črna); FastLED.show (); zamuda (500); } // Zmagala 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"); // Najprej potisnite led v eno smer za (int i = 0; i = 0; i--) {// Nastavite i-to vodilo v rdeče lučke = CHSV (odtenek ++, 255, 255); // Pokaži LED diode FastLED.show (); // zdaj, ko smo prikazali svetleče diode, ponastavimo i'th vodilo v črno // led = CRGB:: Black; fadeall (); // Počakajmo malo, preden se vrnemo in naredimo še enkrat delay (10); }}

Korak: Namestite v Fixture

Namesti v Fixture
Namesti v Fixture
Namesti v Fixture
Namesti v Fixture

V tem razdelku se ne bom spuščal v podrobnosti. Obstaja tisoč različnih načinov, kako se lotiti tega dela, in mislim, da bi morali biti ustvarjalni, da bo videti tako, kot vam je všeč. Ob tem je bila ura zelo priročna za namestitev LED diod, saj je imela minutne kazalnike, ki sem jih lahko uporabil kot oznake vrtalnikov. Tudi stekleni pokrov mi omogoča, da to uporabim kot mizo.

Velcro je bil zelo uporaben tudi za pritrditev LED svetilke na ohišje elektronike. Tudi na Arduinu sem uporabil velcro. Zaradi tega je bilo zelo priročno izvleči Arduino, če bom kdaj želel spremeniti kodo.

Priporočena: