Arduino-Spiel mit LCD-Display "Dino T-Rex"

Das Arduino-Spiel mit LCD-Display „Dino T-Rex Game“ ist ein einfaches Projekt für Anfänger in der Mikrocontroller-Programmierung. Sie benötigen ein 1602 LCD-Display mit I2C-Modul, eine Uhrentaste und einen Piezo-Lautsprecher. Die Taste und der Piezo-Lautsprecher können auf einem Breadboard zusammengebaut werden oder die Module mit der Taste und dem Piezo-Lautsprecher können an den Arduino-Board angeschlossen werden.




Bestandteile:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • 1602 LCD-Display mit I2C
  • Piezo Buzzer
  • Tasten
  • Dupont-Kabel
  • Bibliothek LiquidCrystal_I2C.h

Die Essenz des Spiels mit Dinosaurier ist sehr einfach. Das LCD-Display zeigt den Level des Spiels und die Hauptfigur an, die Hindernissen ausweichen muss. Ein Baum, ein Stein oder ein Vogel erscheinen zufällig auf dem Bildschirm, und der Dinosaurier muss über sie springen. Um den Dinosaurier zu steuern, wird das Arduino-Board mit einer Zeittaste verbunden. Die Geschwindigkeit der Hindernisse nimmt mit jedem Level zu.

Arduino-Spiel mit 1602 LCD-Display „Dino T-Rex“

Arduino-Spiel mit 1602 LCD-Display Dino T-Rex

LCD 1602 i2c Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
VCC 5V 5V 5V
SDA A4 A4 20
SCL A5 A5 21

Anstatt den Taster über einen Widerstand auf dem Breadboard mit dem Arduino zu verbinden, können Sie ein Modul mit einem Taster verwenden. Der Piezo Lautsprecher wird auf Wunsch mit dem Board verbunden, man kann aber auch darauf verzichten. Bauen Sie die Schaltung wie im Bild oben gezeigt zusammen und laden Sie die Skizze hoch. Die Spielgeschwindigkeit und die Töne können in der Software geändert werden.

Programm für „Dino T-Rex“ Spiel-Arduino mit 1602-LCD




#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27, 20, 2);

int level = 1;
int pause = 400;
byte p = 0;

byte t-rex[8] = {
 0b01110, 0b11011, 0b11111, 0b11100, 0b11111, 0b01100, 0b10010, 0b11011
};
byte baum[8] = {
 0b00000, 0b00000, 0b00000, 0b11011, 0b11011, 0b11011, 0b01100, 0b01100
};
byte stein[8] = {
 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b01110, 0b11111
};
byte vogel[8] = {
 0b00100, 0b00101, 0b01111, 0b11111, 0b10100, 0b00100, 0b00000, 0b00000
};

void setup() {
 pinMode (10, OUTPUT);
 pinMode (A1, INPUT);
 analogWrite(A1, LOW);
 LCD.init();
 LCD.backlight();

 LCD.createChar(0, t-rex);
 LCD.createChar(1, baum);
 LCD.createChar(2, stein);
 LCD.createChar(3, vogel);

 LCD.setCursor(7, 0);
 LCD.print("GO!");
 delay(400);
 tone(10, 600);
 delay(100);
 noTone(10);
 LCD.clear();
}

void loop() {
  byte d = 1;
  byte x = 15;
  byte y = 1;

  byte i = random (1, 4);
  if (i == 3) y = 0;
  else y = 1;

  while (x > 0) {
    LCD.clear();
    LCD.setCursor(0, 0);
    LCD.print(level);

    if (digitalRead(A1) == LOW) d = 1;
    if (digitalRead(A1) == HIGH) d = 0;
    if (p > 3) d = 1;

    LCD.setCursor(4, d);
    LCD.print(char(0));
    LCD.setCursor(x, y);
    tone(10, 50);
    LCD.print(char(i));
    noTone(10);

    if (x == 4 && y == d) {
      delay(400);
      tone(10, 50);
      delay(100);
      noTone(10);
      delay(100);
      tone(10, 20);
      delay(300);
      noTone(10);
      LCD.clear();
      delay(200);
      LCD.setCursor(3, 0);
      LCD.print("GAME OVER!");
      delay(600);
      LCD.clear();
      delay(400);
      LCD.setCursor(3, 0);
      LCD.print("GAME OVER!");
      delay(600);
      LCD.clear();
      LCD.setCursor(3, 1);
      LCD.print("LEVEL: ");
      LCD.print(level);
      delay(400);
      LCD.setCursor(3, 0);
      LCD.print("GAME OVER!");
      delay(3000);
      LCD.clear();

      LCD.setCursor(7, 0);
      LCD.print("GO!");
      delay(400);
      tone(10, 600);
      delay(100);
      noTone(10);
      LCD.clear();

      level = 0;
      pause = 400;
      p = 0;
      y = 1;
      x = 0;
      break;
    }

    if (d == 0) { tone(10, 200); delay(100); noTone(10); }
    else { delay(100); }

    delay(pause);
    x = x - 1;
    p = p + 1;
    if (p > 4) p = 0; 
 }

  tone(10, 800);
  delay(20);
  level = level + 1;
  pause = pause - 20;
  if (pause < 0) pause = 0;
}
  1. Variable int pause = 400; legt die Anfangsgeschwindigkeit der Hindernisse auf dem Bildschirm fest (Sie können Ihren eigenen Wert festlegen);
  2. Nach dem Durchlaufen jedes Levels wird die Spielgeschwindigkeit erhöht, indem die Verzögerungszeit um 20 Millisekunden verringert wird pause = pause – 20;

Schlussfolgerung. Zu Beginn des Programms werden Felder erstellt, in denen der Drache (Dinosaurier) und die Hindernisse gezeichnet werden. Diese können geändert werden und es können eigene Symbole oder Bilder erstellt werden. Für besonders fortgeschrittene Benutzer können Sie vorschlagen, die Hintergrundbeleuchtung des Displays auszuschalten, wenn Sie eine bestimmte Stufe im Spiel „Dino T-Rex Game“ erreicht haben.

5/5 - (1 vote)


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert