//#1 LED Blinks to say Get Ready
//#2 Random OFF time for LED
//#3 LED ON SOLID and you press the button
// Your reaction time is calculated and printed to the Serial Monitor in milliseconds
#define LED_PIN 12
#define BUTTON_PIN 2
#define BLINK_LED 5
uint32_t reactionTime, startTime, previousTime = 0;
bool ledState = 1, blink = 1;
uint16_t randomCount, count;
uint16_t getRandomVal(void){
count = 0;
return random(6, 21);
}
void falling(void){
uint32_t pressMillis = millis();
detachInterrupt(0);
calculate(pressMillis);
}
void calculate(uint32_t pressTime){
reactionTime = pressTime - startTime;
Serial.println((String)"Reaction Time: " + reactionTime + "mS\n");
blink = true;
return;
}
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, ledState);
pinMode(BUTTON_PIN, INPUT_PULLUP);
randomSeed(A0);
}
void loop() {
if(millis() - previousTime >= 500){
count++;
if(!blink){
if(count >= randomCount){
ledState = HIGH;
startTime = millis();
count = 0;
}
}else{
ledState = !ledState;
if(count >= BLINK_LED){
blink = false;
randomCount = getRandomVal();
attachInterrupt((0), falling, FALLING);
ledState = LOW;
}
}
digitalWrite(LED_PIN, ledState);
previousTime = millis();
}
}