// Defines
#define LED_G 8
#define LED_R 9
#define TASTER 10
#define MAX 20
// Globale Variablen
unsigned long millis_alt;
unsigned int rArray[MAX];
unsigned int counter;
// Initialisierung
void setup()
{
pinMode(LED_G, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(TASTER, INPUT_PULLUP);
Serial.begin(9600);
counter = 0;
millis();
millis_alt = millis();
}
// 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)
{
digitalWrite(LED_G, LOW);
digitalWrite(LED_R, HIGH);
delay(Wartezeit * 1000);
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, HIGH);
}
// Liefert die Reaktionszeit(ms) vom Einschalten der grünen LED, bis
// zum Drücken des Tasters
unsigned long reaktionszeit()
{
unsigned long Aktuelle_Zeit1;
unsigned long Aktuelle_Zeit2;
unsigned long Reaktionszeit;
Aktuelle_Zeit1 = millis();
while(digitalRead(TASTER) == HIGH )
{
Aktuelle_Zeit2 = millis();
}
Reaktionszeit = Aktuelle_Zeit2 - Aktuelle_Zeit1 ;
return(Reaktionszeit);
}
unsigned int durchschnittszeit()
{
unsigned int Summe = 0;
unsigned int Durchschnitt = 0;
unsigned int Anzahlmessungen = 0;
for(int i = 0; i < MAX; i++)
{
if (rArray[i] > 0)
{
Summe = Summe + rArray[i];
Anzahlmessungen = Anzahlmessungen + 1;
}
}
Durchschnitt = Summe / Anzahlmessungen;
return(Durchschnitt);
}
// Endlosschleife
void loop()
{
int zufallszahl;
unsigned long aktZeit;
unsigned long avgZeit;
// Erzeuge Zufallszahl von 3-9
zufallszahl = random(3,10);
// schalteLEDs - Funktion aufrufen
schalteLEDs( zufallszahl);
// reaktionszeit - Funktion aufrufen
aktZeit = reaktionszeit();
//speichere Reaktionszeit
rArray[counter] = aktZeit;
counter = counter + 1;
//ermittle Durchschnittszeit
avgZeit = durchschnittszeit();
// Array gefüllt?
if(counter == MAX )
{
counter = 0;
}
Serial.print( "Counter = ");
Serial.print(counter);
Serial.print("Wert");
Serial.println(rArray[counter-1]);
Serial.print("Reaktionszeit(ms): ");
Serial.print(aktZeit);
Serial.print(" --- Avg(ms): ");
Serial.println(avgZeit);
}