Arduino-Spiel mit LEDs Wiederhole die Sequenz

Das Arduino-Spiel mit Tasten und LEDs „Repeat Sequence“ ist ein weiteres Miniprojekt mit einem minimalen Satz an benötigten Komponenten. Für den Aufbau der Schaltung benötigen Sie nur ein Breadboard, Knöpfe und LEDs mit Widerständen. Durch Drücken der Knöpfe muss man die Sequenz des Einschaltens der LEDs wiederholen. Mit jedem neuen Level wird die Geschwindigkeit des Spiels (Einschalten der LEDs) schrittweise erhöht.




Bestandteile:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • LEDs und Widerständen
  • Tasten
  • Piezo Buzzer
  • Breadboard
  • Dupont-Kabel

Auf dem Monitor des Arduino-IDE-Ports wird angezeigt, ob die richtige Kombination eingegeben wurde und wie hoch der aktuelle Level im Spiel ist. Falls die Sequenz vom Spieler falsch eingegeben wurde, wird ein Buzzer auf der Piezodynamik aktiviert. Wenn die Kombination richtig ist, geht das Spiel zum nächsten Level über. Ein weiteres Aduino-Spielprojekt mit Tasten und LEDs finden Sie hier – Guess the Code Game.

Arduino-Spiel mit LEDs „Wiederhole die Sequenz“

Arduino-Spiel mit LEDs Wiederhole die Sequenz

Die LEDs sind in Reihe von den digitalen Pins 2 bis 6 mit dem Arduino verbunden, die Taster sind mit den analogen Eingängen von A0 bis A4 verbunden. Die Anschlüsse der Taster und LEDs können durch Angabe im Sketch geändert werden. Im Programm werden nur 10 Kombinationen im Array char* kod[] verwendet. Es ist möglich, dem Array neue Kombinationen hinzuzufügen und jede LED sollte nur einmal aktiviert werden.

Programm für Arduino-Spiel mit LEDs und Widerständen




// Lautsprecherstift
#define buzzer 11
// LED-Anschlussstifte
int led[] = { 2, 3, 4, 5, 6 };
// Stifte für Tastenanschluss
int but[] = { A0, A1, A2, A3, A4 };
// Kombinationsmöglichkeiten (Sie können Ihre eigenen hinzufügen)
char* kod[] = { "01324", "40231", "02413", "03241", "40312",
             "14320", "13402", "12304", "41203", "10423"
             };
int del = 1000;
int w = -1;
byte level = 1;
byte b1, b2, b3, b4, b5;
String KOD, OTV, A;

byte num_led = sizeof(led) / sizeof(int*);
byte num_but = sizeof(but) / sizeof(int*);
byte num_cod = sizeof(kod) / sizeof(char*);
byte len = strlen(kod[0]);

boolean button1WasUp = true;
boolean button2WasUp = true;
boolean button3WasUp = true;
boolean button4WasUp = true;
boolean button5WasUp = true;

void setup() {
  pinMode(buzzer, OUTPUT);
  // Einstellung der Pins für die LEDs
  for (byte i = 0; i <= num_led; i++) {
    pinMode(led[i], OUTPUT);
  }
  // Einstellung der Pins für die Tasten
  for (byte i = 0; i <= num_but; i++) {
    pinMode(but[i], INPUT_PULLUP);
  }
  Serial.begin(9600);
  Serial.println("LEVEL - " + String(level));
  Serial.println("");
}

