Tartalomjegyzék:

Cyclone LED Arcade Game: 4 lépés
Cyclone LED Arcade Game: 4 lépés

Videó: Cyclone LED Arcade Game: 4 lépés

Videó: Cyclone LED Arcade Game: 4 lépés
Videó: Григорий Лепс - Рюмка водки на столе (2002) 2024, November
Anonim
Image
Image
Telepítse a Fixture -be
Telepítse a Fixture -be

A projekt célja egy egyszerű játék létrehozása volt egy Arduino segítségével, amely interaktív és szórakoztató lenne a gyerekek számára. Emlékszem, hogy a Cyclone arcade játék volt az egyik kedvenc arcade játékom, amikor fiatalabb voltam, ezért úgy döntöttem, hogy megismétlem. Ez egy nagyon egyszerű projekt, amely egy Arduino -ból, egyénileg címezhető LED -ekből és egy nyomógombból áll.

A játék célja, hogy leállítsa a kerékpáros lámpát, amikor eléri a jelzett (piros) LED -et. Ha sikeres lesz, a nehézségi szint emelkedni fog. Ha sikertelen, a fényciklus újraindul az aktuális nehézségi szinten.

Ez az utasítás hatalmas erőforrás volt a kódolásom magjához.

1. lépés: Gyűjtse össze a kellékeket

  • Fő összetevők:

    • Arduino (UNO -t használtam)
    • Egyénileg címezhető LED -ek sorozata (linket használtam)
    • Nyomógomb (linket használtam)
    • Nyomtatott áramköri lap (PCB) vagy kenyérlap
    • Tápegység (két külön tápegységet használtam, lehet, hogy egyet megússz, ha kreatív vagy)

      • 5V 3A LED -ekhez
      • 9V 1A az Arduino számára
  • Keretrendszer:

    • Elektronikai ház (a Goodwill fából készült lámpatartóját módosítottam)
    • LED -ház (módosítottam a szabványos falióráját és lyukakat fúrtam a lyukak jelöléseként a perc -azonosítók segítségével. Ha lehetséges, használjon fából készült órát a fúrás megkönnyítése érdekében.)
    • Gombház (könyök PVC csövet használtam)
  • Eszközök / egyéb anyagok:

    • Tartalék vezetékek az áramkörhöz
    • 10K (lehúzható ellenállás a kapcsolóhoz) és 470 ohmos (a LED-ek adatvezetékéhez) ellenállások
    • Fúrjon lyukak létrehozásához a LED -ek elhelyezéséhez, és készítsen minden szükséges lyukat a lámpatestben a vezetékek átvezetéséhez
    • Forrasztópáka az áramkör PCB -hez való forrasztásához
    • Forró ragasztópisztoly a LED -ek rögzítéséhez
    • Tépőzáras vagy valamilyen eszköz a keret rögzítésére
    • A tömítések opcionálisak a vezetékek átfúrásához használt lyukakhoz

2. lépés: Töltse fel a kódot

Feltétlenül töltse le és adja hozzá a "FastLED" könyvtárat

A kód magja (void loop) két állapotból áll: nyomógomb magas (játék befejezése) és alacsony nyomógomb (lejátszás). Miután a felhasználó megnyomta a gombot, a LED -cím, amelyen a lámpa leállt, összehasonlításra kerül a középső LED -címével. Ha nem azonosak, az összes lámpa kétszer pirosan villog, és az aktuális szint újraindul. Ha ugyanazok, a cylon (FastLED könyvtári szkript) kétszer fut, a nehézségi szint nő, és a játék folytatódik. Miután a játékos legyőzte az utolsó szintet, a cylon nyolcadszor fut, és a játék újraindul az 1. szinten.

// Ciklonjáték

