Përmbajtje:

Cyclone LED Arcade Lojë: 4 hapa
Cyclone LED Arcade Lojë: 4 hapa

Video: Cyclone LED Arcade Lojë: 4 hapa

Video: Cyclone LED Arcade Lojë: 4 hapa
Video: Milan, Italy Evening Walking Tour - 4K60fps with Captions - Prowalk Tours 2024, Shtator
Anonim
Image
Image
Instaloni në Fixture
Instaloni në Fixture

Qëllimi i këtij projekti ishte të krijojë një lojë të thjeshtë duke përdorur një Arduino që do të ishte interaktive dhe argëtuese për fëmijët. Mbaj mend që loja Arcade Cyclone ishte një nga lojërat e mia të preferuara Arcade kur isha më e re, kështu që vendosa ta përsëris atë. Ky është një projekt shumë i thjeshtë që përbëhet nga një Arduino, një varg LED të adresueshëm individualisht dhe një buton.

Qëllimi i lojës është të ndalojë dritën e çiklizmit kur të arrijë LED -in e treguar (të kuq). Nëse është i suksesshëm, niveli i vështirësisë do të rritet. Nëse nuk ka sukses, cikli i dritës do të rifillojë në nivelin e vështirësisë aktuale.

Ky udhëzues ishte një burim i madh për thelbin e kodimit tim.

Hapi 1: Mblidhni Furnizimet

  • Përbërësit kryesorë:

    • Arduino (kam përdorur një UNO)
    • Vargu i LED -ve individualisht të adresueshëm (kam përdorur lidhjen)
    • Shtyp butonin (kam përdorur lidhjen)
    • Bordi i qarkut të shtypur (PCB) ose dërrasë buke
    • Furnizimi me energji elektrike (Kam përdorur dy furnizime të veçanta të energjisë, mund të largoheni me një nëse jeni krijues)

      • 5V 3A për LED
      • 9V 1A për Arduino
  • Kuadër:

    • Strehimi elektronik (modifikova një pajisje llambë druri nga Vullneti i Mirë)
    • Strehimi LED (kam modifikuar orën tuaj standarde të murit dhe kam shpuar vrima duke përdorur identifikuesit e minutave si shenja vrimash. Përdorni një orë druri nëse është e mundur për ta bërë shpimin më të lehtë.)
    • Strehimi i butonit (kam përdorur një tub PVC me bërryl)
  • Mjetet / Materialet e tjera:

    • Instalime rezervë për qarkun tuaj
    • Rezistenca 10K (rezistencë tërheqëse për ndërprerës) dhe 470 ohm (për telat e të dhënave në LED)
    • Stërvitja për krijimin e vrimave për vendosjen e LED -ve tuaj dhe bërjen e çdo vrime të nevojshme në pajisjen tuaj për të kaluar telat
    • Hekuri për saldim për bashkimin e qarkut tuaj në një PCB
    • Armë me zam të nxehtë për fiksimin e LED -ve në pajisjen tuaj
    • Velcro ose disa mjete për të siguruar kornizën së bashku
    • Rondelet opsionale për vrimat e shpuara për kalimin e telave

Hapi 2: Ngarko kodin

Sigurohuni që të shkarkoni dhe shtoni bibliotekën "FastLED"

Thelbi i kodit (lak i pavlefshëm) përbëhet nga dy gjendje: butoni i lartë (Fundi i lojës) dhe butoni i ulët (Luajtja). Pasi përdoruesi të shtypë butonin, adresa LED me të cilën ndizet drita krahasohet me adresën e LED qendror. Nëse ato nuk janë të njëjta, të gjitha dritat ndizen të kuqe dy herë dhe niveli aktual rinis. Nëse ato janë të njëjta, ciloni (skenari i bibliotekës FastLED) funksionon dy herë, niveli i vështirësisë rritet dhe rifillimi i lojës. Pasi lojtari arrin nivelin e fundit, ciloni funksionon tetë herë dhe loja rinis në nivelin 1.

// Lojë cikloni