void loop() {
 
  // Wählen Sie zufällig eine der Kombinationen
  while (w == -1) {
    int  x = random(0, num_cod - 1);
    KOD = {kod[x]};
    b1 = 0; b2 = 0; b3 = 0; b4 = 0; b5 = 0;
    w = 0;
  }
 
  // schalten Sie die LEDs entsprechend der Kombination ein
  while (w <= len - 1) {
    A = KOD[w];
    int a = A.toInt();
    digitalWrite(led[a], HIGH);
    tone(buzzer, 5 * led[a]);
    delay(10);
    noTone(buzzer);
    delay(del);
    digitalWrite(led[a], LOW);
    w++;
  }

  // warten, bis alle Tasten gedrückt werden
  while (w >= len - 1 and w <= len + len) {
    boolean button1IsUp = digitalRead(but[0]);
    boolean button2IsUp = digitalRead(but[1]);
    boolean button3IsUp = digitalRead(but[2]);
    boolean button4IsUp = digitalRead(but[3]);
    boolean button5IsUp = digitalRead(but[4]);

    if (b1 == 0 and button1WasUp and !button1IsUp) {
      delay(10);
      button1IsUp = digitalRead(but[0]);
      if (!button1IsUp) {
        tone(buzzer, 5 * led[0]);
        delay(10);
        noTone(buzzer);
        OTV = OTV + "0";
        digitalWrite(led[0], HIGH);
        b1 = 1;
        w++;
      }
    }
    button1WasUp = button1IsUp;

    if (b2 == 0 and button2WasUp and !button2IsUp) {
      delay(10);
      button2IsUp = digitalRead(but[1]);
      if (!button2IsUp) {
        tone(buzzer, 5 * led[1]);
        delay(10);
        noTone(buzzer);
        OTV = OTV + "1";
        digitalWrite(led[1], HIGH);
        b2 = 1;
        w++;
      }
    }
    button2WasUp = button2IsUp;

    if (b3 == 0 and button3WasUp and !button3IsUp) {
      delay(10);
      button3IsUp = digitalRead(but[2]);
      if (!button3IsUp) {
        tone(buzzer, 5 * led[2]);
        delay(10);
        noTone(buzzer);
        OTV = OTV + "2";
        digitalWrite(led[2], HIGH);
        b3 = 1;
        w++;
      }
    }
    button3WasUp = button3IsUp;

    if (b4 == 0 and button4WasUp and !button4IsUp) {
      delay(10);
      button4IsUp = digitalRead(but[3]);
      tone(buzzer, 5 * led[3]);
      delay(10);
      noTone(buzzer);
      if (!button4IsUp) {
        OTV = OTV + "3";
        digitalWrite(led[3], HIGH);
        b4 = 1;
        w++;
      }
    }
    button4WasUp = button4IsUp;

    if (b5 == 0 and button5WasUp and !button5IsUp) {
      delay(10);
      button5IsUp = digitalRead(but[4]);
      tone(buzzer, 5 * led[4]);
      delay(10);
      noTone(buzzer);
      if (!button5IsUp) {
        OTV = OTV + "4";
        digitalWrite(led[4], HIGH);
        b5 = 1;
        w++;
      }
    }
    button5WasUp = button5IsUp;

    // wenn die Kombination richtig ist, eine neue Ebene beginnen
    if (w == len + len and OTV == KOD) {
      Serial.println("");
      Serial.println("JA!");
      Serial.println("");
      level++;
      Serial.println("LEVEL - " + String(level));
      del = del - 100;
      if (del < 10) { del = 100; }
      delay(1000);
      for (byte i = 0; i <= num_led; i++) {
        digitalWrite(led[i], LOW);
      }
      delay(2000);
      KOD = "";
      OTV = "";
      w = -1;
    }
 
    // wenn die Kombination falsch ist, eine neue Kombination einstellen
    if (w == len + len and OTV != KOD) {
      Serial.println("");
      Serial.println("NO!");
      Serial.println("");
      tone(buzzer, 100);
      delay(1000);
      noTone(buzzer);
      Serial.println("LEVEL - " + String(level));
      for (byte i = 0; i <= num_led; i++) {
        digitalWrite(led[i], LOW);
      }
      delay(2000);
      KOD = "";
      OTV = "";
      w = -1;
    }

  }
}
  1. Nach Stufe 10 erhöht sich die Schaltgeschwindigkeit der LEDs nicht mehr;
  2. Die Pins für den Anschluss der Tasten und LEDs können geändert werden.

Schlussfolgerung. Der aktuelle Stand des Spiels wird auf dem Monitor des Arduino-IDE-Anschlusses angezeigt. Wenn die Sequenz falsch eingegeben wird, ertönt ein akustisches Signal aus dem Piezo-Lautsprecher. Ein weiteres Aduino-Spielprojekt mit Tasten finden Sie hier – Errate den Code. Wenn Sie Fragen zum Programm oder zum Bau des „Repeat Sequence“-Spiels haben, hinterlassen Sie sie in den Kommentaren.

5/5 - (1 vote)


Schreibe einen Kommentar

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