Inhoudsopgave:

Cyclone LED Arcade Game - Ajarnpa
Cyclone LED Arcade Game - Ajarnpa

Video: Cyclone LED Arcade Game - Ajarnpa

Video: Cyclone LED Arcade Game - Ajarnpa
Video: Arduino Cyclone Arcade Game 2024, December
Anonim
Image
Image
Installeren in armatuur
Installeren in armatuur

De bedoeling van dit project was om een eenvoudig spel te maken met een Arduino dat interactief en vermakelijk zou zijn voor kinderen. Ik herinner me dat het Cyclone-arcadespel een van mijn favoriete arcade-spellen was toen ik jonger was, dus besloot ik het te repliceren. Dit is een heel eenvoudig project dat bestaat uit een Arduino, een reeks individueel adresseerbare LED's en een drukknop.

Het doel van het spel is om het fietslicht te stoppen wanneer het de aangegeven (rode) LED bereikt. Als dit lukt, wordt de moeilijkheidsgraad verhoogd. Als dit niet lukt, wordt de lichtcyclus opnieuw gestart op de huidige moeilijkheidsgraad.

Deze instructable was een enorme bron voor de kern van mijn codering.

Stap 1: Verzamel benodigdheden

  • Hoofd onderdelen:

    • Arduino (ik gebruikte een UNO)
    • String van individueel adresseerbare LED's (ik gebruikte link)
    • Drukknop (ik gebruikte link)
    • Printplaat (PCB) of breadboard
    • Voeding (ik heb twee aparte voedingen gebruikt, misschien kom je er wel mee weg als je creatief bent)

      • 5V 3A voor LED's
      • 9V 1A voor Arduino
  • Kader:

    • Elektronicabehuizing (ik heb een houten lamparmatuur van Goodwill aangepast)
    • LED-behuizing (ik heb uw standaard wandklok aangepast en gaten geboord met behulp van de minuutaanduidingen als gatmarkeringen. Gebruik indien mogelijk een houten klok om het boren gemakkelijker te maken.)
    • Knopbehuizing (ik gebruikte een elleboog PVC-buis)
  • Gereedschap / Overige materialen:

    • Reserve bedrading voor uw circuit
    • 10K (aftrekweerstand voor schakelaar) en 470 ohm (voor datakabel op LED's) weerstanden
    • Boor voor het maken van gaten om uw LED's te huisvesten en voor het maken van de nodige gaten in uw armatuur om draden door te leiden
    • Soldeerbout voor het solderen van je schakeling op een PCB
    • Heet lijmpistool voor het bevestigen van de LED's aan uw armatuur
    • Klittenband of een ander middel om het raamwerk aan elkaar te bevestigen
    • Pakkingen optioneel voor geboorde gaten om draden door te laten gaan

Stap 2: Upload code

Zorg ervoor dat u de "FastLED"-bibliotheek downloadt en toevoegt

De kern van de code (void loop) bestaat uit twee toestanden: drukknop hoog (End Game) en drukknop laag (Playing). Zodra de gebruiker op de knop drukt, wordt het LED-adres waarop het licht was gestopt vergeleken met het adres van de middelste LED. Als ze niet hetzelfde zijn, knipperen alle lampjes twee keer rood en wordt het huidige niveau opnieuw gestart. Als ze hetzelfde zijn, wordt cylon (FastLED-bibliotheekscript) twee keer uitgevoerd, neemt de moeilijkheidsgraad toe en wordt het spelen hervat. Zodra de speler het laatste niveau verslaat, wordt cylon achtste keer uitgevoerd en begint het spel opnieuw op niveau 1.

// Cycloon Game

#include "FastLED.h" //tot 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB //bereik 0-64 #define BRIGHTNESS 50 //Definitie van moeilijkheidsgraden #define GEMAKKELIJK 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 //Beginmoeilijkheid int moeilijkheid = 1; // Definieer de reeks leds CRGB leds [NUM_LEDS]; // Heeft de speler deze ronde gewonnen? Deze tag wordt gebruikt voor moeilijkheidsparameters. bool wonThisRound = false; // Startlocatie van het fietslicht int LEDaddress = 0; // Draait het spel? bool Spelen = waar; // Is dit de eerste overwinning? bool CycleEnded = waar; // Knopdetails const int buttonPin = 9; int knopState = 0; // Initialiseer de led-bibliotheek en arduino-functies void setup () { FastLED.addLeds (leds, NUM_LEDS); FastLED.setHelderheid (HELDERHEID); pinMode (knopPin, INPUT); Serieel.begin(9600); } // Het vlees en de aardappelen // Twee modi - Spelen en einde spel void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HOOG) { Spelen = false; // Gebruiker heeft op de knop gedrukt en de LED is gestopt op het winnende adres. for (int i = 0; i <NUM_LEDS; i++) { leds = CRGB::Black; } leds[CENTER_LED] = CRGB::Rood; leds[LEDadres] = CRGB::Groen; FastLED.show(); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Vindt afstand tussen de verlichte led en de middelste led if (diff == 0) { wonThisRound = true; // Speler heeft het niveau met succes verslagen if (moeilijkheid! = MISSION_IMPOSSIBLE) { for (int i = 0; i < 2; i++) { cylon (); } } if (moeilijkheid == MISSION_IMPOSSIBLE) { for (int i = 0; i < 8; i++) { cylon(); } moeilijkheid = 0; } verhoogde moeilijkheidsgraad(); wonThisRound = false; } anders { vertraging(1000); voor (int i = 0; i < 2; i++) { flash(); } } CycleEnded = false; } LED-adres = 0; vertraging (250); buttonState = digitalRead (buttonPin); if (buttonState == LAAG) { Spelen = waar; } } // PLAYING if (Playing) { for (int i = 0; i < NUM_LEDS; i++) { leds = CRGB::Black; // Schakelt alle leds uit } leds [CENTER_LED] = CRGB::Rood; // Stelt de kleur van de middelste led in op groene leds [LED-adres] = CRGB::Groen; // Stelt cyling led-kleur in op rood FastLED.show(); //Initialiseert lichtcyclus LEDaddress++; // Stelt de lichtcyclus in op één led tegelijk als (LEDaddress == NUM_LEDS) {LEDaddress = 0; } vertraging (getTime (moeilijkheid)); buttonState = digitalRead (buttonPin); if (buttonState == HOOG) { Spelen = false; CycleEnded = waar; } } } //Niveauparameters int getTime (int diff) // Retourneert tijdvertraging voor led-beweging op basis van moeilijkheidsgraad { int timeValue = 0; switch (diff) { case EASY: timeValue = 100; pauze; geval MEDIUM: timeValue = 80; pauze; geval HARD: timeValue = 60; pauze; geval ON_SPEED: timeValue = 40; pauze; geval SONIC_SPEED: timeValue = 30; pauze; geval ROCKET_SPEED: timeValue = 20; pauze; geval LIGHT_SPEED: timeValue = 13; pauze; geval MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue;// Retourneer het vertragingsbedrag } //Winnen moeilijkheidsgraad verhogen parameters void verhogingDifficulty() { if (moeilijkheidsgraad!= MISSION_IMPOSSIBLE && wonThisRound) { moeilijkheidsgraad++; } } // Lost LED Show void flash () {fill_solid (leds, NUM_LEDS, CRGB::Red); FastLED.show(); vertraging (500); fill_solid(leds, NUM_LEDS, CRGB::Zwart); FastLED.show(); vertraging (500); } //Won LED Show void fadeall() { for(int i = 0; i <NUM_LEDS; i++) { leds.nscale8(250); } } void cylon () { static uint8_t tint = 0; Serieel.print("x"); // Schuif eerst de led in één richting for(int i = 0; i = 0; i--) { // Zet de i'th led op rode leds = CHSV(hue++, 255, 255); // Toon de leds FastLED.show(); // nu we de leds hebben getoond, zet de i-de led terug op zwart // leds = CRGB::Black; fadeall(); // Wacht een beetje voordat we een rondje maken en het opnieuw doen delay (10); } }

Stap 3: Installeer in armatuur

Installeren in armatuur
Installeren in armatuur
Installeren in armatuur
Installeren in armatuur

In deze paragraaf ga ik niet in details treden. Er zijn duizend verschillende manieren om dit onderdeel aan te pakken en ik denk dat je creatief moet zijn om het eruit te laten zien zoals jij het wilt. Dat gezegd hebbende, de klok was best handig om te gebruiken voor het huisvesten van de LED's, omdat hij minuutindicatoren had die ik als boormarkeringen kon gebruiken. Door de glazen kap kan ik dit ook als tafel gebruiken.

Het klittenband was ook erg handig om de LED-armatuur aan de elektronicabehuizing te bevestigen. Ik gebruikte ook klittenband op de Arduino. Dit maakte het erg handig om de Arduino eruit te halen als ik ooit de code wil wijzigen.

Aanbevolen: