#include const byte startPin = 8, stopPin = 9, mistakePin = 10, buzzerPin = 7; const byte penaltyTimePin = A0; // Falls du ein Potentiometer für die Strafzeit verwendest const byte minPenaltyTime = 1, maxPenaltyTime = 15; // [t] = 1 s LiquidCrystal lcd(12, 11, 5, 4, 3, 2); long millisStart, millisEnd; int mistakes, penaltyTime, lastPenaltyTime; void setup() { Serial.begin(9600); lcd.begin(16, 2); // Initialisiere das LCD mit 16 Zeichen und 2 Zeilen pinMode(startPin, INPUT_PULLUP); pinMode(stopPin, INPUT_PULLUP); pinMode(mistakePin, INPUT_PULLUP); pinMode(buzzerPin, OUTPUT); digitalWrite(buzzerPin, LOW); pinMode(LED_BUILTIN, OUTPUT); // Pinbelegungen für das LCD (RS, E, D4, D5, D6, D7) lcd.clear(); lcd.print("Gehe zu Start"); } void loop() { if (digitalRead(startPin) == LOW) { lcd.clear(); lcd.print("Los Geht's"); while (digitalRead(startPin) == LOW) { delay(200); } startGame(); while (digitalRead(startPin) == HIGH) { // wait for return to Start delay(500); } resetGame(); } } void startGame() { lcd.clear(); lcd.print("Start"); Serial.println("Start"); mistakes = 0; // Fehlerzähler zurücksetzen millisStart = millis(); // Startzeit speichern while (digitalRead(stopPin) == HIGH && digitalRead(startPin) == HIGH) { if (digitalRead(mistakePin) == LOW) { mistakes++; Serial.println("Fehler: " + String(mistakes)); lcd.setCursor(0, 0); lcd.print("Fehler: " + String(mistakes) + " "); digitalWrite(LED_BUILTIN, HIGH); digitalWrite(buzzerPin, HIGH); delay(500); // Wartezeit nach einem Fehler digitalWrite(LED_BUILTIN, LOW); digitalWrite(buzzerPin, LOW); while (digitalRead(mistakePin) == LOW) { // Warte, bis der Kontakt zu mistakePin unterbrochen wird delay(10); } } lcd.setCursor(0,1); lcd.print(String((millis() - millisStart) / 1000) + "s "); delay(10); // Reduziere die Abfrageverzögerung für eine bessere Reaktionszeit } millisEnd = millis(); // Endzeit speichern Serial.println("Gewonnen"); Serial.println("Gesamtzeit: " + String((millisEnd - millisStart) / 1000) + " Sekunden"); Serial.println("Fehler gesamt: " + String(mistakes)); lcd.clear(); lcd.print("Gewonnen in " + String((millisEnd - millisStart) / 1000) + "s "); lcd.setCursor(0, 1); lcd.print("mit " + String(mistakes) + " Fehlern"); } void resetGame() { Serial.println("Reset"); lcd.clear(); lcd.print("reset"); mistakes = 0; }