hotwire/HotWire.ino

87 lines
2.5 KiB
Arduino
Raw Normal View History

2024-09-09 17:27:36 +02:00
#include <LiquidCrystal.h>
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;
}