Obsah:

Arkádová hra Cyclone LED: 4 kroky
Arkádová hra Cyclone LED: 4 kroky

Video: Arkádová hra Cyclone LED: 4 kroky

Video: Arkádová hra Cyclone LED: 4 kroky
Video: Arcade Vintage 2024, Listopad
Anonim
Image
Image
Nainstalovat ve Fixture
Nainstalovat ve Fixture

Záměrem tohoto projektu bylo vytvořit jednoduchou hru pomocí Arduina, která by byla interaktivní a zábavná pro děti. Pamatuji si, že Cyclone arkádová hra byla jednou z mých oblíbených arkádových her, když jsem byl mladší, a tak jsem se rozhodl ji replikovat. Jedná se o velmi jednoduchý projekt, který se skládá z Arduina, řady individuálně adresovatelných LED a tlačítka.

Cílem hry je zastavit cyklistické světlo, jakmile dosáhne indikované (červené) LED. Pokud bude úspěšný, úroveň obtížnosti se zvýší. Pokud není úspěšný, světelný cyklus se restartuje na aktuální úrovni obtížnosti.

Tento instruktáž byl obrovským zdrojem jádra mého kódování.

Krok 1: Shromážděte zásoby

  • Hlavní komponenty:

    • Arduino (použil jsem UNO)
    • Řetězec individuálně adresovatelných LED diod (použil jsem odkaz)
    • Tlačítko (použil jsem odkaz)
    • Deska s plošnými spoji (PCB) nebo nepájivá deska
    • Napájecí zdroj (použil jsem dva samostatné napájecí zdroje, pokud jste kreativní, jeden vám může uniknout)

      • 5V 3A pro LED diody
      • 9V 1A pro Arduino
  • Rámec:

    • Pouzdro elektroniky (upravil jsem dřevěné svítidlo od Goodwill)
    • Pouzdro LED (vaše standardní nástěnné hodiny a vyvrtané otvory jsem upravil pomocí identifikátorů minut jako označení otvorů. Pokud je to možné, použijte dřevěné hodiny, aby bylo vrtání snazší.)
    • Pouzdro na knoflíky (použil jsem loketní trubku z PVC)
  • Nástroje / Ostatní materiály:

    • Náhradní kabeláž pro váš obvod
    • Rezistory 10K (stahovací odpor pro spínač) a 470 ohmů (pro datový vodič na LED)
    • Vrták pro vytváření otvorů pro umístění vašich LED diod a vytváření potřebných otvorů ve vašem svítidle pro průchod vodičů
    • Páječka pro pájení obvodu na desku plošných spojů
    • Horká lepicí pistole pro zajištění LED diod k vašemu svítidlu
    • Suchý zip nebo nějaké prostředky k zajištění rámce dohromady
    • Těsnění volitelně pro otvory vyvrtané pro průchod drátů

Krok 2: Nahrajte kód

Nezapomeňte stáhnout a přidat knihovnu „FastLED“

Jádro kódu (prázdná smyčka) se skládá ze dvou stavů: vysoké tlačítko (Ukončit hru) a nízké tlačítko (Přehrávání). Jakmile uživatel stiskne tlačítko, porovná se adresa LED, na které bylo světlo zastaveno, s adresou středové diody. Pokud nejsou stejné, všechna světla dvakrát bliknou červeně a aktuální úroveň se restartuje. Pokud jsou stejné, cylon (skript knihovny FastLED) se spustí dvakrát, úroveň obtížnosti se zvýší a přehrávání se obnoví. Jakmile hráč porazí poslední úroveň, Cylon běží osmýkrát a hra se restartuje na úrovni 1.

// Cyklónová hra

#include "FastLED.h" // až 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // rozsah 0-64 #define BRIGHTNESS 50 // Definice úrovní obtížnosti #define SNADNÝ 1 #definovat STŘEDNÍ 2 #definovat TVRDÉ 3 #definovat ON_SPEED 4 #definovat SONIC_SPEED 5 #definovat ROCKET_SPEED 6 #definovat LIGHT_SPEED 7 #definovat MISSION_IMPOSSIBLE 8 // Počáteční obtížnost int obtížnost = 1; // Definujte pole LED CRGB LED [NUM_LEDS]; // Vyhrál hráč toto kolo? Tato značka se používá pro parametry obtížnosti. bool wonThisRound = false; // Počáteční poloha cyklistického světla int LEDaddress = 0; // Hra běží? bool Playing = true; // Je to první výhra? bool CycleEnded = true; // Podrobnosti o tlačítku const int buttonPin = 9; int buttonState = 0; // Inicializace led knihovny a arduino funkcí void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Maso a brambory // Dva režimy - hraní a ukončení hry void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // Uživatel stiskl tlačítko a LED se zastavila na výherní adrese. pro (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; } leds [CENTER_LED] = CRGB:: Red; leds [LEDaddress] = CRGB:: Green; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Najde vzdálenost mezi rozsvícenou LED a středovou LED, pokud (diff == 0) {wonThisRound = true; // Hráč úspěšně porazil úroveň if (obtížnost! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (obtížnost == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } obtížnost = 0; } increaseDifficulty (); wonThisRound = false; } else {zpoždění (1000); pro (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } Adresa LED = 0; zpoždění (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Playing = true; }} // PLAYING if (Playing) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Vypne všechny LED}} LED [CENTER_LED] = CRGB:: Red; // Nastaví barvu středové LED na zelené LED [LEDaddress] = CRGB:: Green; // Nastaví válcovanou barvu LED na červenou FastLED.show (); // Inicializuje světelný cyklus LEDadresa ++; // Nastaví světelný cyklus vždy na jednu LED, pokud (LEDadresa == NUM_LEDS) {LEDadresa = 0; } delay (getTime (obtížnost)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = true; }}} // Parametry úrovně int getTime (int diff) // Vrátí časové zpoždění pro pohybovou základnu LED podle obtížnosti {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; přestávka; případ MEDIUM: timeValue = 80; přestávka; case HARD: timeValue = 60; přestávka; případ ON_SPEED: timeValue = 40; přestávka; případ SONIC_SPEED: timeValue = 30; přestávka; případ ROCKET_SPEED: timeValue = 20; přestávka; případ LIGHT_SPEED: timeValue = 13; přestávka; případ MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Vrácení částky zpoždění} // Vítězná obtížnost zvýšení parametrů neplatné zvýšeníDifficulty () {if (obtížnost! = MISSION_IMPOSSIBLE && wonThisRound) {obtížnost ++; }} // Lost LED Show void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); zpoždění (500); fill_solid (leds, NUM_LEDS, CRGB:: Black); FastLED.show (); zpoždění (500); } // Won 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"); // Nejprve posuňte LED v jednom směru pro (int i = 0; i = 0; i--) {// Nastavte i-tu LED na červené LED = CHSV (odstín ++, 255, 255); // Zobrazit LED FastLED.show (); // teď, když jsme ukázali ledky, resetujte i'th LED na černé // LEDky = CRGB:: Black; fadeall (); // Chvíli počkejte, než se smyčkujeme a provedeme to znovu, zpoždění (10); }}

Krok 3: Instalace v aplikaci Fixture

Nainstalovat ve Fixture
Nainstalovat ve Fixture
Nainstalovat ve Fixture
Nainstalovat ve Fixture

V této sekci nebudu zacházet do podrobností. Existuje tisíc různých způsobů, jak tuto část projít, a myslím, že byste měli být kreativní, aby to vypadalo, jak se vám to líbí. Jak již bylo řečeno, hodiny bylo docela vhodné použít pro umístění LED diod, protože měly minutové indikátory, které jsem mohl použít jako značení vrtáků. Skleněný kryt mi také umožňuje použít jej jako stůl.

Velcro byl také velmi užitečný pro upevnění LED svítidla k tělesu elektroniky. Na Arduino jsem použil i suchý zip. Díky tomu bylo velmi výhodné vytáhnout Arduino, pokud bych někdy chtěl kód upravit.

Doporučuje: