// Baserad på https://www.instructables.com/Arduino-Reaction-Time-Tester/
int switchPin = 2; //Knappens position
int ledPin = 9 ; //LEDns position
boolean lastButton = LOW; //Förra knapptryckningen
boolean currentButton = LOW; //Nuvarande knapptryckning
boolean Started = false; //Har tidtagningen startat
boolean timer = false; //timern
long startTime;
long endTime;
long randomTime; //Tiden som man väntar innan LEDn tänds
float elapsedTime; //Förfluten tid
void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
boolean debounce(boolean last) //Debounce är för att knappen inte ska göra dubbeltryckningar
{
boolean current = digitalRead(switchPin);
if(last!= current)
{
delay(5);
current = digitalRead(switchPin);
}
return current;
}
void loop()
{
currentButton = debounce(lastButton);
if(lastButton == LOW && currentButton == HIGH) //Kontrollerar om knappen är intryckt. Om så är fallet, ändra position
{
Started = !Started; //Ändrar "Started" till det motsatta mot vad det var innan
lastButton = HIGH;
}
lastButton = currentButton;
if(Started == true && timer == false) //Om "Started" är sann men tidtagningen inte startat, så sätter man igång den med random-funktionen
{
Random();
timer = true;
}
if(Started == false && timer == true) //Om "Started"är falsk och tidtagningen startat så stopps den nu
{
Stop();
timer = false;
}
}
/*Funktionen för att genererar en slumpmässig starttid 4-10 sek efter att knappen trycks in*/
void Random()
{
Serial.println("Get ready!");
randomTime = random(4,10);
randomTime = randomTime*1000;
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(randomTime);
Start();
}
/*Funktion för att starta tidtagningen*/
void Start(){
startTime = millis(); //Sätt starttiden till millis (den interna klockan)
digitalWrite(ledPin, HIGH);
}
void Stop(){
endTime = millis(); //Sätt sluttiden till millis (den interna klockan)
elapsedTime = (endTime - startTime)+5; //Beräkna sluttiden och lägg på 5 millisekunder
elapsedTime = elapsedTime/1000; //Gör om reaktionstiden till sekunder
Serial.print("Time Seconds: ");
Serial.println(elapsedTime);
digitalWrite(ledPin, LOW);
Serial.println("Press button to test again");
}