Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of PGO6_VoteController_template by
Revision 3:6793060aacc6, committed 2018-10-15
- Comitter:
- stijndirickx
- Date:
- Mon Oct 15 15:47:44 2018 +0000
- Parent:
- 2:5b7d055dbc91
- Commit message:
- Eerste werksessie;
Changed in this revision
debounce_button.cpp | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- 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
--- a/main.cpp Tue Oct 31 09:01:56 2017 +0000 +++ b/main.cpp Mon Oct 15 15:47:44 2018 +0000 @@ -41,8 +41,26 @@ sendMessage(&client, topic, buf, qos, retained, duplicate) */ + + int main(int argc, char* argv[]) { + DigitalOut led1(LED1); + DigitalOut led2(LED2); + DigitalOut led3(LED3); + InterruptIn button(USER_BUTTON); + //Timeout someTimeout; + button.fall(callback(button1_onpressed_cb)); + + while(true){ + if(multiclick_state > 0){ + led3 = 1; + if(multiclick_state > 5){ + led2 = 1; + } + } + } + return 0; }