Aleksander Chernyavskiy
/
pgo6_aleksander_chernyavskiy
opdracht mqtt nucleo
Fork of PGO6_VoteController_template by
Diff: debounce_button.cpp
- Revision:
- 3:abfa79c5b7bd
- Parent:
- 2:5b7d055dbc91
--- a/debounce_button.cpp Tue Oct 31 09:01:56 2017 +0000 +++ b/debounce_button.cpp Thu Oct 11 15:52:51 2018 +0000 @@ -15,17 +15,26 @@ going to make optimisations. */ -/** - TODO - ---- - This function: - - stores the amount of clicks in a variable which is read by the main loop. - - resets the click counter which is used inside this file. - - lowers a flag which tells the main loop that the user stopped pressing the button - such that it can proceed its program. - - turns the built-in LED off. Therefore, the user gets informed that the program stopped counting the clicks. -*/ + +// init the extern variables +volatile int multiclick_state = 0; +volatile int tempCount = 0; +volatile bool button1_busy = false; +volatile bool button1_pressed = false; +volatile bool button1_enabled = true; +DigitalOut myled(LED1); +Timeout enableButtonTimer; +Timeout resetButtonTimer; + void button1_multiclick_reset_cb(void) { + //stores the amount of clicks in a variable which is read by the main loop. + multiclick_state = tempCount; + //resets the click counter which is used inside this file. + tempCount = 0; + //lowers a flag which tells the main loop that the user stopped pressing the button such that it can proceed its program. + button1_busy = false; + //turns the built-in LED off. Therefore, the user gets informed that the program stopped counting the clicks. + myled = 0; } @@ -36,23 +45,28 @@ */ void button1_enabled_cb(void) { - + button1_enabled = true; } -/** - TODO - ---- - This function: - - turns the built-in LED on, so the user gets informed that the program has started with counting clicks - - disables the button such that the debouncer is active - - enables the button again after a certain amount of time - (use interrupts with "button1_enabled_cb()" as callback. - - counts the amount of clicks within a period of 1 second - - informs the main loop that the button has been pressed - - informs the main loop that the user is clicking the button. - Therefore, this main loop cannot continue its procedure until the clicks within 1 second have been counted. -*/ void button1_onpressed_cb(void) { - + if(button1_enabled) { + //disables the button such that the debouncer is active + button1_enabled = false; + //enables the button again after a certain amount of time (use interrupts with "button1_enabled_cb()" as callback.) + enableButtonTimer.attach(callback(&button1_enabled_cb), 0.1); + //informs the main loop that the button has been pressed + button1_pressed = true; + //informs the main loop that the user is clicking the button. + //Therefore, this main loop cannot continue its procedure until the clicks within 1 second have been counted. + if(!button1_busy) { + //turns the built-in LED on, so the user gets informed that the program has started with counting clicks + myled = 1; + button1_busy = true; + resetButtonTimer.attach(callback(&button1_multiclick_reset_cb), 1); + } + //counts the amount of clicks within a period of 1 second + tempCount++; + + } } \ No newline at end of file