Reaktionstester mit Pointer

Dependencies:   C12832_lcd mbed

main.cpp

Committer:
philipp19961
Date:
2014-11-05
Revision:
0:1081f9802d9d

File content as of revision 0:1081f9802d9d:

#include "mbed.h"
#include "DebouncedIn.h"
#include "C12832_lcd.h"

Ticker tick;
C12832_LCD lcd;
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

DebouncedIn button(p12);

int init();
int ledsOn();
int auswertung();

int(*action[3])()= {init, ledsOn, auswertung };  

volatile int event=0;
float initTime = 0;
bool startreaction;
float reactionTime = 0;

void reactionTick();
void startTime();


void RandomTime()
{
    float min = 0.8 / 6.3;
    float max = 6.2 / 6.3;
 
    initTime = min + ((float)rand()/RAND_MAX) * (max - min) * 6.3;
}

void startTimerStart()
{
    RandomTime();
    tick.attach(&startTime, 0.1);
}

void stopTimer()        
{ 
    tick.detach();
}

void ledsEin()   
{ 
    led1 = 1;
    led2 = 1;
    led3 = 1;
    led4 = 1;
}

void ledsAus()   
{ 
    led1 = 0;
    led2 = 0;
    led3 = 0;
    led4 = 0;
}

int init()
{
    startreaction = false;
    ledsAus();    
    lcd.cls();
    lcd.locate(0, 0);
    lcd.printf("Reaktionstester: ");
    return 0;    
}

int ledsOn()
{
    ledsEin();
    lcd.printf("Running: ");
    startTimerStart();
    return 0;    
}

int auswertung()
{
    if(startreaction)
    {
        stopTimer();
        lcd.locate(0, 10);
        lcd.printf("Zeit: %.3f s", reactionTime);
    }
    else
    {
        stopTimer();
        lcd.locate(0, 10);
        lcd.printf("Zu frueh!!!!");
    }
    event = -1;
    return 0;    
}

void reactionTimerStart()
{
    reactionTime = 0;
    tick.attach(&reactionTick, 0.001);
}

void startTime()
{
    initTime -= 0.1;
    
    if(initTime <= 0)
    {
        startreaction = true;
        ledsAus();
        stopTimer();
        reactionTimerStart();
    }
}

void reactionTick()
{
    reactionTime += 0.001;
}

int main()
{    
    (action[event])();
    
    while(1) {  
        if (button.rising()) {
            event++;
            (action[event])();
        }
    }
}