Talaan ng mga Nilalaman:

Cyclone LED Arcade Game: 4 na Hakbang
Cyclone LED Arcade Game: 4 na Hakbang

Video: Cyclone LED Arcade Game: 4 na Hakbang

Video: Cyclone LED Arcade Game: 4 na Hakbang
Video: ASPHALT 9 LEGENDS CRAZY GIRL DRIVER 2024, Nobyembre
Anonim
Image
Image
I-install sa Fixture
I-install sa Fixture

Ang layunin ng proyektong ito ay upang lumikha ng isang simpleng laro gamit ang isang Arduino na magiging interactive at nakakaaliw para sa mga bata. Naaalala ko ang laro ng Cyclone arcade na isa sa aking mga paboritong arcade game noong bata pa ako, kaya't napagpasyahan kong gayahin ito. Ito ay isang napaka-simpleng proyekto na binubuo ng isang Arduino, string ng mga indibidwal na adressable LEDs, at isang push button.

Ang layunin ng laro ay upang ihinto ang ilaw ng pagbibisikleta kapag naabot nito ang ipinahiwatig na (pula) na LED. Kung matagumpay, tataas ang antas ng kahirapan. Kung hindi matagumpay, ang light cycle ay magsisimulang muli sa kasalukuyang antas ng kahirapan.

Ang itinuturo na ito ay isang malaking mapagkukunan para sa core ng aking pag-coding.

Hakbang 1: Ipunin ang Mga Pantustos

  • Pangunahing Mga Bahagi:

    • Arduino (Gumamit ako ng UNO)
    • String ng mga indibidwal na maaaring addressing LEDs (Gumamit ako ng link)
    • Push button (ginamit ko ang link)
    • Naka-print circuit board (PCB) o breadboard
    • Power Supply (Gumamit ako ng dalawang magkakahiwalay na power supply, maaari kang makawala sa isa kung malikhain ka)

      • 5V 3A para sa LEDs
      • 9V 1A para sa Arduino
  • Framework:

    • Pabahay ng electronics (binago ko ang isang kabit na gawa sa lampara mula sa Goodwill)
    • LED na pabahay (binago ko ang iyong karaniwang relo sa dingding at nag-drill ng mga butas gamit ang mga minutong identifier bilang marka ng butas. Gumamit ng kahoy na orasan kung posible upang gawing mas madali ang pagbabarena.)
    • Pabahay ng butones (Gumamit ako ng isang siko ng tubo ng PVC)
  • Mga tool / Iba Pang Mga Kagamitan:

    • Ekstrang mga kable para sa iyong circuit
    • 10K (pull-down risistor para sa switch) at 470 ohm (para sa data wire sa LEDs) resistors
    • Mag-drill para sa paglikha ng mga butas upang maitabi ang iyong mga LED at at gumawa ng anumang kinakailangang mga butas sa iyong kabit upang mapasa ang mga wire
    • Panghinang na bakal para sa paghihinang ng iyong circuit sa isang PCB
    • Mainit na baril ng pandikit para sa pag-secure ng mga LED sa iyong kabit
    • Ang Velcro o ilang paraan ng pag-secure ng balangkas na magkasama
    • Ang mga gasket ay opsyonal para sa mga butas na na-drill para dumaan ang mga wire

Hakbang 2: I-upload ang Code

Tiyaking nai-download at naidagdag mo ang "FastLED" library

Ang core ng code (void loop) ay binubuo ng dalawang estado: push button high (End Game) at push button na mababa (Playing). Kapag ang gumagamit ay pinindot ang pindutan, ang LED address na ang ilaw ay tumigil sa ay inihambing sa address ng center LED. Kung ang mga ito ay hindi pareho, ang lahat ng mga ilaw ay nag-flash pula ng dalawang beses at ang kasalukuyang antas ay restart. Kung magkatulad ang mga ito, tatakbo nang dalawang beses ang cylon (FastLED library script), tumataas ang antas ng kahirapan, at ipinagpatuloy ang paglalaro. Kapag natalo ng manlalaro ang huling antas, tumatakbo ang silon ng ikawalong beses at ang laro ay nagsisimula muli sa antas 1.

// Cyclone Game

