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.
Pushbutton.cpp@4:3f905ce43f2b, 2021-03-12 (annotated)
- Committer:
- khaiminhvn
- Date:
- Fri Mar 12 01:08:03 2021 +0000
- Revision:
- 4:3f905ce43f2b
- Parent:
- 3:03c78d8b7dfc
- Child:
- 5:0417f54d0519
Add flag resetting to function button;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| khaiminhvn | 0:4482075b8b95 | 1 | //INCLUDES |
| khaiminhvn | 0:4482075b8b95 | 2 | #include "Pushbutton.h" |
| khaiminhvn | 0:4482075b8b95 | 3 | |
| khaiminhvn | 0:4482075b8b95 | 4 | #define timer_read_s(x) chrono::duration_cast<chrono::seconds>((x).elapsed_time()).count() |
| khaiminhvn | 0:4482075b8b95 | 5 | |
| khaiminhvn | 0:4482075b8b95 | 6 | DigitalIn Pushbutton::lastPressed(PIN_ACCEL_PANEL); |
| khaiminhvn | 0:4482075b8b95 | 7 | |
| khaiminhvn | 0:4482075b8b95 | 8 | //Constructor |
| khaiminhvn | 0:4482075b8b95 | 9 | Pushbutton::Pushbutton(PinName bt) : button(bt),buttonInt(bt){ |
| khaiminhvn | 0:4482075b8b95 | 10 | busy = 0; |
| khaiminhvn | 0:4482075b8b95 | 11 | } |
| khaiminhvn | 4:3f905ce43f2b | 12 | Pushbutton::Pushbutton(PinName bt, int* state, int* flagIn) : buttonInt(bt),button(bt){ |
| khaiminhvn | 0:4482075b8b95 | 13 | busy = 0; |
| khaiminhvn | 4:3f905ce43f2b | 14 | flag = flagIn; |
| khaiminhvn | 0:4482075b8b95 | 15 | mode = state; |
| khaiminhvn | 0:4482075b8b95 | 16 | if(INPUT_LOGIC == 0) |
| khaiminhvn | 0:4482075b8b95 | 17 | { |
| khaiminhvn | 0:4482075b8b95 | 18 | buttonInt.fall(callback(this,&Pushbutton::updateMode)); |
| khaiminhvn | 0:4482075b8b95 | 19 | } |
| khaiminhvn | 0:4482075b8b95 | 20 | else |
| khaiminhvn | 0:4482075b8b95 | 21 | { |
| khaiminhvn | 0:4482075b8b95 | 22 | buttonInt.rise(callback(this,&Pushbutton::updateMode)); |
| khaiminhvn | 0:4482075b8b95 | 23 | } |
| khaiminhvn | 0:4482075b8b95 | 24 | } |
| khaiminhvn | 0:4482075b8b95 | 25 | |
| khaiminhvn | 0:4482075b8b95 | 26 | //Methods |
| khaiminhvn | 0:4482075b8b95 | 27 | //read() |
| khaiminhvn | 0:4482075b8b95 | 28 | int Pushbutton::read(){ |
| khaiminhvn | 0:4482075b8b95 | 29 | if(Pushbutton::lastPressed == INPUT_LOGIC && Pushbutton::lastPressed != button) |
| khaiminhvn | 0:4482075b8b95 | 30 | return 0; |
| khaiminhvn | 0:4482075b8b95 | 31 | else if(Pushbutton::lastPressed == INPUT_LOGIC && Pushbutton::lastPressed == button) |
| khaiminhvn | 0:4482075b8b95 | 32 | return 1; |
| khaiminhvn | 0:4482075b8b95 | 33 | |
| khaiminhvn | 0:4482075b8b95 | 34 | wait_us(DEBOUNCE_TIME); |
| khaiminhvn | 0:4482075b8b95 | 35 | |
| khaiminhvn | 0:4482075b8b95 | 36 | Pushbutton::lastPressed = (button == INPUT_LOGIC) ? button : Pushbutton::lastPressed; |
| khaiminhvn | 0:4482075b8b95 | 37 | busy == (button == INPUT_LOGIC) ? 1 : 0; |
| khaiminhvn | 0:4482075b8b95 | 38 | return (button == INPUT_LOGIC) ? 1 : 0; |
| khaiminhvn | 0:4482075b8b95 | 39 | } |
| khaiminhvn | 0:4482075b8b95 | 40 | |
| khaiminhvn | 0:4482075b8b95 | 41 | //updateMode() |
| khaiminhvn | 0:4482075b8b95 | 42 | void Pushbutton::updateMode() |
| khaiminhvn | 0:4482075b8b95 | 43 | { |
| khaiminhvn | 0:4482075b8b95 | 44 | Timer t; |
| khaiminhvn | 0:4482075b8b95 | 45 | t.start(); |
| khaiminhvn | 0:4482075b8b95 | 46 | |
| khaiminhvn | 0:4482075b8b95 | 47 | wait_us(DEBOUNCE_TIME); |
| khaiminhvn | 0:4482075b8b95 | 48 | if(read()) //If received input |
| khaiminhvn | 0:4482075b8b95 | 49 | { |
| khaiminhvn | 4:3f905ce43f2b | 50 | *flag = 1; |
| khaiminhvn | 0:4482075b8b95 | 51 | while((int)timer_read_s(t) <= TIME_WSETTING) //check if button is held to the threshold |
| khaiminhvn | 0:4482075b8b95 | 52 | { |
| khaiminhvn | 0:4482075b8b95 | 53 | if(buttonInt.read() != INPUT_LOGIC) //check if button is released |
| khaiminhvn | 0:4482075b8b95 | 54 | { |
| khaiminhvn | 0:4482075b8b95 | 55 | if(*mode == OP_NORMAL || *mode == OP_WIND) |
| khaiminhvn | 0:4482075b8b95 | 56 | { |
| khaiminhvn | 0:4482075b8b95 | 57 | *mode = OP_MANUAL1; |
| khaiminhvn | 0:4482075b8b95 | 58 | return; |
| khaiminhvn | 0:4482075b8b95 | 59 | } |
| khaiminhvn | 0:4482075b8b95 | 60 | else if(*mode == OP_MANUAL1) |
| khaiminhvn | 0:4482075b8b95 | 61 | { |
| khaiminhvn | 0:4482075b8b95 | 62 | *mode = OP_MANUAL2; |
| khaiminhvn | 0:4482075b8b95 | 63 | return; |
| khaiminhvn | 0:4482075b8b95 | 64 | } |
| khaiminhvn | 3:03c78d8b7dfc | 65 | else if(*mode == OP_MANUAL2 || *mode == OP_WSETTING || *mode == OP_PLACEMENT) |
| khaiminhvn | 0:4482075b8b95 | 66 | { |
| khaiminhvn | 0:4482075b8b95 | 67 | *mode = OP_NORMAL; |
| khaiminhvn | 0:4482075b8b95 | 68 | return; |
| khaiminhvn | 0:4482075b8b95 | 69 | } |
| khaiminhvn | 2:6ade0fbab4e1 | 70 | else{ |
| khaiminhvn | 2:6ade0fbab4e1 | 71 | *mode = OP_PLACEMENT; |
| khaiminhvn | 2:6ade0fbab4e1 | 72 | return; |
| khaiminhvn | 2:6ade0fbab4e1 | 73 | } |
| khaiminhvn | 0:4482075b8b95 | 74 | t.stop(); |
| khaiminhvn | 0:4482075b8b95 | 75 | return; |
| khaiminhvn | 0:4482075b8b95 | 76 | } |
| khaiminhvn | 0:4482075b8b95 | 77 | } |
| khaiminhvn | 0:4482075b8b95 | 78 | *mode = OP_WSETTING; |
| khaiminhvn | 0:4482075b8b95 | 79 | return; |
| khaiminhvn | 0:4482075b8b95 | 80 | } |
| khaiminhvn | 0:4482075b8b95 | 81 | } |
