Inhaltsverzeichnis:

Cyclone LED Arcade-Spiel - Gunook
Cyclone LED Arcade-Spiel - Gunook

Video: Cyclone LED Arcade-Spiel - Gunook

Video: Cyclone LED Arcade-Spiel - Gunook
Video: Arduino Cyclone Arcade Game 2024, November
Anonim
Image
Image
Im Gerät installieren
Im Gerät installieren

Die Absicht dieses Projekts war es, ein einfaches Spiel mit einem Arduino zu erstellen, das für Kinder interaktiv und unterhaltsam ist. Ich erinnere mich, dass das Arcade-Spiel Cyclone eines meiner Lieblings-Arcade-Spiele war, als ich jünger war, also beschloss ich, es zu replizieren. Dies ist ein sehr einfaches Projekt, das aus einem Arduino, einer Reihe von einzeln adressierbaren LEDs und einem Druckknopf besteht.

Das Ziel des Spiels ist es, das Fahrradlicht zu stoppen, wenn es die angezeigte (rote) LED erreicht. Bei Erfolg wird der Schwierigkeitsgrad erhöht. Wenn dies nicht erfolgreich ist, wird der Lichtzyklus mit dem aktuellen Schwierigkeitsgrad neu gestartet.

Dieses instructable war eine riesige Ressource für den Kern meiner Codierung.

Schritt 1: Vorräte sammeln

  • Hauptbestandteile:

    • Arduino (ich habe eine UNO verwendet)
    • Reihe von einzeln adressierbaren LEDs (ich habe Link verwendet)
    • Druckknopf (ich habe Link verwendet)
    • Leiterplatte (PCB) oder Steckbrett
    • Netzteil (Ich habe zwei separate Netzteile verwendet, wenn Sie kreativ sind, können Sie mit einem davonkommen)

      • 5V 3A für LEDs
      • 9V 1A für Arduino
  • Rahmen:

    • Elektronikgehäuse (ich habe eine hölzerne Lampenfassung von Goodwill modifiziert)
    • LED-Gehäuse (Ich habe Ihre Standard-Wanduhr modifiziert und Löcher mit den Minutenmarkierungen als Lochmarkierungen gebohrt. Verwenden Sie nach Möglichkeit eine Holzuhr, um das Bohren zu erleichtern.)
    • Knopfgehäuse (ich habe ein PVC-Winkelrohr verwendet)
  • Werkzeuge / Andere Materialien:

    • Ersatzverkabelung für Ihre Schaltung
    • 10K (Pulldown-Widerstand für Schalter) und 470 Ohm (für Datenkabel auf LEDs) Widerstände
    • Bohren Sie zum Erstellen von Löchern zur Aufnahme Ihrer LEDs und zum Herstellen aller erforderlichen Löcher in Ihrer Leuchte, um Drähte hindurchzuführen
    • Lötkolben zum Löten Ihrer Schaltung auf eine Leiterplatte
    • Heißklebepistole zum Befestigen der LEDs an Ihrer Leuchte
    • Klettverschluss oder ein Mittel zur Befestigung des Rahmens
    • Optionale Dichtungen für Löcher für Kabeldurchführungen

Schritt 2: Code hochladen

Stellen Sie sicher, dass Sie die Bibliothek "FastLED" herunterladen und hinzufügen

Der Kern des Codes (Void Loop) besteht aus zwei Zuständen: Push Button High (End Game) und Push Button Low (Playing). Sobald der Benutzer die Taste drückt, wird die LED-Adresse, an der das Licht gestoppt wurde, mit der Adresse der mittleren LED verglichen. Wenn sie nicht gleich sind, blinken alle Lichter zweimal rot und die aktuelle Ebene wird neu gestartet. Wenn sie gleich sind, wird cylon (FastLED-Bibliotheksskript) zweimal ausgeführt, der Schwierigkeitsgrad erhöht sich und das Spiel wird fortgesetzt. Sobald der Spieler das letzte Level besiegt hat, läuft cylon achtmal und das Spiel startet mit Level 1 neu.

//Cyclone-Spiel

