Browse Source

添加按键检测

pull/4/head
zhangsan 4 years ago
parent
commit
50c0af4878
  1. 99
      deviceservice.cpp
  2. 7
      deviceservice.h
  3. 3
      main.cpp
  4. 6
      mainwidget.cpp
  5. 2
      mainwidget.h

99
deviceservice.cpp

@ -7,11 +7,12 @@
#define WIRING_PIN_LED 4 //GPIO.4 #define WIRING_PIN_LED 4 //GPIO.4
#define WIRING_PIN_KEY 3 //GPIO.3 #define WIRING_PIN_KEY 3 //GPIO.3
#define Click_Overtime 50
DeviceService::DeviceService(QObject *parent) : QObject(parent) DeviceService::DeviceService(QObject *parent) : QObject(parent)
{ {
key.flag = None; key.flag = None;
key.lastState = None; key.lastState = KEY_Up;
m_ledStatus = 0; m_ledStatus = 0;
m_keyStatus = 0; m_keyStatus = 0;
@ -33,13 +34,19 @@ DeviceService::DeviceService(QObject *parent) : QObject(parent)
ledSet(m_ledStatus); ledSet(m_ledStatus);
}); });
timer2.setInterval(10); timer2.setInterval(50);
timer2.start(); timer2.start();
connect(&timer2,&QTimer::timeout,[=](){ connect(&timer2,&QTimer::timeout,[=](){
quint8 keyStatus = keyReadOnce(); // quint8 keyStatus = keyReadOnce();
if(keyStatus != m_keyStatus){ // if(keyStatus != m_keyStatus){
m_keyStatus = keyStatus; // m_keyStatus = keyStatus;
qDebug() << "m_keyStatus " << m_keyStatus; // qDebug() << "m_keyStatus " << m_keyStatus;
// }
key.flag = (KeyFlag)keyDetection();
if(key.flag != None){
if(key.flag == Click){
emit keyClicked();
}
} }
}); });
} }
@ -53,6 +60,11 @@ void DeviceService::ledSet(int status)
#endif #endif
} }
/**
* @brief DeviceService::keyReadOnce
* 0,1
* @return
*/
quint8 DeviceService::keyReadOnce() quint8 DeviceService::keyReadOnce()
{ {
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX
@ -63,62 +75,19 @@ quint8 DeviceService::keyReadOnce()
#endif #endif
} }
//quint8 DeviceService::keyDetection() quint8 DeviceService::keyDetection()
//{ {
// key.flag = None; //清空按键标志 key.flag = None; //清空按键标志
// if ((keyReadOnce() == KEY_Up) && (key.lastState == KEY_Down)) quint8 status = keyReadOnce();
// { if ((status == KEY_Down) && (key.lastState == KEY_Up))
// uint16_t i = Click_Overtime; {
// uint16_t j = Press_Overtime; uint16_t i = Click_Overtime;
// key.flag = Click; //先确定按键标志为单击 while(i--);
// key.lastState = KEY_Up; status = keyReadOnce();
// //判断是否为长按 if(status == KEY_Down){
// while ((tls_gpio_read(gpio_pin) == KEY_Up)&&(j--)) key.flag = Click; //先确定按键标志为单击
// { }
// //printf("j = %d\r\n", j); }
// if (j == 1) key.lastState = status;
// { return key.flag;
// KEY3.KEY_Flag = Press; //按键标志为长按 }
// KEY3.KEY_LastState = KEY_Up;
// break;
// }
// delay_ms(50);
// }
// //在确定标志已经为单击的前提下,判断是否为双击
// if (KEY3.KEY_Flag == Click)
// {
// while (i--)
// {
// if ((tls_gpio_read(gpio_pin) == KEY_Up))
// {
// KEY3.KEY_Flag = Dbl_Click;
// KEY3.KEY_LastState = KEY_Up;
// while (tls_gpio_read(gpio_pin) == KEY_Up);
// break;
// }
// delay_ms(50);
// }
// }
// //在确定标志为已经为双击的前提下,判断是否为三击
// if (KEY3.KEY_Flag == Dbl_Click)
// {
// while (i--)
// {
// if (tls_gpio_read(gpio_pin) == KEY_Up)
// {
// KEY3.KEY_Flag = Tri_Click;
// KEY3.KEY_LastState = KEY_Up;
// while (tls_gpio_read(gpio_pin) == KEY_Up);
// break;
// }
// delay_ms(50);
// }
// }
// }
// //将按键置为松开状态,以供下一次检测
// if (tls_gpio_read(gpio_pin) == KEY_Down)
// {
// KEY3.KEY_LastState = KEY_Down;
// }
// return KEY3.KEY_Flag;
//}

7
deviceservice.h

@ -17,8 +17,8 @@ typedef enum{
Press = (uint8_t)4, Press = (uint8_t)4,
}KeyFlag; }KeyFlag;
#define KEY_Up GPIO_PIN_SET #define KEY_Up 1
#define KEY_Down GPIO_PIN_RESET #define KEY_Down 0
typedef struct{ typedef struct{
KeyFlag flag; KeyFlag flag;
@ -35,11 +35,12 @@ private:
int m_ledStatus,m_keyStatus; int m_ledStatus,m_keyStatus;
QTimer timer1,timer2; QTimer timer1,timer2;
signals: signals:
void keyClicked();
public slots: public slots:
void ledSet(int status); void ledSet(int status);
quint8 keyReadOnce(); quint8 keyReadOnce();
//quint8 keyDetection(); quint8 keyDetection();
}; };
#endif // DEVICESERVICE_H #endif // DEVICESERVICE_H

3
main.cpp

@ -34,9 +34,12 @@ int main(int argc, char *argv[])
&w,&MainWidget::onNewPatientMergencyInfo); &w,&MainWidget::onNewPatientMergencyInfo);
QObject::connect(&websocketService,&WebsocketService::patientMergencyStatusChanged, QObject::connect(&websocketService,&WebsocketService::patientMergencyStatusChanged,
&w,&MainWidget::onPatientMergencyStatusChanged); &w,&MainWidget::onPatientMergencyStatusChanged);
QObject::connect(&deviceService,&DeviceService::keyClicked,
&w,&MainWidget::onKeyClicked);
QObject::connect(&w,&MainWidget::statusChanged,&httpService,&HttpService::updateStatus); QObject::connect(&w,&MainWidget::statusChanged,&httpService,&HttpService::updateStatus);
w.show(); w.show();
// w.showFullScreen(); // w.showFullScreen();

6
mainwidget.cpp

@ -181,6 +181,12 @@ void MainWidget::onPatientMergencyStatusChanged(QString firstAidId,QString time,
} }
} }
void MainWidget::onKeyClicked()
{
// emit onKeyStart();
qDebug() << "Key Clicked";
}
void MainWidget::addPatientToList(PatientEmergencyInfo *info) void MainWidget::addPatientToList(PatientEmergencyInfo *info)
{ {
//1.如果有就删除,以保证同一个病人按两次应该重新开始计时 //1.如果有就删除,以保证同一个病人按两次应该重新开始计时

2
mainwidget.h

@ -41,6 +41,8 @@ public slots:
void deletePatientFromList(QString firstAidId); void deletePatientFromList(QString firstAidId);
void lableScrollDisplay(); void lableScrollDisplay();
void onKeyClicked();
signals: signals:
void statusChanged(QString firstAidId,QString status); void statusChanged(QString firstAidId,QString status);
}; };

Loading…
Cancel
Save