Sisällysluettelo:

Cyclone LED Arcade Game: 4 vaihetta
Cyclone LED Arcade Game: 4 vaihetta

Video: Cyclone LED Arcade Game: 4 vaihetta

Video: Cyclone LED Arcade Game: 4 vaihetta
Video: Arduino Cyclone Arcade LED Chaser Game 2024, Syyskuu
Anonim
Image
Image
Asenna Fixtureen
Asenna Fixtureen

Tämän projektin tarkoituksena oli luoda yksinkertainen peli Arduinolla, joka olisi interaktiivinen ja viihdyttävä lapsille. Muistan, että Cyclone -arcade -peli oli yksi suosikki arcade -peleistäni nuorempana, joten päätin toistaa sen. Tämä on hyvin yksinkertainen projekti, joka koostuu Arduinosta, merkkijonosta yksilöllisesti osoitettavia LED -valoja ja painikkeesta.

Pelin tavoitteena on pysäyttää pyöräilyvalo, kun se saavuttaa ilmoitetun (punaisen) LED -valon. Jos onnistuu, vaikeustaso kasvaa. Jos epäonnistuu, valosykli käynnistyy uudelleen nykyisellä vaikeustasolla.

Tämä ohje oli valtava resurssi koodaukseni ytimelle.

Vaihe 1: Kerää tarvikkeita

  • Pääkomponentit:

    • Arduino (käytin UNO: ta)
    • Jono yksilöllisesti osoitettavia LED -valoja (käytin linkkiä)
    • Painike (käytin linkkiä)
    • Painettu piirilevy (PCB) tai leipälevy
    • Virtalähde (käytin kahta erillistä virtalähdettä, saatat päästä eroon yhdestä, jos olet luova)

      • 5V 3A LEDeille
      • 9V 1A Arduinolle
  • Kehys:

    • Elektroniikkakotelo (muutin Goodwillin puulamppulamppua)
    • LED -kotelo (muutin tavallista seinäkelloa ja porasin reikiä käyttämällä minuutti -tunnisteita reikämerkintöinä. Käytä puukelloa, jos mahdollista porauksen helpottamiseksi.)
    • Nappikotelo (käytin kyynärpää PVC -putkea)
  • Työkalut / muut materiaalit:

    • Varajohdot piirillesi
    • 10K (alasvetovastus kytkimelle) ja 470 ohmia (LED-valojen datajohdolle) vastukset
    • Poraa reikien luomiseen LEDien sijoittamiseksi ja tarvittavien reikien tekemiseen johtojen johtamiseksi
    • Juotosrauta piirin juottamiseen piirilevyyn
    • Kuuma liimapistooli LEDien kiinnittämiseen kiinnikkeeseesi
    • Tarranauha tai jokin keino kehyksen kiinnittämiseksi yhteen
    • Tiivisteet valinnaiset johtojen poraamiseen tarkoitettuihin reikiin

Vaihe 2: Lähetä koodi

Varmista, että lataat ja lisäät FastLED -kirjaston

Koodin ydin (mitätön silmukka) koostuu kahdesta tilasta: painike korkea (Lopeta peli) ja painike matala (Toisto). Kun käyttäjä on painanut painiketta, LED -osoitetta, johon valo sammutettiin, verrataan keskimmäisen LED -osoitteen osoitteeseen. Jos ne eivät ole samat, kaikki valot vilkkuvat punaisena kahdesti ja nykyinen taso käynnistyy uudelleen. Jos ne ovat samat, cylon (FastLED -kirjastoskripti) suoritetaan kahdesti, vaikeustaso kasvaa ja toisto jatkuu. Kun pelaaja voittaa viimeisen tason, cylon juoksee kahdeksannen kerran ja peli käynnistyy uudelleen tasolta 1.

// Cyclone Game

#include "FastLED.h" // enintään 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 // vaikeustasojen määritelmä #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 // Aloitusvaikeus int vaikeus = 1; // Määritä ledien ryhmä CRGB -ledit [NUM_LEDS]; // Voittiko pelaaja tämän kierroksen? Tätä tagia käytetään vaikeusparametreihin. bool wonThisRound = epätosi; // Pyöräilyvalon lähtöpaikka int LED -osoite = 0; // Onko peli käynnissä? bool Playing = totta; // Onko tämä ensimmäinen voitto? bool CycleEnded = tosi; // Painikkeiden tiedot const int buttonPin = 9; int -painike Tila = 0; // Alusta led -kirjasto ja arduino -toiminnot void setup () {FastLED.addLeds (ledit, NUM_LEDS); FastLED.setBrightness (KIRKKAUS); pinMode (buttonPin, INPUT); Sarja.alku (9600); } // Liha ja perunat // Kaksi tilaa - Playing ja End Game void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Toistetaan = false; // Käyttäjä on painanut painiketta, ja LED on pysähtynyt voittajaosoitteessa. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; } ledit [CENTER_LED] = CRGB:: Punainen; ledit [LED -osoite] = CRGB:: Vihreä; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LED -osoite); // Etsii valaistun ledin ja keskijohtimen välisen etäisyyden, jos (diff == 0) {wonThisRound = true; // Pelaaja voitti tason onnistuneesti, jos (vaikeus! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} jos (vaikeus == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } vaikeus = 0; } lisäysVaikeus (); wonThisRound = epätosi; } else {delay (1000); for (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LED -osoite = 0; viive (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Toistetaan = totta; }} // PELAA, jos (toistetaan) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Sammuttaa kaikki ledit} ledit [CENTER_LED] = CRGB:: Punainen; // Asettaa keskijohdon värin vihreiksi lediksi [LED -osoite] = CRGB:: Vihreä; // Asettaa sylinterin led -värin punaiseksi FastLED.show (); // Alustaa valosyklin LED -osoite ++; // Asettaa valosyklin yhdeksi lediksi kerrallaan, jos (LED -osoite == NUM_LEDS) {LED -osoite = 0; } viive (getTime (vaikeus)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Toistetaan = false; CycleEnded = tosi; }}} // Tasoparametrit int getTime (int diff) // Palauttaa aikaviiveen johtamalle liikekannalle vaikeudessa {int timeValue = 0; kytkin (diff) {tapaus EASY: timeValue = 100; tauko; tapaus MEDIUM: timeValue = 80; tauko; tapaus HARD: timeValue = 60; tauko; tapaus ON_SPEED: timeValue = 40; tauko; tapaus SONIC_SPEED: timeValue = 30; tauko; tapaus ROCKET_SPEED: timeValue = 20; tauko; tapaus LIGHT_SPEED: timeValue = 13; tauko; tapaus MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Palauta viivästysmäärä} // Voittamisvaikeuksien lisäysparametrit void IncreDiflengy () {if (vaikeus! = MISSION_IMPOSSIBLE && wonThisRound) {vaikeus ++; }} // Lost LED Show void flash () {fill_solid (ledit, NUM_LEDS, CRGB:: Red); FastLED.show (); viive (500); fill_solid (ledit, NUM_LEDS, CRGB:: musta); FastLED.show (); viive (500); } // Won LED Show void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {staattinen uint8_t sävy = 0; Serial.print ("x"); // Liu'uta lediä ensin yhteen suuntaan (int i = 0; i = 0; i--) {// Aseta ensimmäinen led punaisiksi lediksi = CHSV (sävy ++, 255, 255); // Näytä ledit FastLED.show (); // nyt kun olemme osoittaneet ledit, nollaa ensimmäinen led mustaksi // ledit = CRGB:: Musta; fadeall (); // Odota vähän ennen kuin kiertämme ja teemme sen uudelleen viiveellä (10); }}

Vaihe 3: Asenna Fixtureen

Asenna Fixtureen
Asenna Fixtureen
Asenna Fixtureen
Asenna Fixtureen

En aio mennä yksityiskohtiin tässä osiossa. Tässä osassa on tuhansia eri tapoja edetä, ja mielestäni sinun pitäisi olla luova, jotta se näyttää siltä, mistä pidät. Tästä huolimatta kello oli melko kätevä käyttää LED -valojen asentamiseen, koska sillä oli minuutti -indikaattoreita, joita pystyin käyttämään porausmerkintöinä. Lisäksi lasikansi antaa minulle mahdollisuuden käyttää tätä pöytänä.

Tarranauha oli erittäin hyödyllinen myös LED -valaisimen kiinnittämiseksi elektroniikkakoteloon. Käytin myös tarranauhaa Arduinossa. Tämä teki erittäin käteväksi Arduinon vetämisen ulos, jos haluan koskaan muuttaa koodia.

Suositeltava: