Ivan Šimunović
/
BrzinaReakcije
Test brzine reakcije na vizualne podražaje; Brzina pritiska tipkala u trenutku paljenja LED diode
main.cpp@0:bdff3421476a, 2021-09-21 (annotated)
- Committer:
- simee
- Date:
- Tue Sep 21 17:21:39 2021 +0000
- Revision:
- 0:bdff3421476a
Ivan Simunovic, test brzine reakcije
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
simee | 0:bdff3421476a | 1 | #include "mbed.h" |
simee | 0:bdff3421476a | 2 | #include"TextLCD.h" |
simee | 0:bdff3421476a | 3 | |
simee | 0:bdff3421476a | 4 | DigitalOut redLED(PC_10); |
simee | 0:bdff3421476a | 5 | DigitalOut greenLED(PC_12); |
simee | 0:bdff3421476a | 6 | |
simee | 0:bdff3421476a | 7 | DigitalIn startButton(PC_13);//user button |
simee | 0:bdff3421476a | 8 | InterruptIn stopButton(PA_13);//external button |
simee | 0:bdff3421476a | 9 | |
simee | 0:bdff3421476a | 10 | TextLCD lcd(PA_0,PA_1,PA_4,PB_0,PC_1,PC_0); |
simee | 0:bdff3421476a | 11 | |
simee | 0:bdff3421476a | 12 | |
simee | 0:bdff3421476a | 13 | Timer randomNumberTimer; |
simee | 0:bdff3421476a | 14 | Timer timerOfReaction; |
simee | 0:bdff3421476a | 15 | |
simee | 0:bdff3421476a | 16 | |
simee | 0:bdff3421476a | 17 | Ticker timeCheck; |
simee | 0:bdff3421476a | 18 | |
simee | 0:bdff3421476a | 19 | Serial pc(USBTX,USBRX);// for debuging |
simee | 0:bdff3421476a | 20 | |
simee | 0:bdff3421476a | 21 | AnalogIn aIn(PC_3); |
simee | 0:bdff3421476a | 22 | |
simee | 0:bdff3421476a | 23 | unsigned int random_generator (void) |
simee | 0:bdff3421476a | 24 | { |
simee | 0:bdff3421476a | 25 | unsigned int x = 0; |
simee | 0:bdff3421476a | 26 | unsigned int iRandom = 0; |
simee | 0:bdff3421476a | 27 | for (x = 0; x <= 32; x += 2) { |
simee | 0:bdff3421476a | 28 | iRandom += ((aIn.read_u16() % 3) << x); |
simee | 0:bdff3421476a | 29 | wait_us (10); |
simee | 0:bdff3421476a | 30 | } |
simee | 0:bdff3421476a | 31 | |
simee | 0:bdff3421476a | 32 | if(iRandom < 0) { |
simee | 0:bdff3421476a | 33 | iRandom *= -1; |
simee | 0:bdff3421476a | 34 | } |
simee | 0:bdff3421476a | 35 | |
simee | 0:bdff3421476a | 36 | while(iRandom > 5000) { |
simee | 0:bdff3421476a | 37 | iRandom /= 100; |
simee | 0:bdff3421476a | 38 | } |
simee | 0:bdff3421476a | 39 | //pc.printf("\n%d", iRandom); |
simee | 0:bdff3421476a | 40 | return iRandom; |
simee | 0:bdff3421476a | 41 | } |
simee | 0:bdff3421476a | 42 | |
simee | 0:bdff3421476a | 43 | int randomNumber = 0; |
simee | 0:bdff3421476a | 44 | int toEarly = 0; |
simee | 0:bdff3421476a | 45 | |
simee | 0:bdff3421476a | 46 | void checkTime() |
simee | 0:bdff3421476a | 47 | { |
simee | 0:bdff3421476a | 48 | if(stopButton == 0)toEarly = -1; |
simee | 0:bdff3421476a | 49 | |
simee | 0:bdff3421476a | 50 | if(toEarly == 0) { |
simee | 0:bdff3421476a | 51 | if(randomNumberTimer.read_ms() >= randomNumber) { |
simee | 0:bdff3421476a | 52 | timeCheck.detach(); |
simee | 0:bdff3421476a | 53 | redLED = 0; |
simee | 0:bdff3421476a | 54 | greenLED = 1; |
simee | 0:bdff3421476a | 55 | timerOfReaction.reset(); |
simee | 0:bdff3421476a | 56 | timerOfReaction.start(); |
simee | 0:bdff3421476a | 57 | } |
simee | 0:bdff3421476a | 58 | } |
simee | 0:bdff3421476a | 59 | } |
simee | 0:bdff3421476a | 60 | |
simee | 0:bdff3421476a | 61 | int timeOfReaction_ = -1; |
simee | 0:bdff3421476a | 62 | |
simee | 0:bdff3421476a | 63 | |
simee | 0:bdff3421476a | 64 | |
simee | 0:bdff3421476a | 65 | void stopMeasure() |
simee | 0:bdff3421476a | 66 | { |
simee | 0:bdff3421476a | 67 | |
simee | 0:bdff3421476a | 68 | redLED = 0; |
simee | 0:bdff3421476a | 69 | greenLED = 0; |
simee | 0:bdff3421476a | 70 | timeOfReaction_ = timerOfReaction.read_ms(); |
simee | 0:bdff3421476a | 71 | timerOfReaction.stop(); |
simee | 0:bdff3421476a | 72 | |
simee | 0:bdff3421476a | 73 | |
simee | 0:bdff3421476a | 74 | } |
simee | 0:bdff3421476a | 75 | |
simee | 0:bdff3421476a | 76 | |
simee | 0:bdff3421476a | 77 | int main() |
simee | 0:bdff3421476a | 78 | { |
simee | 0:bdff3421476a | 79 | lcd.cls(); |
simee | 0:bdff3421476a | 80 | lcd.printf("Press user"); |
simee | 0:bdff3421476a | 81 | lcd.locate(0,1); |
simee | 0:bdff3421476a | 82 | lcd.printf("button to start!"); |
simee | 0:bdff3421476a | 83 | |
simee | 0:bdff3421476a | 84 | wait(1.5); |
simee | 0:bdff3421476a | 85 | lcd.cls(); |
simee | 0:bdff3421476a | 86 | lcd.printf("Press external"); |
simee | 0:bdff3421476a | 87 | lcd.locate(0,1); |
simee | 0:bdff3421476a | 88 | lcd.printf("button when "); |
simee | 0:bdff3421476a | 89 | |
simee | 0:bdff3421476a | 90 | wait(1.5); |
simee | 0:bdff3421476a | 91 | lcd.cls(); |
simee | 0:bdff3421476a | 92 | lcd.printf("green LED"); |
simee | 0:bdff3421476a | 93 | lcd.locate(0,1); |
simee | 0:bdff3421476a | 94 | lcd.printf("is ON "); |
simee | 0:bdff3421476a | 95 | |
simee | 0:bdff3421476a | 96 | wait(1.5); |
simee | 0:bdff3421476a | 97 | lcd.cls(); |
simee | 0:bdff3421476a | 98 | lcd.printf("Waiting for the "); |
simee | 0:bdff3421476a | 99 | lcd.locate(0,1); |
simee | 0:bdff3421476a | 100 | lcd.printf(" START "); |
simee | 0:bdff3421476a | 101 | |
simee | 0:bdff3421476a | 102 | startButton.mode(PullUp); |
simee | 0:bdff3421476a | 103 | stopButton.mode(PullUp); |
simee | 0:bdff3421476a | 104 | |
simee | 0:bdff3421476a | 105 | stopButton.fall(&stopMeasure); |
simee | 0:bdff3421476a | 106 | |
simee | 0:bdff3421476a | 107 | |
simee | 0:bdff3421476a | 108 | int oldInfo; |
simee | 0:bdff3421476a | 109 | |
simee | 0:bdff3421476a | 110 | |
simee | 0:bdff3421476a | 111 | |
simee | 0:bdff3421476a | 112 | while (true) { |
simee | 0:bdff3421476a | 113 | |
simee | 0:bdff3421476a | 114 | if(startButton == 0) { |
simee | 0:bdff3421476a | 115 | toEarly = 0; |
simee | 0:bdff3421476a | 116 | redLED = 1; |
simee | 0:bdff3421476a | 117 | greenLED = 0; |
simee | 0:bdff3421476a | 118 | randomNumber = random_generator(); |
simee | 0:bdff3421476a | 119 | randomNumberTimer.reset(); |
simee | 0:bdff3421476a | 120 | randomNumberTimer.start(); |
simee | 0:bdff3421476a | 121 | timeCheck.attach(&checkTime,0.001); |
simee | 0:bdff3421476a | 122 | } |
simee | 0:bdff3421476a | 123 | |
simee | 0:bdff3421476a | 124 | |
simee | 0:bdff3421476a | 125 | if(timeOfReaction_ != -1 && timeOfReaction_ != oldInfo) { |
simee | 0:bdff3421476a | 126 | lcd.cls(); |
simee | 0:bdff3421476a | 127 | lcd.printf("Time of reaction"); |
simee | 0:bdff3421476a | 128 | lcd.locate(0,1); |
simee | 0:bdff3421476a | 129 | lcd.printf("is %d mS",timeOfReaction_); |
simee | 0:bdff3421476a | 130 | oldInfo = timeOfReaction_; |
simee | 0:bdff3421476a | 131 | } |
simee | 0:bdff3421476a | 132 | |
simee | 0:bdff3421476a | 133 | if(toEarly == -1) { |
simee | 0:bdff3421476a | 134 | toEarly = -2; |
simee | 0:bdff3421476a | 135 | lcd.cls(); |
simee | 0:bdff3421476a | 136 | lcd.printf("Time of reaction"); |
simee | 0:bdff3421476a | 137 | lcd.locate(0,1); |
simee | 0:bdff3421476a | 138 | lcd.printf("is to early !"); |
simee | 0:bdff3421476a | 139 | wait(1.5); |
simee | 0:bdff3421476a | 140 | lcd.cls(); |
simee | 0:bdff3421476a | 141 | lcd.printf("Waiting for the "); |
simee | 0:bdff3421476a | 142 | lcd.locate(0,1); |
simee | 0:bdff3421476a | 143 | lcd.printf(" START "); |
simee | 0:bdff3421476a | 144 | |
simee | 0:bdff3421476a | 145 | } |
simee | 0:bdff3421476a | 146 | |
simee | 0:bdff3421476a | 147 | |
simee | 0:bdff3421476a | 148 | |
simee | 0:bdff3421476a | 149 | } |
simee | 0:bdff3421476a | 150 | } |
simee | 0:bdff3421476a | 151 |