Minh Nguyen / Pushbutton
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?

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 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 }