Dependencies:   C12832_lcd mbed

Committer:
philipp19961
Date:
Wed Nov 05 07:40:38 2014 +0000
Revision:
0:1081f9802d9d
ReaktionsTester mit Pointer like WedlMethode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
philipp19961 0:1081f9802d9d 1 #include "mbed.h"
philipp19961 0:1081f9802d9d 2 #include "DebouncedIn.h"
philipp19961 0:1081f9802d9d 3 #include "C12832_lcd.h"
philipp19961 0:1081f9802d9d 4
philipp19961 0:1081f9802d9d 5 Ticker tick;
philipp19961 0:1081f9802d9d 6 C12832_LCD lcd;
philipp19961 0:1081f9802d9d 7 DigitalOut led1(LED1);
philipp19961 0:1081f9802d9d 8 DigitalOut led2(LED2);
philipp19961 0:1081f9802d9d 9 DigitalOut led3(LED3);
philipp19961 0:1081f9802d9d 10 DigitalOut led4(LED4);
philipp19961 0:1081f9802d9d 11
philipp19961 0:1081f9802d9d 12 DebouncedIn button(p12);
philipp19961 0:1081f9802d9d 13
philipp19961 0:1081f9802d9d 14 int init();
philipp19961 0:1081f9802d9d 15 int ledsOn();
philipp19961 0:1081f9802d9d 16 int auswertung();
philipp19961 0:1081f9802d9d 17
philipp19961 0:1081f9802d9d 18 int(*action[3])()= {init, ledsOn, auswertung };
philipp19961 0:1081f9802d9d 19
philipp19961 0:1081f9802d9d 20 volatile int event=0;
philipp19961 0:1081f9802d9d 21 float initTime = 0;
philipp19961 0:1081f9802d9d 22 bool startreaction;
philipp19961 0:1081f9802d9d 23 float reactionTime = 0;
philipp19961 0:1081f9802d9d 24
philipp19961 0:1081f9802d9d 25 void reactionTick();
philipp19961 0:1081f9802d9d 26 void startTime();
philipp19961 0:1081f9802d9d 27
philipp19961 0:1081f9802d9d 28
philipp19961 0:1081f9802d9d 29 void RandomTime()
philipp19961 0:1081f9802d9d 30 {
philipp19961 0:1081f9802d9d 31 float min = 0.8 / 6.3;
philipp19961 0:1081f9802d9d 32 float max = 6.2 / 6.3;
philipp19961 0:1081f9802d9d 33
philipp19961 0:1081f9802d9d 34 initTime = min + ((float)rand()/RAND_MAX) * (max - min) * 6.3;
philipp19961 0:1081f9802d9d 35 }
philipp19961 0:1081f9802d9d 36
philipp19961 0:1081f9802d9d 37 void startTimerStart()
philipp19961 0:1081f9802d9d 38 {
philipp19961 0:1081f9802d9d 39 RandomTime();
philipp19961 0:1081f9802d9d 40 tick.attach(&startTime, 0.1);
philipp19961 0:1081f9802d9d 41 }
philipp19961 0:1081f9802d9d 42
philipp19961 0:1081f9802d9d 43 void stopTimer()
philipp19961 0:1081f9802d9d 44 {
philipp19961 0:1081f9802d9d 45 tick.detach();
philipp19961 0:1081f9802d9d 46 }
philipp19961 0:1081f9802d9d 47
philipp19961 0:1081f9802d9d 48 void ledsEin()
philipp19961 0:1081f9802d9d 49 {
philipp19961 0:1081f9802d9d 50 led1 = 1;
philipp19961 0:1081f9802d9d 51 led2 = 1;
philipp19961 0:1081f9802d9d 52 led3 = 1;
philipp19961 0:1081f9802d9d 53 led4 = 1;
philipp19961 0:1081f9802d9d 54 }
philipp19961 0:1081f9802d9d 55
philipp19961 0:1081f9802d9d 56 void ledsAus()
philipp19961 0:1081f9802d9d 57 {
philipp19961 0:1081f9802d9d 58 led1 = 0;
philipp19961 0:1081f9802d9d 59 led2 = 0;
philipp19961 0:1081f9802d9d 60 led3 = 0;
philipp19961 0:1081f9802d9d 61 led4 = 0;
philipp19961 0:1081f9802d9d 62 }
philipp19961 0:1081f9802d9d 63
philipp19961 0:1081f9802d9d 64 int init()
philipp19961 0:1081f9802d9d 65 {
philipp19961 0:1081f9802d9d 66 startreaction = false;
philipp19961 0:1081f9802d9d 67 ledsAus();
philipp19961 0:1081f9802d9d 68 lcd.cls();
philipp19961 0:1081f9802d9d 69 lcd.locate(0, 0);
philipp19961 0:1081f9802d9d 70 lcd.printf("Reaktionstester: ");
philipp19961 0:1081f9802d9d 71 return 0;
philipp19961 0:1081f9802d9d 72 }
philipp19961 0:1081f9802d9d 73
philipp19961 0:1081f9802d9d 74 int ledsOn()
philipp19961 0:1081f9802d9d 75 {
philipp19961 0:1081f9802d9d 76 ledsEin();
philipp19961 0:1081f9802d9d 77 lcd.printf("Running: ");
philipp19961 0:1081f9802d9d 78 startTimerStart();
philipp19961 0:1081f9802d9d 79 return 0;
philipp19961 0:1081f9802d9d 80 }
philipp19961 0:1081f9802d9d 81
philipp19961 0:1081f9802d9d 82 int auswertung()
philipp19961 0:1081f9802d9d 83 {
philipp19961 0:1081f9802d9d 84 if(startreaction)
philipp19961 0:1081f9802d9d 85 {
philipp19961 0:1081f9802d9d 86 stopTimer();
philipp19961 0:1081f9802d9d 87 lcd.locate(0, 10);
philipp19961 0:1081f9802d9d 88 lcd.printf("Zeit: %.3f s", reactionTime);
philipp19961 0:1081f9802d9d 89 }
philipp19961 0:1081f9802d9d 90 else
philipp19961 0:1081f9802d9d 91 {
philipp19961 0:1081f9802d9d 92 stopTimer();
philipp19961 0:1081f9802d9d 93 lcd.locate(0, 10);
philipp19961 0:1081f9802d9d 94 lcd.printf("Zu frueh!!!!");
philipp19961 0:1081f9802d9d 95 }
philipp19961 0:1081f9802d9d 96 event = -1;
philipp19961 0:1081f9802d9d 97 return 0;
philipp19961 0:1081f9802d9d 98 }
philipp19961 0:1081f9802d9d 99
philipp19961 0:1081f9802d9d 100 void reactionTimerStart()
philipp19961 0:1081f9802d9d 101 {
philipp19961 0:1081f9802d9d 102 reactionTime = 0;
philipp19961 0:1081f9802d9d 103 tick.attach(&reactionTick, 0.001);
philipp19961 0:1081f9802d9d 104 }
philipp19961 0:1081f9802d9d 105
philipp19961 0:1081f9802d9d 106 void startTime()
philipp19961 0:1081f9802d9d 107 {
philipp19961 0:1081f9802d9d 108 initTime -= 0.1;
philipp19961 0:1081f9802d9d 109
philipp19961 0:1081f9802d9d 110 if(initTime <= 0)
philipp19961 0:1081f9802d9d 111 {
philipp19961 0:1081f9802d9d 112 startreaction = true;
philipp19961 0:1081f9802d9d 113 ledsAus();
philipp19961 0:1081f9802d9d 114 stopTimer();
philipp19961 0:1081f9802d9d 115 reactionTimerStart();
philipp19961 0:1081f9802d9d 116 }
philipp19961 0:1081f9802d9d 117 }
philipp19961 0:1081f9802d9d 118
philipp19961 0:1081f9802d9d 119 void reactionTick()
philipp19961 0:1081f9802d9d 120 {
philipp19961 0:1081f9802d9d 121 reactionTime += 0.001;
philipp19961 0:1081f9802d9d 122 }
philipp19961 0:1081f9802d9d 123
philipp19961 0:1081f9802d9d 124 int main()
philipp19961 0:1081f9802d9d 125 {
philipp19961 0:1081f9802d9d 126 (action[event])();
philipp19961 0:1081f9802d9d 127
philipp19961 0:1081f9802d9d 128 while(1) {
philipp19961 0:1081f9802d9d 129 if (button.rising()) {
philipp19961 0:1081f9802d9d 130 event++;
philipp19961 0:1081f9802d9d 131 (action[event])();
philipp19961 0:1081f9802d9d 132 }
philipp19961 0:1081f9802d9d 133 }
philipp19961 0:1081f9802d9d 134 }
philipp19961 0:1081f9802d9d 135