#include "FastLED.h" // akár 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 // A nehézségi szintek meghatározása #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 // Indítási nehézség int nehézség = 1; // LED -ek tömbjének meghatározása CRGB ledek [NUM_LEDS]; // A játékos nyerte ezt a fordulót? Ezt a címkét nehézségi paraméterekhez használják. bool wonThisRound = hamis; // A kerékpáros lámpa kiindulási helye int LEDaddress = 0; // A játék fut? bool Playing = igaz; // Ez az első győzelem? bool CycleEnded = igaz; // A gomb részletei const int gombPin = 9; int buttonState = 0; // Inicializálja a led könyvtárat és az arduino függvényeket void setup () {FastLED.addLeds (ledek, NUM_LEDS); FastLED.setBrightness (FÉNYESSÉG); pinMode (buttonPin, INPUT); Sorozat.kezdet (9600); } // A hús és a burgonya // Két mód - Playing és End Game void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Játék = hamis; // A felhasználó megnyomta a gombot, és a LED leállt a nyertes címen. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; } ledek [CENTER_LED] = CRGB:: Piros; ledek [LEDcím] = CRGB:: Zöld; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDcím); // Megtalálja a távolságot a világító led és a középső led között, ha (diff == 0) {wonThisRound = true; // A játékos sikeresen legyőzte a szintet, ha (nehézség! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (nehézség == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } nehézség = 0; } növelésNehézség (); wonThisRound = hamis; } else {delay (1000); for (int i = 0; i <2; i ++) {flash (); }} CycleEnded = hamis; } LEDcím = 0; késleltetés (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Játék = igaz; }} // LEJÁTSZÁS, ha (lejátszás) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Kikapcsolja az összes ledet} led [CENTER_LED] = CRGB:: Piros; // A középső LED színét zöld LED -re állítja [LEDcím] = CRGB:: Zöld; // A hengerelt led színét pirosra állítja FastLED.show (); // Inicializálja a fényciklus LED -címét ++; // A fényciklus beállítása egy -egy ledre, ha (LEDcím == NUM_LEDS) {LEDaddress = 0; } delay (getTime (nehézség)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Játék = hamis; CycleEnded = igaz; }}} // Szintparaméterek int getTime (int diff) // Visszaadja a led mozgásbázis késleltetését az {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; szünet; eset MEDIUM: timeValue = 80; szünet; HARD eset: timeValue = 60; szünet; eset ON_SPEED: timeValue = 40; szünet; eset SONIC_SPEED: timeValue = 30; szünet; eset ROCKET_SPEED: timeValue = 20; szünet; LIGHT_SPEED eset: timeValue = 13; szünet; eset MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Visszaadja a késleltetési összeget} // Nyertes nehézség növeli a paramétereket void növekedésDifjúság () {if (nehézség! = MISSION_IMPOSSIBLE && wonThisRound) {nehézség ++; }} // Lost LED Show void flash () {fill_solid (ledek, NUM_LEDS, CRGB:: Piros); FastLED.show (); késleltetés (500); fill_solid (ledek, NUM_LEDS, CRGB:: fekete); FastLED.show (); késleltetés (500); } // Won LED Show void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {static uint8_t színárnyalat = 0; Serial.print ("x"); // Először csúsztassa a LED-et egy irányba a következőhöz: (int i = 0; i = 0; i--) {// Állítsa be az első ledet piros ledekre = CHSV (színárnyalat ++, 255, 255); // A LED -ek megjelenítése FastLED.show (); // most, hogy megmutattuk a LED -eket, állítsuk vissza az i led -et fekete -re // leds = CRGB:: Black; fadeall (); // Várjon egy kicsit, mielőtt körbejárnánk, és ismételjük meg késleltetés (10); }}

3. lépés: Telepítse a Fixture -be

Telepítse a Fixture -be
Telepítse a Fixture -be
Telepítse a Fixture -be
Telepítse a Fixture -be

Ebben a részben nem részletezem a részleteket. Ezer különböző mód van erre a részre, és szerintem kreatívnak kell lenned ahhoz, hogy úgy nézzen ki, ahogy neked tetszik. Ennek ellenére az órát nagyon kényelmesen lehetett használni a LED -ek elhelyezésére, mivel olyan percjelzőkkel rendelkezett, amelyeket fúrójelként tudtam használni. Ezenkívül az üvegburkolat lehetővé teszi, hogy ezt asztalként is használjam.

A tépőzár nagyon hasznos volt a LED -lámpa rögzítéséhez az elektronika házához. Tépőzárat is használtam az Arduino -n. Ez nagyon kényelmesvé tette az Arduino kihúzását, ha valaha módosítani akarom a kódot.

Ajánlott: