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, Septembra
Anonim
Image
Image
Inštalovať v aplikácii Fixture
Inštalovať v aplikácii Fixture

Cieľom tohto projektu bolo vytvoriť jednoduchú hru pomocou Arduina, ktorá by bola interaktívna a zábavná pre deti. Pamätám si, že cyklónová arkáda bola jednou z mojich obľúbených arkádových hier, keď som bol mladší, a tak som sa rozhodol ju zopakovať. Jedná sa o veľmi jednoduchý projekt, ktorý pozostáva z Arduina, série individuálne adresovateľných diód LED a tlačidla.

Cieľom hry je zastaviť cyklistické svetlo, keď dosiahne indikovanú (červenú) diódu LED. Ak bude úspešný, úroveň obtiažnosti sa zvýši. Ak nie je úspešný, svetelný cyklus sa reštartuje na aktuálnej úrovni obtiažnosti.

Tento návod bol obrovským zdrojom jadra môjho kódovania.

Krok 1: Zhromaždite zásoby

  • Hlavné komponenty:

    • Arduino (použil som UNO)
    • Reťazec individuálne adresovateľných diód LED (použil som odkaz)
    • Tlačidlo (použil som odkaz)
    • Doska s plošnými spojmi (PCB) alebo nepájivá doska
    • Napájací zdroj (Použil som dva samostatné napájacie zdroje, jeden vám môže uniknúť, ak ste kreatívni)

      • 5V 3A pre LED diódy
      • 9V 1A pre Arduino
  • Rámec:

    • Kryt elektroniky (upravil som drevené svietidlo od Goodwill)
    • Kryt LED (modifikoval som vaše štandardné nástenné hodiny a vŕtané otvory pomocou identifikátorov minút ako označenia otvorov. Na uľahčenie vŕtania použite drevené hodiny, ak je to možné.)
    • Kryt na gombíky (použil som kolennú rúrku z PVC)
  • Nástroje / Ostatné materiály:

    • Náhradné vedenie pre váš obvod
    • Rezistory 10K (sťahovací odpor pre spínač) a 470 ohmov (pre dátový vodič na diódach LED)
    • Vŕtačka na vytváranie dier pre umiestnenie vašich diód LED a na vytváranie všetkých potrebných dier vo vašom zariadení na prevlečenie drôtov
    • Spájkovačka na spájkovanie obvodu s DPS
    • Horúca lepiaca pištoľ na zaistenie diód LED k zariadeniu
    • Suchý zips alebo nejaké prostriedky na zaistenie rámca dohromady
    • Tesnenia voliteľné pre otvory vyvŕtané pre prechod drôtov

Krok 2: Nahrajte kód

Nezabudnite si stiahnuť a pridať knižnicu „FastLED“

