Juan Angel García
/
9_8
Timer y timeout
main.cpp@0:eca04bd27d29, 2017-03-09 (annotated)
- Committer:
- jangelgm
- Date:
- Thu Mar 09 21:46:19 2017 +0000
- Revision:
- 0:eca04bd27d29
Timer y timeout
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jangelgm | 0:eca04bd27d29 | 1 | /*Program Example 9.8: Tests reaction time, and demos use of Timer and Timeout functions |
jangelgm | 0:eca04bd27d29 | 2 | */ |
jangelgm | 0:eca04bd27d29 | 3 | #include "mbed.h" |
jangelgm | 0:eca04bd27d29 | 4 | #include <stdio.h> |
jangelgm | 0:eca04bd27d29 | 5 | #include <stdlib.h> //contains rand() function |
jangelgm | 0:eca04bd27d29 | 6 | |
jangelgm | 0:eca04bd27d29 | 7 | void measure (); |
jangelgm | 0:eca04bd27d29 | 8 | |
jangelgm | 0:eca04bd27d29 | 9 | Serial pc(USBTX, USBRX); |
jangelgm | 0:eca04bd27d29 | 10 | |
jangelgm | 0:eca04bd27d29 | 11 | DigitalOut led1(LED1); |
jangelgm | 0:eca04bd27d29 | 12 | DigitalOut led4(LED4); |
jangelgm | 0:eca04bd27d29 | 13 | |
jangelgm | 0:eca04bd27d29 | 14 | DigitalIn responseinput(p5); //the player hits the switch connected here to respond |
jangelgm | 0:eca04bd27d29 | 15 | |
jangelgm | 0:eca04bd27d29 | 16 | Timer t; //used to measure the response time |
jangelgm | 0:eca04bd27d29 | 17 | |
jangelgm | 0:eca04bd27d29 | 18 | Timeout action; //the Timeout used to initiate the response speed test |
jangelgm | 0:eca04bd27d29 | 19 | |
jangelgm | 0:eca04bd27d29 | 20 | int main () |
jangelgm | 0:eca04bd27d29 | 21 | { |
jangelgm | 0:eca04bd27d29 | 22 | pc.printf("Reaction Time Test\n\r"); |
jangelgm | 0:eca04bd27d29 | 23 | pc.printf("------------------\n\r"); |
jangelgm | 0:eca04bd27d29 | 24 | while (1) { |
jangelgm | 0:eca04bd27d29 | 25 | int r_delay; //this will be the “random” delay before the led is blinked |
jangelgm | 0:eca04bd27d29 | 26 | pc.printf("New Test\n\r"); |
jangelgm | 0:eca04bd27d29 | 27 | led4=1; //warn that test will start |
jangelgm | 0:eca04bd27d29 | 28 | wait(0.2); |
jangelgm | 0:eca04bd27d29 | 29 | led4=0; |
jangelgm | 0:eca04bd27d29 | 30 | r_delay = rand() % 10 + 1; // generates a pseudorandom number range 1-10 |
jangelgm | 0:eca04bd27d29 | 31 | pc.printf("random number is %i\n\r", r_delay); // allows test randomness; |
jangelgm | 0:eca04bd27d29 | 32 | //removed for normal play |
jangelgm | 0:eca04bd27d29 | 33 | action.attach(&measure,r_delay); // set up Timeout to call measure() |
jangelgm | 0:eca04bd27d29 | 34 | // after random time |
jangelgm | 0:eca04bd27d29 | 35 | wait(10); //test will start within this time, and we then return to it |
jangelgm | 0:eca04bd27d29 | 36 | } |
jangelgm | 0:eca04bd27d29 | 37 | } |
jangelgm | 0:eca04bd27d29 | 38 | |
jangelgm | 0:eca04bd27d29 | 39 | void measure () // called when the led blinks, and measures response time |
jangelgm | 0:eca04bd27d29 | 40 | { |
jangelgm | 0:eca04bd27d29 | 41 | if (responseinput ==1) { //detect cheating! |
jangelgm | 0:eca04bd27d29 | 42 | pc.printf("Don’t hold button down!"); |
jangelgm | 0:eca04bd27d29 | 43 | } else { |
jangelgm | 0:eca04bd27d29 | 44 | t.start(); //start the timer |
jangelgm | 0:eca04bd27d29 | 45 | led1=1; //blink the led |
jangelgm | 0:eca04bd27d29 | 46 | wait(0.05); |
jangelgm | 0:eca04bd27d29 | 47 | led1=0; |
jangelgm | 0:eca04bd27d29 | 48 | while (responseinput==0) { |
jangelgm | 0:eca04bd27d29 | 49 | //wait here for response |
jangelgm | 0:eca04bd27d29 | 50 | } |
jangelgm | 0:eca04bd27d29 | 51 | t.stop(); //stop the timer once response detected |
jangelgm | 0:eca04bd27d29 | 52 | pc.printf("Your reaction time was %f seconds\n\r", t.read()); |
jangelgm | 0:eca04bd27d29 | 53 | t.reset(); |
jangelgm | 0:eca04bd27d29 | 54 | } |
jangelgm | 0:eca04bd27d29 | 55 | } |