# isama ang "FastLED.h" // hanggang sa 50 # tukuyin ang 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 // Kahulugan ng mga antas ng kahirapan #define Madaling 1 #tukoy MEDIUM 2 # tukuyin HARD 3 # tukuyin ON_SPEED 4 # tukuyin ang SONIC_SPEED 5 # tukuyin ang ROCKET_SPEED 6 #define LIGHT_SPEED 7 #define MISSION_IMPOSSIBLE 8 // Simula ng kahirapan int kahirapan = 1; // Tukuyin ang hanay ng mga leds CRGB leds [NUM_LEDS]; // Nanalo ba ang manlalaro sa pag-ikot na ito? Ginamit ang tag na ito para sa mga parameter ng paghihirap. bool wonThisRound = false; // Simula ng lokasyon ng ilaw sa pagbibisikleta int LEDaddress = 0; // Tumatakbo ba ang laro? bool Playing = totoo; // Ito ba ang unang panalo? bool CycleEnded = totoo; // Mga detalye ng pindutan const int buttonPin = 9; int buttonState = 0; // Initialize the led library and arduino functions void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Ang karne at patatas // Two Mode - Playing and End Game void loop () {// END GAME buttonState = digitalRead (buttonPin); kung (buttonState == MATAAS) {Playing = false; // Pinindot ng gumagamit ang pindutan, at huminto ang LED sa nanalong address. para sa (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Itim; } leds [CENTER_LED] = CRGB:: Pula; leds [LEDaddress] = CRGB:: Green; FastLED.show (); kung (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Nakahanap ng distansya sa pagitan ng naiilaw na led at ng center led kung (diff == 0) {wonThisRound = true; // Matagumpay na natalo ng player ang antas kung (kahirapan! = MISSION_IMPOSSIBLE) {para sa (int i = 0; i <2; i ++) {cylon (); }} kung (kahirapan == MISSION_IMPOSSIBLE) {para sa (int i = 0; i <8; i ++) {cylon (); } kahirapan = 0; } dagdaganPagkakahirapan (); wonThisRound = false; } iba pa {antala (1000); para sa (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LEDaddress = 0; pagkaantala (250); buttonState = digitalRead (buttonPin); kung (buttonState == LOW) {Playing = true; }} // PLAYING if (Playing) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Itim; // Patayin ang lahat ng leds} leds [CENTER_LED] = CRGB:: Pula; // Sets center led color to green leds [LEDaddress] = CRGB:: Green; // Sets cyling led color to red FastLED.show (); // Pinasimulan ang light cycle LEDaddress ++; // Nagtatakda ng light cycle sa isa na pinamumunuan kung (LEDaddress == NUM_LEDS) {LEDaddress = 0; } antala (getTime (kahirapan)); buttonState = digitalRead (buttonPin); kung (buttonState == MATAAS) {Playing = false; CycleEnded = totoo; }}} // Mga Antas ng Parameter int getTime (int diff) // Nagbabalik ng pagkaantala ng oras para sa humantong kilusan na batay sa kahirapan {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; pahinga; kaso MEDIUM: timeValue = 80; pahinga; kaso HARD: timeValue = 60; pahinga; kaso ON_SPEED: timeValue = 40; pahinga; kaso SONIC_SPEED: timeValue = 30; pahinga; kaso ROCKET_SPEED: timeValue = 20; pahinga; kaso LIGHT_SPEED: timeValue = 13; pahinga; kaso MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Ibalik ang halaga ng pagkaantala} // Panalong nahihirapan na dagdagan ang mga parameter na walang bisa na pagtaasDifficulty () {if (kahirapan! = MISSION_IMPOSSIBLE && wonThisRound) {kahirapan ++; }} // Lost LED Show void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); pagkaantala (500); fill_solid (leds, NUM_LEDS, CRGB:: Itim); FastLED.show (); pagkaantala (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"); // First slide the led in one direction for (int i = 0; i = 0; i--) {// Itakda ang i'th led to red leds = CHSV (hue ++, 255, 255); // Show the leds FastLED.show (); // ngayong naipakita na namin ang mga leds, i-reset ang ith led to black // leds = CRGB:: Itim; fadeall (); // Maghintay nang kaunti bago kami paikot ikot at gawin itong muli antala (10); }}

Hakbang 3: I-install sa Fixture

I-install sa Fixture
I-install sa Fixture
I-install sa Fixture
I-install sa Fixture

Hindi ako pupunta sa mga detalye sa seksyong ito. Mayroong isang libong iba't ibang mga paraan upang magawa ang bahaging ito at sa palagay ko dapat kang maging malikhain upang magmukha itong gusto mo. Sinabi na, ang orasan ay medyo maginhawa upang magamit para sa pabahay ng mga LED dahil mayroon itong mga minutong tagapagpahiwatig na nagamit ko bilang mga marka ng drill. Gayundin, pinapayagan din ako ng takip ng salamin na gamitin ito bilang isang mesa.

Ang velcro ay lubhang kapaki-pakinabang din para sa pag-secure ng LED na kabit sa kagamitang pabahay ng electronics. Gumamit din ako ng velcro sa Arduino. Ginawa itong napaka maginhawa para sa paghila ng Arduino kung nais kong baguhin ang code.

Inirerekumendang: