Ted Lin
/
Nucleo_key_led_with_timeout
implement button press/release with double check using fall/rise & timeout
main.cpp@3:e25965edbbe7, 2016-08-28 (annotated)
- Committer:
- mintisan
- Date:
- Sun Aug 28 09:01:44 2016 +0000
- Revision:
- 3:e25965edbbe7
- Parent:
- 2:d68f26154551
- Child:
- 4:4086e27c299e
version2s: interrupt key without jitter
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mintisan | 0:6a3454713c54 | 1 | #include "mbed.h" |
mintisan | 0:6a3454713c54 | 2 | |
mintisan | 2:d68f26154551 | 3 | //------------------------------------ |
mintisan | 3:e25965edbbe7 | 4 | // USER_KEY-PB_3 / USER_BUTTON-PC_13 |
mintisan | 2:d68f26154551 | 5 | //------------------------------------ |
mintisan | 2:d68f26154551 | 6 | InterruptIn mybutton(PB_3); |
mintisan | 2:d68f26154551 | 7 | //------------------------------------ |
mintisan | 2:d68f26154551 | 8 | // LED1-PA5 |
mintisan | 2:d68f26154551 | 9 | //------------------------------------ |
mintisan | 0:6a3454713c54 | 10 | DigitalOut myled(PA_5); |
mintisan | 2:d68f26154551 | 11 | //------------------------------------ |
mintisan | 2:d68f26154551 | 12 | // Hyperterminal configuration |
mintisan | 2:d68f26154551 | 13 | // 9600 bauds, 8-bit data, no parity |
mintisan | 2:d68f26154551 | 14 | // SERIAL_TX-PA2, SERIAL_RX-PA3 |
mintisan | 2:d68f26154551 | 15 | //------------------------------------ |
mintisan | 2:d68f26154551 | 16 | Serial pc(PA_2, PA_3); |
mintisan | 2:d68f26154551 | 17 | |
mintisan | 3:e25965edbbe7 | 18 | // http://www.amobbs.com/thread-4308630-1-1.html |
mintisan | 3:e25965edbbe7 | 19 | Timeout flipper; |
mintisan | 3:e25965edbbe7 | 20 | |
mintisan | 2:d68f26154551 | 21 | #define entry() pc.printf("func:%s\n", __func__) |
mintisan | 2:d68f26154551 | 22 | |
mintisan | 3:e25965edbbe7 | 23 | #define error() pc.printf("Error! func:%s, line: %d\n", __func__, __LINE__) |
mintisan | 3:e25965edbbe7 | 24 | |
mintisan | 3:e25965edbbe7 | 25 | enum{OFF=0,ON=1}; |
mintisan | 3:e25965edbbe7 | 26 | enum{PRESS= 0, RELEASE = 1, UNKNOWN}; |
mintisan | 3:e25965edbbe7 | 27 | uint8_t flag_status = UNKNOWN; |
mintisan | 3:e25965edbbe7 | 28 | |
mintisan | 3:e25965edbbe7 | 29 | void double_check(void) |
mintisan | 3:e25965edbbe7 | 30 | { |
mintisan | 3:e25965edbbe7 | 31 | //entry(); |
mintisan | 3:e25965edbbe7 | 32 | pc.printf("before = %d, now= %d\n",flag_status,mybutton.read()); |
mintisan | 3:e25965edbbe7 | 33 | switch(flag_status){ |
mintisan | 3:e25965edbbe7 | 34 | case PRESS: |
mintisan | 3:e25965edbbe7 | 35 | if(mybutton.read() == PRESS){ |
mintisan | 3:e25965edbbe7 | 36 | myled = ON; |
mintisan | 3:e25965edbbe7 | 37 | pc.printf("Pressed\n"); |
mintisan | 3:e25965edbbe7 | 38 | } |
mintisan | 3:e25965edbbe7 | 39 | break; |
mintisan | 3:e25965edbbe7 | 40 | case RELEASE: |
mintisan | 3:e25965edbbe7 | 41 | if(mybutton.read() == RELEASE){ |
mintisan | 3:e25965edbbe7 | 42 | myled = OFF; |
mintisan | 3:e25965edbbe7 | 43 | pc.printf("Released\n"); |
mintisan | 3:e25965edbbe7 | 44 | } |
mintisan | 3:e25965edbbe7 | 45 | break; |
mintisan | 3:e25965edbbe7 | 46 | default: |
mintisan | 3:e25965edbbe7 | 47 | error(); |
mintisan | 3:e25965edbbe7 | 48 | break; |
mintisan | 3:e25965edbbe7 | 49 | } |
mintisan | 3:e25965edbbe7 | 50 | } |
mintisan | 3:e25965edbbe7 | 51 | |
mintisan | 2:d68f26154551 | 52 | void pressed(void) |
mintisan | 2:d68f26154551 | 53 | { |
mintisan | 3:e25965edbbe7 | 54 | //entry(); |
mintisan | 3:e25965edbbe7 | 55 | if(myled.read()!=ON){ |
mintisan | 3:e25965edbbe7 | 56 | flag_status = PRESS; |
mintisan | 3:e25965edbbe7 | 57 | //pc.printf("mykey=%d\n",mybutton.read()); |
mintisan | 3:e25965edbbe7 | 58 | flipper.attach(&double_check, 0.01); //10ms |
mintisan | 3:e25965edbbe7 | 59 | } |
mintisan | 2:d68f26154551 | 60 | } |
mintisan | 2:d68f26154551 | 61 | |
mintisan | 2:d68f26154551 | 62 | void released(void) |
mintisan | 2:d68f26154551 | 63 | { |
mintisan | 3:e25965edbbe7 | 64 | //entry(); |
mintisan | 3:e25965edbbe7 | 65 | if(myled.read()!=OFF){ |
mintisan | 3:e25965edbbe7 | 66 | flag_status = RELEASE; |
mintisan | 3:e25965edbbe7 | 67 | //pc.printf("mykey=%d\n",int(mybutton)); |
mintisan | 3:e25965edbbe7 | 68 | flipper.attach(&double_check, 0.01); //10ms |
mintisan | 3:e25965edbbe7 | 69 | } |
mintisan | 2:d68f26154551 | 70 | } |
mintisan | 0:6a3454713c54 | 71 | |
mintisan | 3:e25965edbbe7 | 72 | |
mintisan | 3:e25965edbbe7 | 73 | |
mintisan | 0:6a3454713c54 | 74 | int main(void) |
mintisan | 0:6a3454713c54 | 75 | { |
mintisan | 2:d68f26154551 | 76 | mybutton.fall(&pressed); |
mintisan | 2:d68f26154551 | 77 | mybutton.rise(&released); |
mintisan | 0:6a3454713c54 | 78 | while(1) { |
mintisan | 0:6a3454713c54 | 79 | } |
mintisan | 0:6a3454713c54 | 80 | } |