#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pins
const int ledPins[3] = {2, 3, 4};
const int buttonPin = 5;
unsigned long startTime;
unsigned long reactionTime;
bool measuring = false;
void setup() {
for (int i = 0; i < 3; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW);
}
pinMode(buttonPin, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Reaktionstest");
lcd.setCursor(0, 1);
lcd.print("Bereit...");
delay(2000);
randomSeed(analogRead(A0));
}
void loop() {
// Zufällige Wartezeit (2–5 Sekunden)
lcd.clear();
lcd.print("Warte...");
delay(random(2000, 5000));
// LEDs einschalten → Start
for (int i = 0; i < 3; i++) {
digitalWrite(ledPins[i], HIGH);
}
lcd.clear();
lcd.print("JETZT DRUECKEN");
startTime = millis();
measuring = true;
// Warten auf Tastendruck
while (measuring) {
if (digitalRead(buttonPin) == LOW) {
reactionTime = millis() - startTime;
measuring = false;
}
}
// LEDs aus
for (int i = 0; i < 3; i++) {
digitalWrite(ledPins[i], LOW);
}
// Ergebnis anzeigen
lcd.clear();
lcd.print("Zeit:");
lcd.setCursor(0, 1);
lcd.print(reactionTime);
lcd.print(" ms");
delay(4000);
}