Innholdsfortegnelse:

Cyclone LED Arcade Game: 4 trinn
Cyclone LED Arcade Game: 4 trinn

Video: Cyclone LED Arcade Game: 4 trinn

Video: Cyclone LED Arcade Game: 4 trinn
Video: Кто-нибудь из вас слышал о полуночной игре? Страшные истории. Мистика. Ужасы 2024, September
Anonim
Image
Image
Installer i armatur
Installer i armatur

Hensikten med dette prosjektet var å lage et enkelt spill ved hjelp av en Arduino som ville være interaktiv og underholdende for barn. Jeg husker at Cyclone arkadespill var et av mine favoritt arkadespill da jeg var yngre, så jeg bestemte meg for å replikere det. Dette er et veldig enkelt prosjekt som består av en Arduino, en rekke individuelt adresserbare lysdioder og en trykknapp.

Målet med spillet er å stoppe sykkellampen når den når den angitte (røde) LED -en. Hvis det lykkes, vil vanskelighetsgraden øke. Hvis det ikke lykkes, starter lyssyklusen på nytt med det nåværende vanskelighetsgraden.

Denne instruerbare var en enorm ressurs for kjernen i kodingen min.

Trinn 1: Samle rekvisita

  • Hovedkomponenter:

    • Arduino (jeg brukte en UNO)
    • Streng av individuelt adresserbare lysdioder (jeg brukte link)
    • Trykknapp (jeg brukte lenke)
    • Trykt kretskort (PCB) eller brødbrett
    • Strømforsyning (jeg brukte to separate strømforsyninger, du kan komme unna med en hvis du er kreativ)

      • 5V 3A for lysdioder
      • 9V 1A for Arduino
  • Rammeverk:

    • Elektronikkhus (jeg modifiserte en lampe i tre fra Goodwill)
    • LED -hus (jeg modifiserte din standard veggklokke og borede hull ved å bruke minuttidentifikatorene som hullmarkeringer. Bruk en treklokke om mulig for å gjøre boringen enklere.)
    • Knapphus (jeg brukte et albue PVC -rør)
  • Verktøy / andre materialer:

    • Reserve ledninger for kretsen din
    • 10K (nedtrekksmotstand for bryter) og 470 ohm (for datakabel på LED) motstander
    • Bor for å lage hull for lysdioder og for å lage nødvendige hull i armaturet for å føre ledninger gjennom
    • Loddejern for lodding av kretsen til en PCB
    • Varm limpistol for å feste lysdiodene til armaturet
    • Borrelås eller noen midler for å sikre rammen sammen
    • Pakninger er valgfrie for hull som er boret for at ledninger skal passere

Trinn 2: Last opp kode

Sørg for å laste ned og legge til "FastLED" -biblioteket

Kjernen i koden (void loop) består av to tilstander: trykknapp høy (sluttspill) og trykknapp lav (spiller). Når brukeren trykker på knappen, blir LED -adressen lyset ble stoppet på, sammenlignet med adressen til senterlampen. Hvis de ikke er de samme, blinker alle lysene rødt to ganger og gjeldende nivå starter på nytt. Hvis de er de samme, kjører cylon (FastLED bibliotekskript) to ganger, vanskelighetsgraden øker og spillet fortsetter. Når spilleren slår det siste nivået, løper cylon åttende ganger og spillet starter på nytt på nivå 1.

// Cyclone Game

#inkludere "FastLED.h" // opptil 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 // Definisjon av vanskelighetsgrader #define LETT 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 // Startvansker int vanskelighetsgrad = 1; // Definer matrisen med leds CRGB leds [NUM_LEDS]; // Vant spilleren denne runden? Denne koden brukes for vanskelighetsparametere. bool wonThisRound = false; // Startsted for sykkellampen int LEDaddress = 0; // Kjører spillet? bool Spiller = sant; // Er dette den første seieren? bool CycleEnded = true; // Knappdetaljer const int buttonPin = 9; int buttonState = 0; // Initialiser led -biblioteket og arduino -funksjoner ugyldig oppsett () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Kjøttet og potetene // To moduser - Playing and End Game void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // Brukeren har trykket på knappen, og lysdioden har stoppet på den vinnende adressen. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Svart; } leds [CENTER_LED] = CRGB:: Rød; leds [LEDaddress] = CRGB:: Grønn; FastLED.show (); hvis (CycleEnded = true) {int diff = abs (CENTER_LED - LEDadresse); // Finner avstanden mellom lysdioden og senterledningen hvis (diff == 0) {wonThisRound = true; // Spilleren slo nivået vellykket hvis (vanskeligheter! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (vanskelighetsgrad == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } vanskelighetsgrad = 0; } øke vanskelighetsgrad (); wonThisRound = false; } annet {forsinkelse (1000); for (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LEDadresse = 0; forsinkelse (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Playing = true; }} // PLAYING if (Playing) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Slår av alle lysdiodene} lysdioder [CENTER_LED] = CRGB:: Rød; // Setter senterfarget farge til grønne lysdioder [LEDadresse] = CRGB:: Grønn; // Angir sylindert led -farge til rød FastLED.show (); // Initialiserer lyssyklus LEDadresse ++; // Angir lyssyklus til en led om gangen hvis (LEDadresse == NUM_LEDS) {LEDadresse = 0; } forsinkelse (getTime (vanskelighetsgrad)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = true; }}} // Nivåparametere int getTime (int diff) // Returnerer tidsforsinkelse for ledet bevegelsesbase på vanskelighetsgrad {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; gå i stykker; sak MEDIUM: timeValue = 80; gå i stykker; sak HARD: timeValue = 60; gå i stykker; sak ON_SPEED: timeValue = 40; gå i stykker; sak SONIC_SPEED: timeValue = 30; gå i stykker; sak ROCKET_SPEED: timeValue = 20; gå i stykker; sak LIGHT_SPEED: timeValue = 13; gå i stykker; sak MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Returner forsinkelsesbeløpet} // Vinningsvanskeligheter øke parametere ugyldig økningDivilitet () {if (vanskelighetsgrad! = MISSION_IMPOSSIBLE && wonThisRound) {vanskelighetsgrad ++; }} // Tapt LED Vis ugyldig blits () {fill_solid (leds, NUM_LEDS, CRGB:: Rød); FastLED.show (); forsinkelse (500); fill_solid (leds, NUM_LEDS, CRGB:: Black); FastLED.show (); forsinkelse (500); } // Vant LED Vis void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {statisk uint8_t hue = 0; Serial.print ("x"); // Før først lysdioden i en retning for (int i = 0; i = 0; i--) {// Sett lysdioden til røde lysdioder = CHSV (hue ++, 255, 255); // Vis lysdiodene FastLED.show (); // nå som vi har vist lysdiodene, tilbakestiller jeg ledningen til svart // leds = CRGB:: Svart; fadeall (); // Vent litt før vi går rundt og gjør det igjen forsinkelse (10); }}

Trinn 3: Installer i Fixture

Installer i armatur
Installer i armatur
Installer i armatur
Installer i armatur

Jeg kommer ikke til å gå inn på detaljer i denne delen. Det er tusen forskjellige måter å gå om denne delen på, og jeg synes du bør være kreativ for å få den til å se slik du liker den. Når det er sagt, var klokken ganske praktisk å bruke for LED -lysene, da den hadde små indikatorer som jeg kunne bruke som boremarkeringer. Glassdekselet lar meg også bruke dette som bord.

Borrelåsen var også veldig nyttig for å feste LED -armaturet til elektronikkhuset. Jeg brukte også borrelås på Arduino. Dette gjorde det veldig praktisk å trekke Arduino ut hvis jeg noen gang vil endre koden.

Anbefalt: