Adding Arduino Sketch
This commit is contained in:
112
Arduino/Zeitschaetzspiel/Zeitschaetzspiel.ino
Normal file
112
Arduino/Zeitschaetzspiel/Zeitschaetzspiel.ino
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
const int buttonPin = 2; // Taster an Pin 2
|
||||||
|
unsigned long randomTime; // Zufällige Zeit in Millisekunden
|
||||||
|
unsigned long startTime; // Startzeit
|
||||||
|
unsigned long elapsedTime; // Verstrichene Zeit
|
||||||
|
bool timing = false; // Zeitmessung aktiv?
|
||||||
|
bool gameReady = false; // Spiel bereit?
|
||||||
|
bool waitingForStart = false; // Warten auf ersten Tastendruck zum Starten der Zeitmessung
|
||||||
|
|
||||||
|
// Buffer für eingehende Befehle
|
||||||
|
char inputBuffer[20];
|
||||||
|
int bufferIndex = 0;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
pinMode(buttonPin, INPUT_PULLUP); // Taster mit Pull-up-Widerstand
|
||||||
|
Serial.begin(9600); // Serielle Kommunikation starten
|
||||||
|
randomSeed(analogRead(0)); // Zufallsgenerator initialisieren
|
||||||
|
|
||||||
|
delay(1000); // Kurze Pause
|
||||||
|
|
||||||
|
Serial.println("Zeit-Schätz-Spiel bereit!");
|
||||||
|
Serial.println("PC_READY"); // Signal an PC senden
|
||||||
|
Serial.println("Sende 'START_GAME' um das Spiel zu starten");
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
|
||||||
|
// Serielle Eingabe verarbeiten
|
||||||
|
if (Serial.available() > 0) {
|
||||||
|
char inChar = Serial.read();
|
||||||
|
|
||||||
|
// Debug-Ausgabe für jedes empfangene Zeichen
|
||||||
|
Serial.print("Zeichen empfangen: ");
|
||||||
|
Serial.print(inChar);
|
||||||
|
Serial.print(" (ASCII: ");
|
||||||
|
Serial.print((int)inChar);
|
||||||
|
Serial.println(")");
|
||||||
|
|
||||||
|
// Zeilenumbruch oder Carriage Return erkennen
|
||||||
|
if (inChar == '\n' || inChar == '\r') {
|
||||||
|
// String beenden
|
||||||
|
inputBuffer[bufferIndex] = '\0';
|
||||||
|
|
||||||
|
// Debug-Ausgabe des vollständigen Befehls
|
||||||
|
Serial.print("Vollständiger Befehl: ");
|
||||||
|
Serial.println(inputBuffer);
|
||||||
|
|
||||||
|
// Befehl verarbeiten
|
||||||
|
if (strcmp(inputBuffer, "START_GAME") == 0) {
|
||||||
|
// Neues Spiel vom PC starten
|
||||||
|
randomTime = random(5, 31) * 1000; // 5-30 Sekunden in ms
|
||||||
|
|
||||||
|
Serial.print("Zufällige Zeit generiert: ");
|
||||||
|
Serial.println(randomTime);
|
||||||
|
|
||||||
|
Serial.print("TARGET_TIME:");
|
||||||
|
Serial.println(randomTime);
|
||||||
|
|
||||||
|
waitingForStart = true; // Warten auf Tastendruck zum Starten der Zeitmessung
|
||||||
|
gameReady = true; // Spiel ist bereit
|
||||||
|
timing = false; // Zeitmessung noch nicht aktiv
|
||||||
|
|
||||||
|
Serial.println("WAITING_FOR_BUTTON"); // Signal an PC senden
|
||||||
|
}
|
||||||
|
|
||||||
|
// Buffer zurücksetzen
|
||||||
|
bufferIndex = 0;
|
||||||
|
}
|
||||||
|
// Normales Zeichen zum Buffer hinzufügen
|
||||||
|
else if (bufferIndex < sizeof(inputBuffer) - 1) {
|
||||||
|
inputBuffer[bufferIndex++] = inChar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auf Tastendruck warten (LOW = gedrückt wegen Pull-up)
|
||||||
|
if (digitalRead(buttonPin) == LOW) {
|
||||||
|
delay(50); // Entprellung
|
||||||
|
|
||||||
|
// Warten bis Taste losgelassen wird
|
||||||
|
while (digitalRead(buttonPin) == LOW) {
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gameReady && waitingForStart) {
|
||||||
|
// Zeitmessung starten (erster Tastendruck)
|
||||||
|
Serial.println("TIME_STARTED");
|
||||||
|
|
||||||
|
startTime = millis(); // Startzeit speichern
|
||||||
|
timing = true; // Zeitmessung aktivieren
|
||||||
|
waitingForStart = false; // Nicht mehr auf Startdruck warten
|
||||||
|
}
|
||||||
|
else if (timing) {
|
||||||
|
// Spiel beenden, Zeit messen (zweiter Tastendruck)
|
||||||
|
elapsedTime = millis() - startTime;
|
||||||
|
timing = false;
|
||||||
|
|
||||||
|
// Ergebnis senden
|
||||||
|
Serial.print("ELAPSED_TIME:");
|
||||||
|
Serial.println(elapsedTime);
|
||||||
|
|
||||||
|
// Abweichung berechnen
|
||||||
|
long deviation = elapsedTime - randomTime;
|
||||||
|
Serial.print("DEVIATION:");
|
||||||
|
Serial.println(deviation);
|
||||||
|
|
||||||
|
// Spiel zurücksetzen
|
||||||
|
gameReady = false;
|
||||||
|
|
||||||
|
// Signalisieren, dass das Spiel beendet ist
|
||||||
|
Serial.println("GAME_ENDED");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user