Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Ninja Dollar LCD-Spiel mit Arduino UNO bauen

Komponenten und Zubehör

Komponente Menge Hinweise
Arduino UNO 1
Adafruit Standard LCD 16×2 (Weiß auf Blau) 1
Steckbrett (Breadboard) 2 Ich nutzte zwei für mehr Platz; eines reicht auch
Einstellpotentiometer 10 kΩ (Single Turn) 1 für LCD-Kontrast
LED (generisch) 2
Widerstand 1 kΩ 4
SparkFun Taster 12 mm 2 Springen & Schießen
RobotGeek Summer (Piezo) 1
Jumper-Kabel (generisch) 1

Benötigte Werkzeuge

Über dieses Projekt

Dies ist ein einfaches LCD-Spiel. Meine Inspiration war das Google-Chrome-Dino-Spiel, aber ich fügte einige Änderungen hinzu. Der Dollar-Krieger bewegt sich ständig und kann springen, um Hindernissen auszuweichen und „Stern“-Punkte zu sammeln. Springt er über ein Hindernis, gibt es 1 Punkt; fängt er den Stern, 5 Punkte. Er kann auch schießen und Hindernisse vor sich entfernen. LEDs zeigen an, ob er springt oder schießt. Alle 10, 20, 30 Punkte wird er schneller. Bei 50 Punkten gewinnt man. Berührt man ein Hindernis, verliert man. Diese Grenzen lassen sich im Code leicht ändern. Ein passiver Summer ertönt beim Springen/Schießen und spielt eine spezielle Melodie bei Gewinn/Verlust. Dies ist mein erstes Projekt hier – ich hoffe, es gefällt Ihnen. Kommentare und Bewertungen sind willkommen!

Das Video

(Video eingebettet im Original)

Verkabelung

Das LCD-Modul hat einen 16-poligen Male-Header auf der Unterseite. Stecken Sie ihn wie im Bild gezeigt in das Steckbrett. Alle elektronischen Signale zur Stromversorgung und Steuerung laufen über diesen Header.

Pin-Belegung (von links nach rechts):

Verbinden Sie 5 V des Arduino mit der roten Plus-Schiene oben am Breadboard. Verbinden Sie GND mit der blauen Minus-Schiene.

Die beiden äußeren Potentiometer-Pins an 5 V und GND anschließen.

Piezo-Summer: 3-polig: S → Pin 7, − → GND, mittlerer Pin → 5 V. 2-polig: ein Pin → GND, anderer → Pin 7.

Taster: Laut Schaltplan. Erster Taster (Springen) → Pin 1, Zweiter (Schießen) → Pin 6. LEDs werden nur von den Tastern gesteuert, nicht vom Arduino. Anode an Taster-Pin (der zum Arduino geht), Kathode an GND.

Code

dollar_warrior Arduino
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
const int buttonPin1 = 1;
const int buttonPin2 = 6;
const int buzzer = 7;

unsigned long pts = 0;
bool buttonState1 = 0;
bool buttonState2 = 0;

int randomNums[6];
int randomNum = 0;
int randomNums1[3];
int randomNum1 = 0;

unsigned int myDelay = 500;
bool temp = 0;
int tempI[16];
bool temp1 = 0;
int tempI1[3];
int button2IsPressed = 0;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  lcd.begin(16, 2);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buzzer, OUTPUT);
  lcd.setCursor(4, 0);
  lcd.print("THE GAME");
  lcd.setCursor(2, 1);
  lcd.print("STARTS IN ");
  lcd.print("5");
  delay(1000);
  lcd.setCursor(12, 1);
  lcd.print("4");
  delay(1000);
  lcd.setCursor(12, 1);
  lcd.print("3");
  delay(1000);
  lcd.setCursor(12, 1);
  lcd.print("2");
  delay(1000);
  lcd.setCursor(12, 1);
  lcd.print("1");
  delay(1000);
  lcd.clear();
}

