Indholdsfortegnelse:

Cyklon LED -arkadespil: 4 trin
Cyklon LED -arkadespil: 4 trin

Video: Cyklon LED -arkadespil: 4 trin

Video: Cyklon LED -arkadespil: 4 trin
Video: Avoid THIS MISTAKE with Rock Lights ! ⚠️ #liftedtrucks 2024, September
Anonim
Image
Image
Installer i armatur
Installer i armatur

Hensigten med dette projekt var at skabe et simpelt spil ved hjælp af en Arduino, der ville være interaktiv og underholdende for børn. Jeg kan huske, at Cyclone -arkadespillet var et af mine foretrukne arkadespil, da jeg var yngre, så jeg besluttede at gentage det. Dette er et meget enkelt projekt, der består af en Arduino, en række individuelt adresserbare lysdioder og en trykknap.

Målet med spillet er at stoppe cykellampen, når den når den angivne (røde) LED. Hvis det lykkes, vil sværhedsgraden stige. Hvis det ikke lykkes, genstarter lyscyklussen ved det aktuelle sværhedsgrad.

Denne instruerbare var en enorm ressource for kernen i min kodning.

Trin 1: Saml forbrugsvarer

  • Hovedkomponenter:

    • Arduino (jeg brugte en UNO)
    • String af individuelt adresserbare lysdioder (jeg brugte link)
    • Trykknap (jeg brugte link)
    • Printkort (PCB) eller brødbræt
    • Strømforsyning (jeg brugte to separate strømforsyninger, du slipper måske med en, hvis du er kreativ)

      • 5V 3A til LED'er
      • 9V 1A til Arduino
  • Ramme:

    • Elektronikhus (jeg modificerede en trælampe fra Goodwill)
    • LED -hus (jeg ændrede dit standardvægur og borede huller ved hjælp af minutidentifikatorerne som hulmarkeringer. Brug et træur, hvis det er muligt for at gøre boringen lettere.)
    • Knaphus (jeg brugte et albue PVC -rør)
  • Værktøjer / andre materialer:

    • Reserve ledninger til dit kredsløb
    • 10K (pull-down modstand til switch) og 470 ohm (til datakabel på LED'er) modstande
    • Bor til at skabe huller til at rumme dine lysdioder og til at lave de nødvendige huller i din armatur for at føre ledninger igennem
    • Loddejern til lodning af dit kredsløb til et printkort
    • Varm limpistol til fastgørelse af lysdioderne til din armatur
    • Velcro eller nogle midler til at sikre rammen sammen
    • Pakninger er valgfri til huller, der er boret for, at ledninger kan passere igennem

Trin 2: Upload kode

Sørg for at downloade og tilføje biblioteket "FastLED"

Kernen i koden (void loop) består af to tilstande: trykknap høj (Afslut spil) og trykknap lav (Afspilning). Når brugeren trykker på knappen, sammenlignes LED -adressen, lyset blev stoppet på, med adressen på den midterste LED. Hvis de ikke er de samme, blinker alle lysene rødt to gange, og det aktuelle niveau genstarter. Hvis de er ens, kører cylon (FastLED biblioteks script) to gange, sværhedsgraden stiger, og afspilningen genoptages. Når spilleren slår det sidste niveau, kører cylon ottende gange, og spillet genstarter på niveau 1.

// Cyklon spil

#include "FastLED.h" // op til 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // interval 0-64 #define BRIGHTNESS 50 // Definition af sværhedsgrader #define NEM 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 // Startproblemer int sværhedsgrad = 1; // Definer matrixen af leds CRGB leds [NUM_LEDS]; // Vandt spilleren denne runde? Dette mærke bruges til vanskelighedsparametre. bool wonThisRound = false; // Startplacering af cykellampen int LEDaddress = 0; // Kører spillet? bool Afspilning = sandt; // Er dette den første sejr? bool CycleEnded = true; // Knapdetaljer const int buttonPin = 9; int buttonState = 0; // Initialiser led -biblioteket og arduino -funktioner tomrumsopsætning () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Kødet og kartoflerne // To tilstande - Afspilning og afslutning af tomrumsløkken () {// END GAME buttonState = digitalRead (buttonPin); hvis (buttonState == HIGH) {Playing = false; // Bruger har trykket på knappen, og lysdioden er stoppet på den vindende adresse. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Sort; } leds [CENTER_LED] = CRGB:: Rød; leds [LEDaddress] = CRGB:: Grøn; FastLED.show (); hvis (CycleEnded = true) {int diff = abs (CENTER_LED - LEDadresse); // Finder afstanden mellem den tændte LED og den midterste LED, hvis (diff == 0) {wonThisRound = true; // Spilleren har med succes slået niveauet hvis (vanskeligheder! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} hvis (vanskeligheder == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } sværhedsgrad = 0; } øge vanskeligheden (); wonThisRound = falsk; } ellers {forsinkelse (1000); for (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LEDadresse = 0; forsinkelse (250); buttonState = digitalRead (buttonPin); hvis (buttonState == LOW) {Playing = true; }} // PLAYING if (Playing) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Slukker for alle leds} leds [CENTER_LED] = CRGB:: Rød; // Indstiller centerled -farve til grønne lysdioder [LEDadresse] = CRGB:: Grøn; // Sætter cylindret led -farve til rød FastLED.show (); // Initialiserer lyscyklus LEDaddress ++; // Indstiller lyscyklus til en led ad gangen, hvis (LEDaddress == NUM_LEDS) {LEDaddress = 0; } forsinkelse (getTime (vanskeligheder)); buttonState = digitalRead (buttonPin); hvis (buttonState == HIGH) {Playing = false; CycleEnded = true; }}} // Niveauparametre int getTime (int diff) // Returnerer tidsforsinkelse for LED -bevægelsesbase på vanskeligheder {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; pause; sag MEDIUM: timeValue = 80; pause; sag HARD: timeValue = 60; pause; sag ON_SPEED: timeValue = 40; pause; sag SONIC_SPEED: timeValue = 30; pause; sag ROCKET_SPEED: timeValue = 20; pause; sag LIGHT_SPEED: timeValue = 13; pause; sag MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Returner forsinkelsesbeløbet} // Vinderproblemer øger parametre void increaseDif vanskelighed () {hvis (vanskeligheder! = MISSION_IMPOSSIBLE && wonThisRound) {vanskeligheder ++; }} // Tabt LED Vis ugyldig flash () {fill_solid (leds, NUM_LEDS, CRGB:: Rød); FastLED.show (); forsinkelse (500); fill_solid (lysdioder, NUM_LEDS, CRGB:: sort); FastLED.show (); forsinkelse (500); } // Vundet 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--) {// Indstil den første led til røde lysdioder = CHSV (hue ++, 255, 255); // Vis lysdioderne FastLED.show (); // nu hvor vi har vist lysdioderne, skal du nulstille i'th førte til sort // leds = CRGB:: Sort; fadeall (); // Vent lidt, før vi går rundt og gør det igen forsinkelse (10); }}

Trin 3: Installer i Fixture

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

Jeg vil ikke gå i detaljer i dette afsnit. Der er tusind forskellige måder at gå om denne del på, og jeg synes, du skal være kreativ for at få det til at se ud, som du kan lide det. Når det er sagt, var uret ret bekvemt at bruge til at huse LED'erne, da det havde små indikatorer, som jeg kunne bruge som boremærker. Glassdækslet lader mig også bruge dette som bord.

Velcroen var også meget nyttig til at fastgøre LED -armaturet til elektronikhuset. Jeg brugte også velcro på Arduino. Dette gjorde det meget bekvemt at trække Arduino ud, hvis jeg nogensinde vil ændre koden.

Anbefalede: