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@9:7dd8100b2ba5, 2021-03-24 (annotated)
- Committer:
- khaiminhvn
- Date:
- Wed Mar 24 01:47:27 2021 +0000
- Revision:
- 9:7dd8100b2ba5
- Parent:
- 8:9aaeab58e561
- Child:
- 10:17af93056d39
Added mode ATRACK
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 | 9:7dd8100b2ba5 | 9 | Pushbutton::Pushbutton(PinName bt) : button(bt),buttonInt(bt),button2(bt){} |
| khaiminhvn | 9:7dd8100b2ba5 | 10 | Pushbutton::Pushbutton(PinName bt, int* state, int* flagIn, PinName bt2) : buttonInt(bt),button(bt),button2(bt2){ |
| khaiminhvn | 4:3f905ce43f2b | 11 | flag = flagIn; |
| khaiminhvn | 0:4482075b8b95 | 12 | mode = state; |
| khaiminhvn | 0:4482075b8b95 | 13 | if(INPUT_LOGIC == 0) |
| khaiminhvn | 0:4482075b8b95 | 14 | { |
| khaiminhvn | 0:4482075b8b95 | 15 | buttonInt.fall(callback(this,&Pushbutton::updateMode)); |
| khaiminhvn | 0:4482075b8b95 | 16 | } |
| khaiminhvn | 0:4482075b8b95 | 17 | else |
| khaiminhvn | 0:4482075b8b95 | 18 | { |
| khaiminhvn | 0:4482075b8b95 | 19 | buttonInt.rise(callback(this,&Pushbutton::updateMode)); |
| khaiminhvn | 0:4482075b8b95 | 20 | } |
| khaiminhvn | 0:4482075b8b95 | 21 | } |
| khaiminhvn | 0:4482075b8b95 | 22 | |
| khaiminhvn | 0:4482075b8b95 | 23 | //Methods |
| khaiminhvn | 0:4482075b8b95 | 24 | //read() |
| khaiminhvn | 0:4482075b8b95 | 25 | int Pushbutton::read(){ |
| khaiminhvn | 0:4482075b8b95 | 26 | if(Pushbutton::lastPressed == INPUT_LOGIC && Pushbutton::lastPressed != button) |
| khaiminhvn | 0:4482075b8b95 | 27 | return 0; |
| khaiminhvn | 0:4482075b8b95 | 28 | else if(Pushbutton::lastPressed == INPUT_LOGIC && Pushbutton::lastPressed == button) |
| khaiminhvn | 0:4482075b8b95 | 29 | return 1; |
| khaiminhvn | 0:4482075b8b95 | 30 | |
| khaiminhvn | 0:4482075b8b95 | 31 | wait_us(DEBOUNCE_TIME); |
| khaiminhvn | 0:4482075b8b95 | 32 | |
| khaiminhvn | 0:4482075b8b95 | 33 | Pushbutton::lastPressed = (button == INPUT_LOGIC) ? button : Pushbutton::lastPressed; |
| khaiminhvn | 0:4482075b8b95 | 34 | return (button == INPUT_LOGIC) ? 1 : 0; |
| khaiminhvn | 0:4482075b8b95 | 35 | } |
| khaiminhvn | 0:4482075b8b95 | 36 | |
| khaiminhvn | 9:7dd8100b2ba5 | 37 | //setConnected() |
| khaiminhvn | 9:7dd8100b2ba5 | 38 | void Pushbutton::setConnected(bool con){ |
| khaiminhvn | 9:7dd8100b2ba5 | 39 | connected = con; |
| khaiminhvn | 9:7dd8100b2ba5 | 40 | } |
| khaiminhvn | 9:7dd8100b2ba5 | 41 | |
| khaiminhvn | 0:4482075b8b95 | 42 | //updateMode() |
| khaiminhvn | 0:4482075b8b95 | 43 | void Pushbutton::updateMode() |
| khaiminhvn | 0:4482075b8b95 | 44 | { |
| khaiminhvn | 0:4482075b8b95 | 45 | Timer t; |
| khaiminhvn | 0:4482075b8b95 | 46 | t.start(); |
| khaiminhvn | 0:4482075b8b95 | 47 | |
| khaiminhvn | 0:4482075b8b95 | 48 | wait_us(DEBOUNCE_TIME); |
| khaiminhvn | 0:4482075b8b95 | 49 | if(read()) //If received input |
| khaiminhvn | 0:4482075b8b95 | 50 | { |
| khaiminhvn | 4:3f905ce43f2b | 51 | *flag = 1; |
| khaiminhvn | 0:4482075b8b95 | 52 | while((int)timer_read_s(t) <= TIME_WSETTING) //check if button is held to the threshold |
| khaiminhvn | 0:4482075b8b95 | 53 | { |
| khaiminhvn | 0:4482075b8b95 | 54 | if(buttonInt.read() != INPUT_LOGIC) //check if button is released |
| khaiminhvn | 0:4482075b8b95 | 55 | { |
| khaiminhvn | 0:4482075b8b95 | 56 | if(*mode == OP_NORMAL || *mode == OP_WIND) |
| khaiminhvn | 0:4482075b8b95 | 57 | { |
| khaiminhvn | 0:4482075b8b95 | 58 | *mode = OP_MANUAL1; |
| khaiminhvn | 0:4482075b8b95 | 59 | return; |
| khaiminhvn | 0:4482075b8b95 | 60 | } |
| khaiminhvn | 0:4482075b8b95 | 61 | else if(*mode == OP_MANUAL1) |
| khaiminhvn | 0:4482075b8b95 | 62 | { |
| khaiminhvn | 0:4482075b8b95 | 63 | *mode = OP_MANUAL2; |
| khaiminhvn | 0:4482075b8b95 | 64 | return; |
| khaiminhvn | 0:4482075b8b95 | 65 | } |
| khaiminhvn | 6:8a33efda4eb2 | 66 | else if(*mode == OP_MANUAL2) |
| khaiminhvn | 6:8a33efda4eb2 | 67 | { |
| khaiminhvn | 6:8a33efda4eb2 | 68 | *mode = OP_MANUAL_ALL; |
| khaiminhvn | 6:8a33efda4eb2 | 69 | return; |
| khaiminhvn | 6:8a33efda4eb2 | 70 | } |
| khaiminhvn | 9:7dd8100b2ba5 | 71 | else if(*mode == OP_MANUAL_ALL || *mode == OP_WSETTING || *mode == OP_CONFIRM || *mode == OP_POWER_OFF || *mode == OP_ATRACK) |
| khaiminhvn | 0:4482075b8b95 | 72 | { |
| khaiminhvn | 0:4482075b8b95 | 73 | *mode = OP_NORMAL; |
| khaiminhvn | 0:4482075b8b95 | 74 | return; |
| khaiminhvn | 0:4482075b8b95 | 75 | } |
| khaiminhvn | 5:0417f54d0519 | 76 | else if(*mode == OP_PLACEMENT){ |
| khaiminhvn | 5:0417f54d0519 | 77 | *mode = OP_CONFIRM; |
| khaiminhvn | 5:0417f54d0519 | 78 | return; |
| khaiminhvn | 5:0417f54d0519 | 79 | } |
| khaiminhvn | 7:1dbc0dfc85e0 | 80 | else if(*mode == OP_OVERHEAT){ |
| khaiminhvn | 7:1dbc0dfc85e0 | 81 | return; |
| khaiminhvn | 7:1dbc0dfc85e0 | 82 | } |
| khaiminhvn | 7:1dbc0dfc85e0 | 83 | else if(*mode == OP_OVERHEAT_MAN){ |
| khaiminhvn | 7:1dbc0dfc85e0 | 84 | *mode = OP_OVERHEAT; |
| khaiminhvn | 7:1dbc0dfc85e0 | 85 | return; |
| khaiminhvn | 7:1dbc0dfc85e0 | 86 | } |
| khaiminhvn | 2:6ade0fbab4e1 | 87 | else{ |
| khaiminhvn | 2:6ade0fbab4e1 | 88 | *mode = OP_PLACEMENT; |
| khaiminhvn | 2:6ade0fbab4e1 | 89 | return; |
| khaiminhvn | 2:6ade0fbab4e1 | 90 | } |
| khaiminhvn | 0:4482075b8b95 | 91 | t.stop(); |
| khaiminhvn | 0:4482075b8b95 | 92 | return; |
| khaiminhvn | 0:4482075b8b95 | 93 | } |
| khaiminhvn | 0:4482075b8b95 | 94 | } |
| khaiminhvn | 9:7dd8100b2ba5 | 95 | |
| khaiminhvn | 9:7dd8100b2ba5 | 96 | if(button2.read() && connected) |
| khaiminhvn | 9:7dd8100b2ba5 | 97 | *mode = OP_ATRACK; |
| khaiminhvn | 9:7dd8100b2ba5 | 98 | else |
| khaiminhvn | 9:7dd8100b2ba5 | 99 | *mode = OP_WSETTING; |
| khaiminhvn | 0:4482075b8b95 | 100 | return; |
| khaiminhvn | 0:4482075b8b95 | 101 | } |
| khaiminhvn | 0:4482075b8b95 | 102 | } |
