Stijn Dirickx
/
PGO6_VoteController_StijnDirickx
IoT werksessies embedded
Fork of PGO6_VoteController_template by
Diff: debounce_button.cpp
- Revision:
- 3:6793060aacc6
- Parent:
- 2:5b7d055dbc91
--- a/debounce_button.cpp Tue Oct 31 09:01:56 2017 +0000 +++ b/debounce_button.cpp Mon Oct 15 15:47:44 2018 +0000 @@ -1,58 +1,73 @@ #include "debounce_button.h" -/** - Some tips and tricks: - - To use the built-in LED: - DigitalOut led1(LED1); - ... - led1 = 1; - - To delay the call of a function: - Timeout someTimeout; - ... - someTimeout.attach(callback(&someFunction), 0.5) with 0.5 as 500 milliseconds - - The variables that are used in interrupt callbacks have to be volatile, - because these variables can change at any time. Therefore, the compiler is not - going to make optimisations. +int amount_of_clicks = 0; +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +Timeout someTimeout1; +Timeout someTimeout2; + +volatile bool button1_pressed; // Used in the main loop +volatile bool button1_enabled; // Used for debouncing +volatile int multiclick_state; // Counts how many clicks occured in the time slot, used in main loop +volatile bool button1_busy; // Informs the mainloop that the user is clicking the button + +/* + Delay; + Timeout someTimeout; + someTimeout.attach(callback(&someFunction), 0.5) */ -/** - 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. -*/ + void button1_multiclick_reset_cb(void) { + //stores the amount of clicks in a variable which is read by the main loop. + multiclick_state = amount_of_clicks; + + //resets the click counter which is used inside this file. + amount_of_clicks = 0; + + //lowers a flag which tells the main loop that the user stopped pressing the button such that it can proceed its program. + button1_pressed = false; + + //turns the built-in LED off. Therefore, the user gets informed that the program stopped counting the clicks. + led1 = 0; } -/** - TODO - ---- - This function enables the button again, such that unwanted clicks of the bouncing button get ignored. -*/ void button1_enabled_cb(void) { - + //This function enables the button again, such that unwanted clicks of the bouncing button get ignored. + 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) { + //turns the built-in LED on, so the user gets informed that the program has started with counting clicks + led1 = 1; + //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. + someTimeout1.attach(callback(button1_enabled_cb), 0.1); + + + //TODO revisit debouncing flag + amount_of_clicks += 1; //clicks too much + + + //counts the amount of clicks within a period of 1 second + someTimeout2.attach(callback(button1_multiclick_reset_cb), 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. + button1_busy = true; + + + //Therefore, this main loop cannot continue its procedure until the clicks within 1 second have been counted. } \ No newline at end of file