Untitled
unknown
c_cpp
9 months ago
6.0 kB
4
Indexable
#include <arduino.h>
const int buttonPins[] = {23, 22, 21, 19, 18, 5, 17, 16}; // Taster 1-8 auf ESP32
const int ledPins[] = {12, 13, 14, 27, 26, 25, 33, 32, 35}; // Lampen für 8 Spieler auf ESP32
const int trueButtonPin = 4; // True-Button (Startet das Spiel / Nächste Frage)
const int falseButtonPin = 0; // False-Button (Falsche Antwort)
const int nextButtonPin = 2; // Next-Button (Nächste Frage)
const int resetButtonPin = 15; // Reset-Button (Zurücksetzen des Spiels)
int buttonState[8]; // Speichert die Zustände der Taster
int lastButtonState[8]; // Verfolgt die vorherigen Zustände der Taster
int currentPlayer = -1; // Zeigt den aktuellen Spieler (der als erstes gedrückt hat)
bool gameStarted = false; // Gibt an, ob das Spiel gestartet wurde
bool roundStarted = false; // Gibt an, ob die aktuelle Runde gestartet ist
int pressOrder[8]; // Speichert die Reihenfolge der Tastendrücke
int pressCount = 0; // Zählt die Anzahl der Tastendrücke
void handleButtonPress(int player);
void handleFalseButton();
void handleNextButton();
void handleResetButton();
void handleTrueButton();
void setup() {
// Initialisieren der Taster-Pins als Eingänge mit Pull-Down-Widerständen aktiviert
for (int i = 0; i < 8; i++) {
pinMode(buttonPins[i], INPUT_PULLDOWN); // Pull-Down aktiviert
pinMode(ledPins[i], OUTPUT); // Lampen als Ausgänge
}
// Initialisieren der Steuer-Buttons (True, False, Next, Reset) mit Pull-Down
pinMode(trueButtonPin, INPUT_PULLDOWN); // Pull-Down aktiviert
pinMode(falseButtonPin, INPUT_PULLDOWN); // Pull-Down aktiviert
pinMode(nextButtonPin, INPUT_PULLDOWN); // Pull-Down aktiviert
pinMode(resetButtonPin, INPUT_PULLDOWN); // Pull-Down aktiviert
// Serielle Kommunikation starten
Serial.begin(9600);
// Alle Lampen zu Beginn ausschalten
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW);
}
}
void loop() {
// Überprüfen des Status der Buttons
for (int i = 0; i < 8; i++) {
// Lese den Zustand des Tasters und prüfe auf Änderung
buttonState[i] = digitalRead(buttonPins[i]);
// Wenn der Taster gedrückt wurde (hoch), und der letzte Zustand war niedrig
if (buttonState[i] == HIGH && lastButtonState[i] == LOW) {
handleButtonPress(i); // Drücke den entsprechenden Button
}
// Speichere den aktuellen Zustand für die nächste Schleife
lastButtonState[i] = buttonState[i];
}
// Überprüfen der Steuer-Buttons
if (digitalRead(trueButtonPin) == HIGH) {
handleTrueButton();
}
if (digitalRead(falseButtonPin) == HIGH) {
handleFalseButton();
}
if (digitalRead(nextButtonPin) == HIGH) {
handleNextButton();
}
if (digitalRead(resetButtonPin) == HIGH) {
handleResetButton();
}
}
void handleButtonPress(int player) {
if (!gameStarted) {
// Aktivierungsphase - Wenn das Spiel nicht gestartet wurde
digitalWrite(ledPins[player], HIGH); // Lampe für den Spieler an
Serial.print(player + 1); // Sendet die Spieler-ID
Serial.println("L"); // "L" für Lampe an (Spieler aktiv)
} else {
// Spielphase - Wenn das Spiel läuft
if (roundStarted) {
pressOrder[pressCount] = player; // Speichern der Reihenfolge der Tastendrücke
pressCount++;
// Markiere den ersten Spieler, der gedrückt hat
if (pressCount == 1) {
currentPlayer = player;
digitalWrite(ledPins[player], HIGH); // Lampe für den ersten Spieler an
Serial.print(player + 1); // Spieler-ID senden
Serial.println("L"); // "L" für Lampe an (Spieler aktiviert)
}
}
}
}
void handleTrueButton() {
if (!gameStarted) {
// Wenn der True-Button während der Aktivierungsphase gedrückt wird
gameStarted = true;
roundStarted = true;
// Alle Lampen aus
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW);
}
Serial.println("0N"); // "0N" für die nächste Frage (das Spiel startet)
} else {
// Wenn das Spiel läuft und der True-Button gedrückt wird (richtige Antwort)
// Setze alle Lampen zurück, markiere den nächsten Spieler
digitalWrite(ledPins[currentPlayer], LOW); // Licht des aktuellen Spielers ausschalten
Serial.print(currentPlayer + 1); // Spieler-ID senden
Serial.println("R"); // "R" für richtige Antwort
currentPlayer = -1; // Setze den aktuellen Spieler zurück
pressCount = 0; // Setze die Reihenfolge der Tasten zurück
}
}
void handleFalseButton() {
if (roundStarted && currentPlayer != -1) {
// Wenn das Spiel läuft und ein falscher Spieler ausgewählt wurde
// Markiere den nächsten Spieler in der Reihenfolge
if (pressCount > 1) {
int nextPlayer = pressOrder[1]; // Zweitschnellster Spieler
digitalWrite(ledPins[currentPlayer], LOW); // Licht des aktuellen Spielers ausschalten
digitalWrite(ledPins[nextPlayer], HIGH); // Lampe für den zweiten Spieler an
Serial.print(nextPlayer + 1); // Spieler-ID senden
Serial.println("F"); // "F" für falsche Antwort
currentPlayer = nextPlayer; // Wechsle den aktuellen Spieler
}
}
}
void handleNextButton() {
if (roundStarted) {
// Nächste Frage, setzte alle Lampen aus
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW);
}
Serial.println("0N"); // "0N" für die nächste Frage
currentPlayer = -1; // Setze den aktuellen Spieler zurück
pressCount = 0; // Setze die Reihenfolge der Tasten zurück
}
}
void handleResetButton() {
// Reset-Button, setze das gesamte Spiel zurück
gameStarted = false;
roundStarted = false;
currentPlayer = -1;
pressCount = 0;
// Schalte alle Lampen aus
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW);
}
Serial.println("0E"); // "0E" für Spiel zurücksetzen
}
Editor is loading...
Leave a Comment