#përfshi "FastLED.h" // deri në 50 #përcakto NUM_LEDS 40 #përcakto CENTER_LED 21 #përcakto DATA_PIN 7 #përcakto LED_TYPE WS2811 #define COLOR_ORDER RGB // diapazoni 0-64 #përcakto BRIGHTNESS 50 // Përkufizimi i niveleve të vështirësisë #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 // Fillimi i vështirësisë në vështirësi = 1; // Përcaktoni grupin e leds CRGB leds [NUM_LEDS]; // A e fitoi lojtari këtë raund? Kjo etiketë përdoret për parametrat e vështirësisë. bool wonThisRound = false; // Vendndodhja fillestare e dritës së çiklizmit në adresën LED = 0; // Po luhet loja? bool Luajtja = e vërtetë; // A është kjo fitorja e parë? bool CycleEnded = e vërtetë; // Detajet e butonit const int buttonPin = 9; butoni int Shteti = 0; // Filloni bibliotekën e udhëhequr dhe funksionet arduino void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.filloj (9600); } // Mishi dhe patatet // Dy mënyra - Luajtja dhe përfundimi i lojës void loop () {// END GAME buttonState = digitalRead (buttonPin); nëse (buttonState == LART) {Duke luajtur = false; // Përdoruesi ka shtypur butonin dhe LED është ndalur në adresën fituese. për (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: E zezë; } leds [CENTER_LED] = CRGB:: E kuqe; leds [LEDadresa] = CRGB:: E gjelbër; FastLED.shfaq (); nëse (CycleEnded = true) {int diff = abs (CENTER_LED - Adresa LED); // Gjen distancën midis led të ndezur dhe qendrës led nëse (diff == 0) {wonThisRound = true; // Lojtari mundi me sukses nivelin nëse (vështirësi! = MISSION_IMPOSSIBLE) {për (int i = 0; i <2; i ++) {cilon (); }} if (vështirësi == MISSION_IMPOSSIBLE) {për (int i = 0; i <8; i ++) {cilon (); } vështirësi = 0; } rritjeDëshirësia (); wonThisRound = false; } else {vonesë (1000); për (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } Adresa LED = 0; vonesë (250); buttonState = digitalRead (butoniPin); nëse (buttonState == LOW) {Duke luajtur = true; }} // LUAJ nëse (Luaj) {për (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: E zezë; // Fik të gjitha leds} leds [CENTER_LED] = CRGB:: E kuqe; // Vendos ngjyrën e qendrës së udhëhequr në leds jeshile [LEDaddress] = CRGB:: Green; // Vendos ngjyrën e çelur të ngjyrës në të kuqe FastLED.show (); // Fillon ciklin e dritës LED adresa ++; // Cakton ciklin e dritës në një led në të njëjtën kohë nëse (LEDadresa == NUM_LEDS) {LEDadresa = 0; } vonesa (getTime (vështirësi)); buttonState = digitalRead (butoniPin); nëse (buttonState == LART) {Duke luajtur = false; CycleEnded = e vërtetë; }}} // Parametrat e nivelit int getTime (int diff) // Kthen vonesën e kohës për lëvizjen e udhëhequr në bazë të vështirësisë {int timeValue = 0; switch (ndrysh) {case EASY: timeValue = 100; pushim; rasti MEDIUM: timeVlera = 80; pushim; rasti HARD: timeVlera = 60; pushim; rasti ON_SPEED: vlera e kohës = 40; pushim; rast SONIC_SPEED: timeValue = 30; pushim; rasti ROCKET_SPEED: timeValue = 20; pushim; rast LIGHT_SPEED: timeValue = 13; pushim; rast MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Ktheni shumën e vonesës} // Vështirësia fituese rrit parametrat void افزایشVështirësi () {nëse (vështirësi! = MISSION_IMPOSSIBLE && wonThisRound) {vështirësi ++; }} // Lost LED Trego void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.shfaq (); vonesë (500); mbushur_solid (leds, NUM_LEDS, CRGB:: E zezë); FastLED.shfaq (); vonesë (500); } // Fitoi LED Trego void fadeall () {për (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {statike uint8_t hue = 0; Serial.print ("x"); // Së pari rrëshqisni led-in në një drejtim për (int i = 0; i = 0; i--) {// Vendosni led-in e kuq në leds të kuq = CHSV (nuancë ++, 255, 255); // Trego leds FastLED.show (); // tani që kemi treguar led -et, rivendosni led -in e zezë // leds = CRGB:: Black; fadeall (); // Prisni pak para se të sillemi rreth e rrotull dhe ta bëni përsëri me vonesë (10); }}

Hapi 3: Instaloni në Fixture

Instaloni në Fixture
Instaloni në Fixture
Instaloni në Fixture
Instaloni në Fixture

Unë nuk do të hyj në detaje në këtë pjesë. Ka një mijë mënyra të ndryshme për të shkuar në lidhje me këtë pjesë dhe unë mendoj se duhet të jeni krijues për ta bërë atë të duket se si ju pëlqen. Duke u thënë kështu, ora ishte mjaft e përshtatshme për t'u përdorur për strehimin e LED -ve pasi kishte tregues minutë që isha në gjendje t'i përdorja si shenja stërvitore. Gjithashtu, mbulesa e xhamit gjithashtu më lejon ta përdor këtë si tryezë.

Velcro ishte shumë i dobishëm gjithashtu për të siguruar pajisjen LED në pajisjen e strehimit elektronik. Unë gjithashtu përdor velcro në Arduino. Kjo e bëri atë shumë të përshtatshëm për tërheqjen e Arduino nëse dua të modifikoj ndonjëherë kodin.

Recommended: