Minh Nguyen / Pushbutton
Committer:
jump_man
Date:
Wed Mar 17 20:09:13 2021 +0000
Revision:
8:9aaeab58e561
Parent:
7:1dbc0dfc85e0
Child:
9:7dd8100b2ba5
Added mode

Who changed what in which revision?

UserRevisionLine numberNew 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 6:8a33efda4eb2 65 else if(*mode == OP_MANUAL2)
khaiminhvn 6:8a33efda4eb2 66 {
khaiminhvn 6:8a33efda4eb2 67 *mode = OP_MANUAL_ALL;
khaiminhvn 6:8a33efda4eb2 68 return;
khaiminhvn 6:8a33efda4eb2 69 }
jump_man 8:9aaeab58e561 70 else if(*mode == OP_MANUAL_ALL || *mode == OP_WSETTING || *mode == OP_CONFIRM || *mode == OP_POWER_OFF)
khaiminhvn 0:4482075b8b95 71 {
khaiminhvn 0:4482075b8b95 72 *mode = OP_NORMAL;
khaiminhvn 0:4482075b8b95 73 return;
khaiminhvn 0:4482075b8b95 74 }
khaiminhvn 5:0417f54d0519 75 else if(*mode == OP_PLACEMENT){
khaiminhvn 5:0417f54d0519 76 *mode = OP_CONFIRM;
khaiminhvn 5:0417f54d0519 77 return;
khaiminhvn 5:0417f54d0519 78 }
khaiminhvn 7:1dbc0dfc85e0 79 else if(*mode == OP_OVERHEAT){
khaiminhvn 7:1dbc0dfc85e0 80 return;
khaiminhvn 7:1dbc0dfc85e0 81 }
khaiminhvn 7:1dbc0dfc85e0 82 else if(*mode == OP_OVERHEAT_MAN){
khaiminhvn 7:1dbc0dfc85e0 83 *mode = OP_OVERHEAT;
khaiminhvn 7:1dbc0dfc85e0 84 return;
khaiminhvn 7:1dbc0dfc85e0 85 }
khaiminhvn 2:6ade0fbab4e1 86 else{
khaiminhvn 2:6ade0fbab4e1 87 *mode = OP_PLACEMENT;
khaiminhvn 2:6ade0fbab4e1 88 return;
khaiminhvn 2:6ade0fbab4e1 89 }
khaiminhvn 0:4482075b8b95 90 t.stop();
khaiminhvn 0:4482075b8b95 91 return;
khaiminhvn 0:4482075b8b95 92 }
khaiminhvn 0:4482075b8b95 93 }
khaiminhvn 0:4482075b8b95 94 *mode = OP_WSETTING;
khaiminhvn 0:4482075b8b95 95 return;
khaiminhvn 0:4482075b8b95 96 }
khaiminhvn 0:4482075b8b95 97 }