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@2:6ade0fbab4e1, 2021-03-11 (annotated)
- Committer:
- khaiminhvn
- Date:
- Thu Mar 11 23:22:16 2021 +0000
- Revision:
- 2:6ade0fbab4e1
- Parent:
- 1:e47e80a32fb5
- Child:
- 3:03c78d8b7dfc
Added additional modes
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 | 0:4482075b8b95 | 12 | Pushbutton::Pushbutton(PinName bt, int* state) : buttonInt(bt),button(bt){ |
| khaiminhvn | 0:4482075b8b95 | 13 | busy = 0; |
| khaiminhvn | 0:4482075b8b95 | 14 | mode = state; |
| khaiminhvn | 0:4482075b8b95 | 15 | if(INPUT_LOGIC == 0) |
| khaiminhvn | 0:4482075b8b95 | 16 | { |
| khaiminhvn | 0:4482075b8b95 | 17 | buttonInt.fall(callback(this,&Pushbutton::updateMode)); |
| khaiminhvn | 0:4482075b8b95 | 18 | } |
| khaiminhvn | 0:4482075b8b95 | 19 | else |
| khaiminhvn | 0:4482075b8b95 | 20 | { |
| khaiminhvn | 0:4482075b8b95 | 21 | buttonInt.rise(callback(this,&Pushbutton::updateMode)); |
| khaiminhvn | 0:4482075b8b95 | 22 | } |
| khaiminhvn | 0:4482075b8b95 | 23 | } |
| khaiminhvn | 0:4482075b8b95 | 24 | |
| khaiminhvn | 0:4482075b8b95 | 25 | //Methods |
| khaiminhvn | 0:4482075b8b95 | 26 | //read() |
| khaiminhvn | 0:4482075b8b95 | 27 | int Pushbutton::read(){ |
| khaiminhvn | 0:4482075b8b95 | 28 | if(Pushbutton::lastPressed == INPUT_LOGIC && Pushbutton::lastPressed != button) |
| khaiminhvn | 0:4482075b8b95 | 29 | return 0; |
| khaiminhvn | 0:4482075b8b95 | 30 | else if(Pushbutton::lastPressed == INPUT_LOGIC && Pushbutton::lastPressed == button) |
| khaiminhvn | 0:4482075b8b95 | 31 | return 1; |
| khaiminhvn | 0:4482075b8b95 | 32 | |
| khaiminhvn | 0:4482075b8b95 | 33 | wait_us(DEBOUNCE_TIME); |
| khaiminhvn | 0:4482075b8b95 | 34 | |
| khaiminhvn | 0:4482075b8b95 | 35 | Pushbutton::lastPressed = (button == INPUT_LOGIC) ? button : Pushbutton::lastPressed; |
| khaiminhvn | 0:4482075b8b95 | 36 | busy == (button == INPUT_LOGIC) ? 1 : 0; |
| khaiminhvn | 0:4482075b8b95 | 37 | return (button == INPUT_LOGIC) ? 1 : 0; |
| khaiminhvn | 0:4482075b8b95 | 38 | } |
| khaiminhvn | 0:4482075b8b95 | 39 | |
| khaiminhvn | 0:4482075b8b95 | 40 | //updateMode() |
| khaiminhvn | 0:4482075b8b95 | 41 | void Pushbutton::updateMode() |
| khaiminhvn | 0:4482075b8b95 | 42 | { |
| khaiminhvn | 0:4482075b8b95 | 43 | Timer t; |
| khaiminhvn | 0:4482075b8b95 | 44 | t.start(); |
| khaiminhvn | 0:4482075b8b95 | 45 | |
| khaiminhvn | 0:4482075b8b95 | 46 | wait_us(DEBOUNCE_TIME); |
| khaiminhvn | 0:4482075b8b95 | 47 | if(read()) //If received input |
| khaiminhvn | 0:4482075b8b95 | 48 | { |
| khaiminhvn | 0:4482075b8b95 | 49 | while((int)timer_read_s(t) <= TIME_WSETTING) //check if button is held to the threshold |
| khaiminhvn | 0:4482075b8b95 | 50 | { |
| khaiminhvn | 0:4482075b8b95 | 51 | if(buttonInt.read() != INPUT_LOGIC) //check if button is released |
| khaiminhvn | 0:4482075b8b95 | 52 | { |
| khaiminhvn | 0:4482075b8b95 | 53 | if(*mode == OP_NORMAL || *mode == OP_WIND) |
| khaiminhvn | 0:4482075b8b95 | 54 | { |
| khaiminhvn | 0:4482075b8b95 | 55 | *mode = OP_MANUAL1; |
| khaiminhvn | 0:4482075b8b95 | 56 | return; |
| khaiminhvn | 0:4482075b8b95 | 57 | } |
| khaiminhvn | 0:4482075b8b95 | 58 | else if(*mode == OP_MANUAL1) |
| khaiminhvn | 0:4482075b8b95 | 59 | { |
| khaiminhvn | 0:4482075b8b95 | 60 | *mode = OP_MANUAL2; |
| khaiminhvn | 0:4482075b8b95 | 61 | return; |
| khaiminhvn | 0:4482075b8b95 | 62 | } |
| khaiminhvn | 2:6ade0fbab4e1 | 63 | else if(*mode == OP_MANUAL2 || *mode == OP_WSETTING ||| *mode == OP_PLACEMENT) |
| khaiminhvn | 0:4482075b8b95 | 64 | { |
| khaiminhvn | 0:4482075b8b95 | 65 | *mode = OP_NORMAL; |
| khaiminhvn | 0:4482075b8b95 | 66 | return; |
| khaiminhvn | 0:4482075b8b95 | 67 | } |
| khaiminhvn | 2:6ade0fbab4e1 | 68 | else{ |
| khaiminhvn | 2:6ade0fbab4e1 | 69 | *mode = OP_PLACEMENT; |
| khaiminhvn | 2:6ade0fbab4e1 | 70 | return; |
| khaiminhvn | 2:6ade0fbab4e1 | 71 | } |
| khaiminhvn | 0:4482075b8b95 | 72 | t.stop(); |
| khaiminhvn | 0:4482075b8b95 | 73 | return; |
| khaiminhvn | 0:4482075b8b95 | 74 | } |
| khaiminhvn | 0:4482075b8b95 | 75 | } |
| khaiminhvn | 0:4482075b8b95 | 76 | *mode = OP_WSETTING; |
| khaiminhvn | 0:4482075b8b95 | 77 | return; |
| khaiminhvn | 0:4482075b8b95 | 78 | } |
| khaiminhvn | 0:4482075b8b95 | 79 | } |
