Untitled
unknown
c_cpp
a month ago
6.0 kB
1
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