#include <LiquidCrystal.h>
// LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int greenLEDPin = 8;
const int buttonPin = 7;
unsigned long startTime;
unsigned long reactionTime;
bool waitingForReaction = false;
void setup() {
lcd.begin(16, 2);
pinMode(greenLEDPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // button goes to GND
lcd.print("Reaction Timer");
delay(2000);
lcd.clear();
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("Get Ready...");
delay(random(2000, 5000)); // random delay between 2-5 seconds
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("GO!");
digitalWrite(greenLEDPin, HIGH);
startTime = millis();
waitingForReaction = true;
while (waitingForReaction) {
if (digitalRead(buttonPin) == LOW) {
reactionTime = millis() - startTime;
waitingForReaction = false;
}
}
digitalWrite(greenLEDPin, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Your Time:");
lcd.setCursor(0, 1);
lcd.print(reactionTime);
lcd.print(" ms");
delay(3000); // display result for 3 seconds
lcd.clear();
}