unsigned long startTime;
unsigned long endTime;
unsigned long reactionTime;
void setup() {
pinMode(12, OUTPUT);
pinMode(4, INPUT_PULLUP); // Use internal pull-up resistor
Serial.begin(9600);
// Make sure the user is not holding the button at the start
while (digitalRead(4) == LOW) {
Serial.println("Please release the button...");
delay(500);
}
}
void loop() {
// Wait for random delay (2 to 5 seconds)
delay(random(2000, 5000));
digitalWrite(12, HIGH); // Turn on LED as signal
delay(50); // Small delay so LED is visible
startTime = millis(); // Start timing (0 - 1000)
Serial.print("Start time: ");
Serial.println(startTime);
// Wait until the button is pressed (LOW)
while (LOW== HIGH) {
// Do nothing, just wait for button press
}
endTime = millis(); // The latest time
Serial.print("End time: ");
Serial.println(endTime);
digitalWrite(12, LOW); // Turn off LED
reactionTime = endTime - startTime;
Serial.print("Reaction Time: ");
Serial.print(reactionTime);
Serial.println(" ms");
// Wait for button to be released before next round
while (digitalRead(4) == LOW) {
// Wait for button release
}
delay(2000); // Short pause before next round
}