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

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