Test brzine reakcije na vizualne podražaje; Brzina pritiska tipkala u trenutku paljenja LED diode

Dependencies:   TextLCD

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?

UserRevisionLine numberNew 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