Jadro kódu (prázdna slučka) pozostáva z dvoch stavov: vysoké tlačidlo (Ukončiť hru) a nízke tlačidlo (Prehrávanie). Akonáhle používateľ stlačí tlačidlo, adresa LED, na ktorej bolo svetlo vypnuté, sa porovná s adresou stredovej diódy LED. Ak nie sú rovnaké, všetky svetlá dvakrát zablikajú červenou farbou a aktuálna úroveň sa reštartuje. Ak sú rovnaké, cylon (skript knižnice FastLED) beží dvakrát, úroveň obtiažnosti sa zvyšuje a pokračuje sa v hraní. Akonáhle hráč porazí poslednú úroveň, cylon beží ôsmykrát a hra sa začína od úrovne 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 // Definícia úrovní obtiažnosti #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 // Starting obtiažnosť náročnosť = 1; // Definujte pole LED diód CRGB [NUM_LEDS]; // Vyhral hráč toto kolo? Táto značka sa používa pre parametre obtiažnosti. bool wonThisRound = false; // Počiatočné umiestnenie cyklistického svetla int LEDadresa = 0; // Hra beží? bool Hra = pravda; // Je to prvá výhra? bool CycleEnded = true; // Podrobnosti o tlačidle const int buttonPin = 9; int buttonState = 0; // Inicializácia knižnice LED a arduino funkcií void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Mäso a zemiaky // Dva režimy - Hra a koniec hry Prázdna slučka () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // Užívateľ stlačil tlačidlo a LED dióda sa na víťaznej adrese zastavila. pre (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); // Zistí vzdialenosť medzi rozsvietenou LED a stredovou LED, ak (rozdiel == 0) {wonThisRound = true; // Hráč úspešne zdolal úroveň if (obtiažnosť! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (náročnosť == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } náročnosť = 0; } increaseDifficulty (); wonThisRound = nepravda; } else {zdržanie (1000); pre (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } Adresa LED = 0; oneskorenie (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šetky LED}} LED [CENTER_LED] = CRGB:: Red; // Nastaví stredovú farbu LED na zelené LED [LEDaddress] = CRGB:: Green; // Nastaví vedúcu farbu valcovania na červenú FastLED.show (); // Inicializuje svetelný cyklus LEDadresa ++; // Nastaví svetelný cyklus na jednu LED súčasne, ak (LEDadresa == NUM_LEDS) {LEDadresa = 0; } delay (getTime (náročnosť)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = true; }}} // Parametre úrovne int getTime (int diff) // Vráti časové oneskorenie pre pohybovú základňu LED podľa obtiažnosti {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; prestávka; prípad STREDNÝ: timeValue = 80; prestávka; prípad HARD: timeValue = 60; prestávka; prípad ON_SPEED: timeValue = 40; prestávka; prípad SONIC_SPEED: timeValue = 30; prestávka; prípad ROCKET_SPEED: timeValue = 20; prestávka; prípad LIGHT_SPEED: timeValue = 13; prestávka; prípad MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Vrátenie sumy oneskorenia} // Výhra obtiažnosti zvýšenia parametrov neplatné zvýšenieDifficulty () {if (obtiažnosť! = MISSION_IMPOSSIBLE && wonThisRound) {obtiažnosť ++; }} // Lost LED Show void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); oneskorenie (500); fill_solid (leds, NUM_LEDS, CRGB:: Black); FastLED.show (); oneskorenie (500); } // Won LED Show void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} neplatný cylon () {static uint8_t hue = 0; Serial.print ("x"); // Najprv posuňte LED v jednom smere pre (int i = 0; i = 0; i--) {// Nastavte i-tu ledku na červené LED = CHSV (odtieň ++, 255, 255); // Zobraziť LED diódy FastLED.show (); // teraz, keď sme ukázali LED diódy, vynulujte i -tú ledku na čiernu // ledky = CRGB:: Black; fadeall (); // Chvíľu počkajte, kým sa nezopakujeme a urobíme to znova (10); }}

Krok 3: Inštalácia v aplikácii Fixture

Inštalovať v aplikácii Fixture
Inštalovať v aplikácii Fixture
Inštalovať v aplikácii Fixture
Inštalovať v aplikácii Fixture

V tejto časti nejdem zachádzať do podrobností. Existuje tisíc rôznych spôsobov, ako postupovať v tejto časti a myslím si, že by ste mali byť kreatívni, aby to vyzeralo tak, ako sa vám to páči. Ako už bolo povedané, hodiny bolo celkom vhodné použiť na umiestnenie diód LED, pretože mali minútové indikátory, ktoré som mohol použiť ako značky vŕtačiek. Sklenený kryt mi tiež umožňuje použiť ho ako stôl.

Suchý zips bol veľmi užitočný aj na zaistenie svietidla LED k svietidlu puzdra elektroniky. Na Arduino som použil aj suchý zips. Vďaka tomu bolo veľmi výhodné vytiahnuť Arduino, ak by som niekedy chcel kód upraviť.

Odporúča: