First Last
/
VZSoft_EOF_Trigger
Program that uses the EOF sequence of Vizualeyez motion tracker to trigger an output.
main.cpp@3:ac5de80f4b6c, 2016-11-02 (annotated)
- Committer:
- vsluiter
- Date:
- Wed Nov 02 21:17:55 2016 +0000
- Revision:
- 3:ac5de80f4b6c
- Parent:
- 2:7509f2c717aa
Removed comments
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vsluiter | 0:6190ebfd8112 | 1 | #include "mbed.h" |
vsluiter | 0:6190ebfd8112 | 2 | |
vsluiter | 3:ac5de80f4b6c | 3 | DigitalOut gpo(PTD7); |
vsluiter | 0:6190ebfd8112 | 4 | DigitalOut led(LED_RED); |
vsluiter | 0:6190ebfd8112 | 5 | |
vsluiter | 0:6190ebfd8112 | 6 | InterruptIn trig(PTD1); |
vsluiter | 0:6190ebfd8112 | 7 | Timer trigtimer; |
vsluiter | 0:6190ebfd8112 | 8 | Timeout output_timeout; |
vsluiter | 1:381c49f999b8 | 9 | Timeout input_timeout; |
vsluiter | 0:6190ebfd8112 | 10 | |
vsluiter | 0:6190ebfd8112 | 11 | |
vsluiter | 1:381c49f999b8 | 12 | typedef enum {TRIG_DETECT_IDLE, TRIG_LOW, TRIG_FIRST_HIGH} trig_enum_t; |
vsluiter | 1:381c49f999b8 | 13 | typedef enum {TRIG_EVENT_RISING, TRIG_EVENT_FALLING, TRIG_EVENT_TIMEOUT} trig_event_t; |
vsluiter | 1:381c49f999b8 | 14 | |
vsluiter | 1:381c49f999b8 | 15 | trig_enum_t trigger = TRIG_DETECT_IDLE; |
vsluiter | 1:381c49f999b8 | 16 | |
vsluiter | 1:381c49f999b8 | 17 | //Function declarations |
vsluiter | 1:381c49f999b8 | 18 | void input_timeout_handler(void); |
vsluiter | 1:381c49f999b8 | 19 | void get_new_state(trig_enum_t * trig, trig_event_t event); |
vsluiter | 1:381c49f999b8 | 20 | void set_output(void); |
vsluiter | 1:381c49f999b8 | 21 | void trig_rise_event(void); |
vsluiter | 1:381c49f999b8 | 22 | void trig_fall_event(void); |
vsluiter | 1:381c49f999b8 | 23 | |
vsluiter | 1:381c49f999b8 | 24 | |
vsluiter | 1:381c49f999b8 | 25 | |
vsluiter | 1:381c49f999b8 | 26 | void input_timeout_handler(void) |
vsluiter | 1:381c49f999b8 | 27 | { |
vsluiter | 1:381c49f999b8 | 28 | get_new_state(&trigger, TRIG_EVENT_TIMEOUT); |
vsluiter | 1:381c49f999b8 | 29 | } |
vsluiter | 1:381c49f999b8 | 30 | |
vsluiter | 1:381c49f999b8 | 31 | void get_new_state(trig_enum_t * trig, trig_event_t event) |
vsluiter | 1:381c49f999b8 | 32 | { |
vsluiter | 3:ac5de80f4b6c | 33 | const int jitter = 8; |
vsluiter | 1:381c49f999b8 | 34 | switch(*trig) |
vsluiter | 1:381c49f999b8 | 35 | { |
vsluiter | 1:381c49f999b8 | 36 | case TRIG_DETECT_IDLE: |
vsluiter | 1:381c49f999b8 | 37 | { |
vsluiter | 1:381c49f999b8 | 38 | if(event == TRIG_EVENT_FALLING) |
vsluiter | 1:381c49f999b8 | 39 | { |
vsluiter | 1:381c49f999b8 | 40 | *trig = TRIG_LOW; |
vsluiter | 1:381c49f999b8 | 41 | trigtimer.reset(); |
vsluiter | 1:381c49f999b8 | 42 | } |
vsluiter | 1:381c49f999b8 | 43 | else // should not happen |
vsluiter | 1:381c49f999b8 | 44 | *trig = TRIG_DETECT_IDLE; |
vsluiter | 1:381c49f999b8 | 45 | break; |
vsluiter | 1:381c49f999b8 | 46 | } |
vsluiter | 1:381c49f999b8 | 47 | case TRIG_LOW: |
vsluiter | 1:381c49f999b8 | 48 | { |
vsluiter | 1:381c49f999b8 | 49 | if(event == TRIG_EVENT_RISING) |
vsluiter | 1:381c49f999b8 | 50 | { |
vsluiter | 2:7509f2c717aa | 51 | if(trigtimer.read_us() > (30 - jitter) && trigtimer.read_us() < (30+jitter) ) //if first low period detected |
vsluiter | 1:381c49f999b8 | 52 | { |
vsluiter | 1:381c49f999b8 | 53 | *trig = TRIG_FIRST_HIGH; |
vsluiter | 1:381c49f999b8 | 54 | input_timeout.attach_us(input_timeout_handler, 60); |
vsluiter | 1:381c49f999b8 | 55 | } |
vsluiter | 1:381c49f999b8 | 56 | else //pulse too short or too long |
vsluiter | 1:381c49f999b8 | 57 | *trig = TRIG_DETECT_IDLE; |
vsluiter | 1:381c49f999b8 | 58 | } |
vsluiter | 1:381c49f999b8 | 59 | |
vsluiter | 1:381c49f999b8 | 60 | else // should not happen |
vsluiter | 1:381c49f999b8 | 61 | *trig = TRIG_DETECT_IDLE; |
vsluiter | 1:381c49f999b8 | 62 | break; |
vsluiter | 1:381c49f999b8 | 63 | } |
vsluiter | 1:381c49f999b8 | 64 | case TRIG_FIRST_HIGH: |
vsluiter | 1:381c49f999b8 | 65 | { |
vsluiter | 3:ac5de80f4b6c | 66 | led=!led; |
vsluiter | 1:381c49f999b8 | 67 | if(event == TRIG_EVENT_TIMEOUT) |
vsluiter | 1:381c49f999b8 | 68 | { |
vsluiter | 1:381c49f999b8 | 69 | gpo.write(0); |
vsluiter | 1:381c49f999b8 | 70 | output_timeout.attach_us(set_output, 1000); |
vsluiter | 1:381c49f999b8 | 71 | *trig = TRIG_DETECT_IDLE; |
vsluiter | 1:381c49f999b8 | 72 | } |
vsluiter | 1:381c49f999b8 | 73 | |
vsluiter | 1:381c49f999b8 | 74 | else // should not happen, maybe falling edge due to TOP684 |
vsluiter | 1:381c49f999b8 | 75 | { |
vsluiter | 1:381c49f999b8 | 76 | *trig = TRIG_DETECT_IDLE; |
vsluiter | 1:381c49f999b8 | 77 | input_timeout.detach(); |
vsluiter | 1:381c49f999b8 | 78 | } |
vsluiter | 1:381c49f999b8 | 79 | break; |
vsluiter | 1:381c49f999b8 | 80 | } |
vsluiter | 1:381c49f999b8 | 81 | default: |
vsluiter | 1:381c49f999b8 | 82 | break; |
vsluiter | 1:381c49f999b8 | 83 | } |
vsluiter | 1:381c49f999b8 | 84 | |
vsluiter | 1:381c49f999b8 | 85 | } |
vsluiter | 1:381c49f999b8 | 86 | |
vsluiter | 1:381c49f999b8 | 87 | |
vsluiter | 0:6190ebfd8112 | 88 | void set_output(void) |
vsluiter | 0:6190ebfd8112 | 89 | { |
vsluiter | 0:6190ebfd8112 | 90 | gpo.write(1); |
vsluiter | 0:6190ebfd8112 | 91 | } |
vsluiter | 0:6190ebfd8112 | 92 | |
vsluiter | 0:6190ebfd8112 | 93 | |
vsluiter | 0:6190ebfd8112 | 94 | void trig_rise_event(void) |
vsluiter | 0:6190ebfd8112 | 95 | { |
vsluiter | 1:381c49f999b8 | 96 | get_new_state(&trigger, TRIG_EVENT_RISING); |
vsluiter | 0:6190ebfd8112 | 97 | } |
vsluiter | 0:6190ebfd8112 | 98 | |
vsluiter | 0:6190ebfd8112 | 99 | |
vsluiter | 0:6190ebfd8112 | 100 | void trig_fall_event(void) |
vsluiter | 0:6190ebfd8112 | 101 | { |
vsluiter | 1:381c49f999b8 | 102 | get_new_state(&trigger, TRIG_EVENT_FALLING); |
vsluiter | 3:ac5de80f4b6c | 103 | |
vsluiter | 0:6190ebfd8112 | 104 | } |
vsluiter | 0:6190ebfd8112 | 105 | |
vsluiter | 0:6190ebfd8112 | 106 | int main() |
vsluiter | 0:6190ebfd8112 | 107 | { |
vsluiter | 2:7509f2c717aa | 108 | trigtimer.start(); |
vsluiter | 0:6190ebfd8112 | 109 | trig.rise(trig_rise_event); |
vsluiter | 0:6190ebfd8112 | 110 | trig.fall(trig_fall_event); |
vsluiter | 0:6190ebfd8112 | 111 | while (true) { |
vsluiter | 0:6190ebfd8112 | 112 | //gpo = !gpo; // toggle pin |
vsluiter | 3:ac5de80f4b6c | 113 | //led = !led; // toggle led |
vsluiter | 0:6190ebfd8112 | 114 | wait(0.2f); |
vsluiter | 0:6190ebfd8112 | 115 | } |
vsluiter | 0:6190ebfd8112 | 116 | } |