void loop() {
  here:
  randomNum = random(5);
  for (int i = 0; i < randomNum; ++i) {
    randomNums[i] = random(16);
  }
  randomNum1 = random(3);
  for (int i = 0; i < randomNum1; ++i) {
    randomNums1[i] = random(16);
  }

  temp = 0;
  for (int j = 0; j < 3; ++j) tempI1[j] = 0;
  button2IsPressed = 0;

  for (int i = 0; i < 16; ++i) {
    // Punkte anzeigen
    if (pts > 9 && pts < 20) { lcd.setCursor(14, 0); myDelay = 400; }
    else if (pts > 19 && pts < 30) { lcd.setCursor(14, 0); myDelay = 300; }
    else if (pts > 29 && pts < 50) { myDelay = 200; lcd.setCursor(14, 0); }
    else if (pts >= 50) {
      pts = 0; myDelay = 500;
      lcd.clear();
      lcd.setCursor(5, 0); lcd.print("VICTORY");
      tone(buzzer, 262); delay(200);
      tone(buzzer, 330); delay(200);
      tone(buzzer, 392); delay(100);
      tone(buzzer, 330); delay(100);
      tone(buzzer, 392); delay(100);
      tone(buzzer, 523); delay(200);
      noTone(buzzer);
      delay(3000);
      lcd.clear();
      goto here;
    }
    else lcd.setCursor(15, 0);
    lcd.print(pts);

    buttonState1 = digitalRead(buttonPin1);
    buttonState2 = digitalRead(buttonPin2);

    // Hindernisse zeichnen
    if (!temp) {
      for (int j = 0; j < randomNum; ++j) {
        lcd.setCursor(randomNums[j], 1);
        lcd.print("#");
      }
    } else {
      for (int j = 0; j < randomNum; ++j) {
        if (tempI[0] > randomNums[j]) {
          lcd.setCursor(randomNums[j], 1);
          lcd.print("#");
        }
      }
    }

    // Sterne (Punkte) zeichnen
    if (!temp1) {
      for (int j = 0; j < randomNum1; ++j) {
        lcd.setCursor(randomNums1[j], 0);
        lcd.print("*");
      }
    } else {
      for (int j = 0; j < randomNum1; ++j) {
        if (randomNums1[j] != tempI1[j]) {
          lcd.setCursor(randomNums1[j], 0);
          lcd.print("*");
        }
      }
    }

    // Springen (Button 1)
    if (buttonState1 == HIGH) {
      lcd.setCursor(i, 0);
      tone(buzzer, 131); delay(200); noTone(buzzer);
    } else {
      lcd.setCursor(i, 1);
    }
    lcd.print("$");

    // Schießen (Button 2)
    if (buttonState2 == HIGH) {
      tone(buzzer, 175); delay(100); noTone(buzzer);
      temp = 1;
      if (buttonState1 == LOW) {
        tempI[button2IsPressed] = i;
      }
      ++button2IsPressed;
      for (int k = i + 1; k < 16; ++k) {
        if (buttonState1 == LOW) lcd.setCursor(k, 1);
        else lcd.setCursor(k, 0);
        lcd.print("~");
        delay(5);
        if (buttonState1 == LOW) lcd.setCursor(k - 1, 1);
        else lcd.setCursor(k - 1, 0);
        lcd.print(" ");
        delay(5);
      }
    }

    delay(myDelay);
    lcd.clear();

    // Stern eingesammelt?
    for (int j = 0; j < randomNum1; ++j) {
      if (i == randomNums1[j] && buttonState1 == HIGH) {
        temp1 = 1;
        tempI1[j] = i;
        pts += 5;
      }
    }

    // Kollision mit Hindernis?
    for (int j = 0; j < randomNum; ++j) {
      if (i == randomNums[j] && buttonState1 == LOW && temp == 0) {
        pts = 0; myDelay = 500;
        lcd.clear();
        lcd.setCursor(6, 0); lcd.print("GAME");
        lcd.setCursor(6, 1); lcd.print("OVER");
        tone(buzzer, 349); delay(200);
        tone(buzzer, 277); delay(200);
        tone(buzzer, 220); delay(100);
        tone(buzzer, 277); delay(100);
        tone(buzzer, 220); delay(200);
        noTone(buzzer);
        delay(3000);
        lcd.clear();
        goto here;
      }
      // Hindernis übersprungen → Punkt
      else if (i == randomNums[j] && buttonState1 == HIGH) {
        ++pts;
      }
    }
  }
}

Schaltpläne

game_aUIjA6VZxX.fzz

Ninja Dollar LCD-Spiel mit Arduino UNO bauen

Herstellungsprozess

  1. Schach: Von antiken Ursprüngen zur modernen Fertigung – Ein Expertenüberblick
  2. Flipper: Geschichte, Design und Fertigung eines klassischen Arcade-Spiels
  3. Die Evolution und Handwerkskunst des American Football: Von antiken Spielen zu modernen NFL-Standards
  4. Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
  5. 37-LED-Roulette-Spiel mit Arduino Nano bauen – Europäisches Layout
  6. 3D RGB Arduclock – Bluetooth-LED-Uhr mit Echtzeituhr
  7. River Health Monitor: Arduino-basiertes Wasserqualitäts-Messsystem
  8. Interaktives Joystick-Spiel mit Arduino & LED-Feedback
  9. Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
  10. DIY-Oszilloskop mit Arduino Nano (10 Hz–50 kHz) und 128×64-LCD