// Defines
#define LED_G 8
#define LED_R 9
#define TASTER 10
#define Anzahl 10
unsigned int Zeiten[Anzahl];
unsigned int counter;
// Initialisierung
void setup() {
pinMode(LED_G, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(TASTER, INPUT_PULLUP);
Serial.begin(9600);
counter = 0;
}
// Schaltet die rote LED ein (grün aus). Nach Ablauf der Wartezeit in
//Sekunden, wird die grüne LED eingeschaltet (rot aus).
void schalteLEDs(int Wartezeit)
{
unsigned long zeit = millis();
digitalWrite(LED_G,HIGH);
digitalWrite(LED_R, HIGH);
delay(2000);
digitalWrite(LED_G,LOW);
digitalWrite(LED_R, HIGH);
while((millis()-zeit)<(Wartezeit*1000)){
if(digitalRead(TASTER) == LOW){
digitalWrite(LED_G,HIGH);
digitalWrite(LED_R, HIGH);
delay(3000);
digitalWrite(LED_G,LOW);
digitalWrite(LED_R, HIGH);
zeit = millis();
}
}
digitalWrite(LED_G,HIGH);
digitalWrite(LED_R, LOW);
}
// Liefert die Reaktionszeit(ms) vom Einschalten der grünen LED, bis
// zum Drücken des Tasters
unsigned long reaktionszeit()
{
unsigned long startzeit = millis();
while(true){
if(digitalRead(TASTER) == LOW){
return(millis() - startzeit);
}
}
}
unsigned int durchschnittszeit()
{
unsigned int summe = 0;
int zaehler = 0;
for (int i = 0; i < Anzahl; i++){
if (Zeiten[i] > 0){
summe += Zeiten[i];
zaehler++;
}
}
return (summe/zaehler);
}
void loesche_laengste_Reaktionszeit(){
int max_Pos = 0;
int Puffer = 0;
for (int i = 1; i < Anzahl; i++){
if(Zeiten[max_Pos]<Zeiten[i])
max_Pos = i;
}
Puffer = Zeiten[Anzahl-1];
Zeiten[Anzahl-1] = Zeiten[max_Pos];
Zeiten[max_Pos] = Puffer;
}
// Endlosschleife
void loop()
{
int zufallszahl;
unsigned long aktZeit, avgZeit;
// Erzeuge Zufallszahl von 3-9
zufallszahl = random(3,10);
// schalteLEDs - Funktion aufrufen
schalteLEDs( zufallszahl);
// reaktionszeit - Funktion aufrufen
aktZeit = reaktionszeit();
if (aktZeit>0){
Zeiten[counter] = aktZeit;
counter ++;
}
avgZeit = durchschnittszeit ();
Serial.print("Reaktionszeit(ms): ");
Serial.println(aktZeit);
Serial.print(" ---Avg(ms): ");
Serial.println(avgZeit);
for (int i = 0; i < Anzahl; i++){
Serial.print(Zeiten[i]);
Serial.print("; ");
}
Serial.println();
if (counter > Anzahl-1){
loesche_laengste_Reaktionszeit();
counter = Anzahl-1;
}
for (int i = 0; i < Anzahl; i++){
Serial.print(Zeiten[i]);
Serial.print("; ");
}
Serial.println();
}