Dependencies: C12832_lcd mbed
main.cpp@0:1081f9802d9d, 2014-11-05 (annotated)
- 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?
User | Revision | Line number | New 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 |