Ted Lin
/
Nucleo_key_led_with_timeout
implement button press/release with double check using fall/rise & timeout
main.cpp
- Committer:
- mintisan
- Date:
- 2016-08-28
- Revision:
- 3:e25965edbbe7
- Parent:
- 2:d68f26154551
- Child:
- 4:4086e27c299e
File content as of revision 3:e25965edbbe7:
#include "mbed.h" //------------------------------------ // USER_KEY-PB_3 / USER_BUTTON-PC_13 //------------------------------------ InterruptIn mybutton(PB_3); //------------------------------------ // LED1-PA5 //------------------------------------ DigitalOut myled(PA_5); //------------------------------------ // Hyperterminal configuration // 9600 bauds, 8-bit data, no parity // SERIAL_TX-PA2, SERIAL_RX-PA3 //------------------------------------ Serial pc(PA_2, PA_3); // http://www.amobbs.com/thread-4308630-1-1.html Timeout flipper; #define entry() pc.printf("func:%s\n", __func__) #define error() pc.printf("Error! func:%s, line: %d\n", __func__, __LINE__) enum{OFF=0,ON=1}; enum{PRESS= 0, RELEASE = 1, UNKNOWN}; uint8_t flag_status = UNKNOWN; void double_check(void) { //entry(); pc.printf("before = %d, now= %d\n",flag_status,mybutton.read()); switch(flag_status){ case PRESS: if(mybutton.read() == PRESS){ myled = ON; pc.printf("Pressed\n"); } break; case RELEASE: if(mybutton.read() == RELEASE){ myled = OFF; pc.printf("Released\n"); } break; default: error(); break; } } void pressed(void) { //entry(); if(myled.read()!=ON){ flag_status = PRESS; //pc.printf("mykey=%d\n",mybutton.read()); flipper.attach(&double_check, 0.01); //10ms } } void released(void) { //entry(); if(myled.read()!=OFF){ flag_status = RELEASE; //pc.printf("mykey=%d\n",int(mybutton)); flipper.attach(&double_check, 0.01); //10ms } } int main(void) { mybutton.fall(&pressed); mybutton.rise(&released); while(1) { } }