#include "FastLED.h" //bis zu 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 //Definition der Schwierigkeitsstufen #define EINFACH 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 //Anfangsschwierigkeit int Schwierigkeit = 1; // Definiere das Array von LEDs CRGB leds[NUM_LEDS]; // Hat der Spieler diese Runde gewonnen? Dieses Tag wird für Schwierigkeitsparameter verwendet. bool wonThisRound = false; // Startposition des Fahrradlichts int LEDaddress = 0; // Läuft das Spiel? bool Spielen = true; // Ist das der erste Sieg? bool CycleEnded = true; // Schaltflächendetails const int buttonPin = 9; int buttonState = 0; // Initialisieren Sie die LED-Bibliothek und die Arduino-Funktionen void setup () { FastLED.addLeds (leds, NUM_LEDS); FastLED.setHelligkeit (HELLIGKEIT); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Das Fleisch und die Kartoffeln // Zwei Modi - Spielen und Beenden des Spiels void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) { Spielen = false; // Der Benutzer hat die Taste gedrückt und die LED an der Gewinneradresse hat aufgehört. für (int i = 0; i < NUM_LEDS; i++) {leds = CRGB::Schwarz; } LEDs[CENTER_LED] = CRGB::Rot; leds[LEDadresse] = CRGB::Grün; FastLED.show(); if (CycleEnded = true) { int diff = abs (CENTER_LED - LEDaddress); // Findet den Abstand zwischen der beleuchteten LED und der mittleren LED if (diff == 0) { WonThisRound = true; //Spieler erfolgreich das Level meistern if (schwierigkeit != MISSION_IMPOSSIBLE) { for (int i = 0; i < 2; i++) { cylon(); }} if (Schwierigkeit == MISSION_IMPOSSIBLE) { for (int i = 0; i < 8; i++) { cylon(); } Schwierigkeit = 0; } erhöhenSchwierigkeit(); wonThisRound = false; aufrechtzuerhalten. Sonst { Verzögerung (1000); für (int i = 0; i < 2; i ++) { flash (); } } CycleEnded = false; } LED-Adresse = 0; Verzögerung (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) { Spielen = true; }} //SPIELEN if (Playing) { for (int i = 0; i <NUM_LEDS; i++) {leds = CRGB::Black; // Schaltet alle LEDs aus} leds[CENTER_LED] = CRGB::Red; // Setzt die Farbe der mittleren LED auf grüne LEDs [LEDaddress] = CRGB::Green; // Setzt die LED-Farbe auf Rot FastLED.show (); // Initialisiert Lichtzyklus LEDaddress++; // Setzt den Lichtzyklus auf eine LED nach der anderen if (LEDaddress == NUM_LEDS) { LEDaddress = 0; } Verzögerung (getTime (Schwierigkeit)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) { Spielen = false; CycleEnded = wahr; } } } // Level-Parameter int getTime(int diff) // Gibt die Zeitverzögerung für die LED-Bewegung basierend auf der Schwierigkeit zurück { int timeValue = 0; Schalter (diff) { Fall EINFACH: timeValue = 100; brechen; Fall MEDIUM: timeValue = 80; brechen; Fall HARD: timeValue = 60; brechen; Fall ON_SPEED: timeValue = 40; brechen; Fall SONIC_SPEED: timeValue = 30; brechen; Fall ROCKET_SPEED: timeValue = 20; brechen; Fall LIGHT_SPEED: timeValue = 13; brechen; Fall MISSION_IMPOSSIBLE: timeValue = 7; } timeValue zurückgeben; // Verzögerungsbetrag zurückgeben } // Schwierigkeitssteigerungsparameter beim Gewinnen void raiseDifficulty() { if (Schwierigkeit != MISSION_IMPOSSIBLE && wonThisRound) { schwierigkeit++; }} // Verlorene LED-Anzeige void flash () {fill_solid (leds, NUM_LEDS, CRGB::Red); FastLED.show(); Verzögerung (500); fill_solid (LEDs, NUM_LEDS, CRGB::Schwarz); FastLED.show(); Verzögerung (500); } // Gewonnene LED-Show void fadeall () { for (int i = 0; i < NUM_LEDS; i ++) {leds.nscale8(250); aufrechtzuerhalten. aufrechtzuerhalten. Void zylon () {statisch uint8_t Farbton = 0; Serial.print("x"); // Schieben Sie zuerst die LED in eine Richtung for(int i = 0; i = 0; i--) {// Setzen Sie die i-te LED auf rote LEDs = CHSV(hue++, 255, 255); // Zeigt die LEDs FastLED.show(); // jetzt, wo wir die leds gezeigt haben, setze die i-te led auf schwarz zurück // leds = CRGB::Black; Fadeall(); // Warten Sie ein wenig, bevor wir eine Schleife machen und es erneut tun delay(10); } }

Schritt 3: Installation im Gerät

Im Gerät installieren
Im Gerät installieren
Im Gerät installieren
Im Gerät installieren

Ich werde in diesem Abschnitt nicht auf Details eingehen. Es gibt tausend verschiedene Möglichkeiten, diesen Teil zu gestalten, und ich denke, Sie sollten kreativ sein, um ihn so aussehen zu lassen, wie Sie ihn mögen. Davon abgesehen war die Uhr ziemlich praktisch für die Unterbringung der LEDs, da sie Minutenindikatoren hatte, die ich als Bohrmarkierungen verwenden konnte. Durch die Glasabdeckung kann ich dies auch als Tisch verwenden.

Der Klettverschluss war auch sehr nützlich, um die LED-Halterung an der Elektronikgehäusehalterung zu befestigen. Ich habe auch Klettverschluss auf dem Arduino verwendet. Dies machte es sehr praktisch, den Arduino herauszuziehen, wenn ich den Code jemals ändern möchte.

Empfohlen: