![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
IoT werksessies embedded
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; }