kk logo

Mit diesem Projekt verwandelst du deinen Arduino und das große 4-Zoll-Display in eine spannende Reaktions-Arena für zwei Spieler. Steckst du deinen Arduino ein steht nur das Wort „Ziel:“ auf dem TFT. Drückst du auf den ersten Taster erscheinteine zufällige Zeit zwischen 5 und 15 Sekunden, die du und dein Gegenerso genau wie möglich treffen müsst. Ein zweiter Druck auf denselben Taster startet den Countdown 3,2,1 Start. Beide Spieler drücken ihren Knopf, und das System zeigt euch sofort auf drei Nachkommastellen genau an, wann ihr reagiert habt und wer der Gewinner ist. 

Spiel 135 aus der 200 Arduino Spiele Sammlung.

1 1. vs 1. Arduino Millisekunden Duell

Hardware-Belegung (Pins)

  • TFT CS: Pin 10
  • TFT DC: Pin 8
  • TFT RST: Pin 9
  • Steuerung (Taster 2): Pin 4 (gegen GND)
  • Spieler 1: Pin 5 (gegen GND)
  • Spieler 2: Pin 6 (gegen GND)
  • Display SPI: MOSI an Pin 11, SCK an Pin 13 (bei Uno/Nano)

2 1. vs 1. Arduino Millisekunden Duell

1. Die Zustandssteuerung (State Machine)

Dies ist das Gehirn deines Spiels. Anstatt mit komplizierten Verschachtelungen zu arbeiten, definieren wir klare Zustände.

enum State { START, TIME_READY, COUNTDOWN, RUNNING, RESULTS };
State currentState = START;

Erklärung: Hier legen wir fest, in welcher Phase sich das Spiel gerade befindet. Der Arduino prüft im loop(), ob wir gerade auf den Start warten (START), ob die Zeit schon feststeht (TIME_READY) oder ob das Rennen läuft (RUNNING). Das verhindert, dass das Spiel durcheinanderkommt, wenn man einen Knopf zur falschen Zeit drückt.

4 1. vs 1. Arduino Millisekunden Duell

2. Dynamische Hintergrundfarben (RGB565)

Dieser Abschnitt sorgt dafür, dass jedes Spiel anders aussieht, ohne dass der Text unleserlich wird.

void resetScreen() {
uint8_t r = random(180, 255);
uint8_t g = random(180, 255);
uint8_t b = random(180, 255);
bgColor = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);

tft.fillScreen(bgColor);
tft.setTextColor(0x0000); // Schwarz
tft.print("Ziel:");
}

Erklärung: Wir mischen hier eine zufällige Farbe. Damit sie immer hell genug für schwarzen Text ist, wählen wir nur hohe Werte für Rot, Grün und Blau (180–255). Da das Display Farben im 16-Bit-Format (RGB565) erwartet, "schieben" wir die Bits an die richtige Stelle. So bleibt der Kontrast immer perfekt.

3. Die Präzisions-Zeitmessung

Hier wird ermittelt, wie schnell die Spieler wirklich waren.

void checkPlayers() {
if (!p1Pressed && digitalRead(BTN_P1) == LOW) {
p1Time = (millis() - startTime) / 1000.0;
p1Pressed = true;
}
// ... analog für Spieler 2
}

Erklärung: Sobald das "START!"-Signal kommt, speichern wir den aktuellen Zeitstempel des Arduinos in startTime. Wenn ein Spieler drückt, nehmen wir die aktuelle Zeit (millis()), ziehen den Startwert ab und teilen das Ergebnis durch 1000.0. Das Ergebnis ist ein float-Wert, der uns die geforderte Genauigkeit von drei Nachkommastellen ermöglicht.
3 1. vs 1. Arduino Millisekunden Duell

 

Der Arduino Code für das Spiel

 

 

 

 

 

 

Ronnie

schwäbischer tüftler und bastler, kraftsportler, neurodivers, 45 Jahre, 1 Frau, 5 Kinder und 1003 Ideen. 

1.2 ronnie berzins

Kontakt

visitenkarte