Browse Source

按键、led测试

master
Bai 4 years ago
parent
commit
13be8e5f39
  1. 2
      QCPShow.pro.user
  2. 109
      deviceservice.cpp
  3. 12
      deviceservice.h
  4. 6
      main.cpp
  5. 52
      mainwidget.cpp
  6. 15
      mainwidget.h
  7. 6
      mainwidget.ui

2
QCPShow.pro.user

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.2.1, 2021-10-22T00:22:50. --> <!-- Written by QtCreator 4.2.1, 2021-11-07T20:57:44. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

109
deviceservice.cpp

@ -8,10 +8,13 @@
#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 #define Click_Overtime 50
#define Press_Overtime 150
#define DblClick_Difftime 800
DeviceService::DeviceService(QObject *parent) : QObject(parent) DeviceService::DeviceService(QObject *parent) : QObject(parent)
{ {
key.flag = None; key.flag = None;
key.lastFlag = None;
key.lastState = KEY_Up; key.lastState = KEY_Up;
m_ledStatus = 0; m_ledStatus = 0;
m_keyStatus = 0; m_keyStatus = 0;
@ -27,12 +30,13 @@ DeviceService::DeviceService(QObject *parent) : QObject(parent)
qDebug() << "pinMode(WIRING_PIN_BTN,INPUT)"; qDebug() << "pinMode(WIRING_PIN_BTN,INPUT)";
#endif #endif
//按键灯闪烁
timer1.setInterval(1000); timer1.setInterval(1000);
timer1.start(); // timer1.start();
connect(&timer1,&QTimer::timeout,[=](){ // connect(&timer1,&QTimer::timeout,[=](){
m_ledStatus ^= 1; // m_ledStatus ^= 1;
ledSet(m_ledStatus); // ledSet(m_ledStatus);
}); // });
timer2.setInterval(50); timer2.setInterval(50);
timer2.start(); timer2.start();
@ -42,12 +46,16 @@ DeviceService::DeviceService(QObject *parent) : QObject(parent)
// m_keyStatus = keyStatus; // m_keyStatus = keyStatus;
// qDebug() << "m_keyStatus " << m_keyStatus; // qDebug() << "m_keyStatus " << m_keyStatus;
// } // }
key.flag = (KeyFlag)keyDetection(); // key.flag = (KeyFlag)keyDetection();
if(key.flag != None){ // if(key.flag != None){
if(key.flag == Click){ // if(key.flag == Click){
emit keyClicked(); // emit keyClicked();
} // }
} // }
key.flag = (KeyFlag)keyDetection();
if(key.flag != None){
emit keyWorked(key.flag);
}
}); });
} }
@ -77,6 +85,7 @@ quint8 DeviceService::keyReadOnce()
quint8 DeviceService::keyDetection() quint8 DeviceService::keyDetection()
{ {
#if 0
key.flag = None; //清空按键标志 key.flag = None; //清空按键标志
quint8 status = keyReadOnce(); quint8 status = keyReadOnce();
if ((status == KEY_Down) && (key.lastState == KEY_Up)) if ((status == KEY_Down) && (key.lastState == KEY_Up))
@ -90,4 +99,82 @@ quint8 DeviceService::keyDetection()
} }
key.lastState = status; key.lastState = status;
return key.flag; return key.flag;
#else
key.flag = None; //清空按键标志(行为)
//获取当前按键状态
quint8 status = getbtnstatus();//获取当前按键状态********注意替换为防抖后的按键函数getbtnstatus()
//判定标志行为
if(status == KEY_Up)
{
if(key.lastState == KEY_Up)
{
//无意义
}else if(key.lastState == KEY_Down)
{
int difftime = QTime::currentTime().secsTo(lastStateTime);
if(difftime >= Press_Overtime)
{
key.flag = Press;
}else if(difftime >= Click_Overtime)
{
key.flag = Click;
}else
{
//按键时间过短,无效
}
}else
{
}
}
//判定组合行为
if(key.flag != None)
{
if(key.flag == Click)
{
if(key.lastFlag == Click && (QTime::currentTime().secsTo(lastFlagTime)) >= DblClick_Difftime)
{
key.flag = Dbl_Click;
}else if(key.lastFlag == Dbl_Click && (QTime::currentTime().secsTo(lastFlagTime)) >= DblClick_Difftime)
{
key.flag = Tri_Click;
}
}
}
if(key.flag != key.lastFlag)
{
key.lastFlag = key.flag;
lastFlagTime = QTime::currentTime();
}
if(status != key.lastState)
{
key.lastState = status;
lastStateTime = QTime::currentTime();
if(status == KEY_Down)
{
emit keyDown();//发送至mainwidget,用于记录按下时操作的患者是哪个
}
}
return key.flag;
#endif
}
quint8 DeviceService::getbtnstatus()
{
quint8 keyRead = keyReadOnce();
if(keyRead == KEY_Down)
{
uint16_t i = Click_Overtime;
while(i--);
if(keyRead == keyReadOnce())
{
return keyRead;
}
}
} }

12
deviceservice.h

@ -3,6 +3,7 @@
#include <QObject> #include <QObject>
#include <QTimer> #include <QTimer>
#include <QTime>
typedef enum{ typedef enum{
GPIO_PIN_RESET = 0u, GPIO_PIN_RESET = 0u,
@ -22,6 +23,7 @@ typedef enum{
typedef struct{ typedef struct{
KeyFlag flag; KeyFlag flag;
KeyFlag lastFlag;
quint8 lastState; quint8 lastState;
}KeyType; }KeyType;
@ -30,17 +32,23 @@ class DeviceService : public QObject
Q_OBJECT Q_OBJECT
public: public:
explicit DeviceService(QObject *parent = 0); explicit DeviceService(QObject *parent = 0);
int m_ledStatus,m_keyStatus;
QTimer timer1;
private: private:
KeyType key; KeyType key;
int m_ledStatus,m_keyStatus; QTimer timer2;
QTimer timer1,timer2; QTime lastFlagTime, lastStateTime;
signals: signals:
void keyClicked(); void keyClicked();
void keyDown();
void keyWorked(KeyFlag);
public slots: public slots:
void ledSet(int status); void ledSet(int status);
quint8 keyReadOnce(); quint8 keyReadOnce();
quint8 keyDetection(); quint8 keyDetection();
quint8 getbtnstatus();
}; };
#endif // DEVICESERVICE_H #endif // DEVICESERVICE_H

6
main.cpp

@ -28,7 +28,7 @@ int main(int argc, char *argv[])
DeviceService deviceService; DeviceService deviceService;
//创建主窗体 //创建主窗体
MainWidget w; MainWidget w(&httpService,&websocketService,&deviceService);
//绑定信号与槽 //绑定信号与槽
QObject::connect(&websocketService,&WebsocketService::wsConnectedStatusChanged, QObject::connect(&websocketService,&WebsocketService::wsConnectedStatusChanged,
@ -39,6 +39,10 @@ int main(int argc, char *argv[])
&w,&MainWidget::onPatientMergencyStatusChanged); &w,&MainWidget::onPatientMergencyStatusChanged);
QObject::connect(&deviceService,&DeviceService::keyClicked, QObject::connect(&deviceService,&DeviceService::keyClicked,
&w,&MainWidget::onKeyClicked); &w,&MainWidget::onKeyClicked);
QObject::connect(&deviceService,&DeviceService::keyDown,
&w,&MainWidget::onKeyDown);
QObject::connect(&deviceService,&DeviceService::keyWorked,
&w,&MainWidget::onKeyWorked);
QObject::connect(&w,&MainWidget::statusChanged,&httpService,&HttpService::updateStatus); QObject::connect(&w,&MainWidget::statusChanged,&httpService,&HttpService::updateStatus);
QObject::connect(&w,&MainWidget::complexOneKeyStart,&httpService,&HttpService::onComplexOneKeyStart); QObject::connect(&w,&MainWidget::complexOneKeyStart,&httpService,&HttpService::onComplexOneKeyStart);

52
mainwidget.cpp

@ -7,7 +7,13 @@
QString namelist[] = {"传立春","传立夏","传立秋","传立冬"}; QString namelist[] = {"传立春","传立夏","传立秋","传立冬"};
qint8 gindex = 0; qint8 gindex = 0;
MainWidget::MainWidget(QWidget *parent) : MainWidget::MainWidget(HttpService *httpService,
WebsocketService *websocketService,
DeviceService *deviceService,
QWidget *parent) :
m_httpService(httpService),
m_websocketService(websocketService),
m_deviceService(deviceService),
QWidget(parent), QWidget(parent),
ui(new Ui::MainWidget) ui(new Ui::MainWidget)
{ {
@ -61,6 +67,8 @@ MainWidget::MainWidget(QWidget *parent) :
m_curX = 0; m_curX = 0;
connect(&m_lableScrollTimer,SIGNAL(timeout()),this,SLOT(lableScrollDisplay())); connect(&m_lableScrollTimer,SIGNAL(timeout()),this,SLOT(lableScrollDisplay()));
m_lableScrollTimer.start(10); m_lableScrollTimer.start(10);
this->setCursor(Qt::BlankCursor);
} }
MainWidget::~MainWidget() MainWidget::~MainWidget()
@ -73,16 +81,20 @@ void MainWidget::updateUi()
// m_curX = 0;//内容超出显示区域时,更新患者信息显示从头开始滚动 // m_curX = 0;//内容超出显示区域时,更新患者信息显示从头开始滚动
//更新statusLabel //更新statusLabel
// ui->statusLabel->setText(QString("%1 | %2") // ui->statusLabel->setText(QString("%1 | %2")
// .arg(m_wsConnectedStatus == 0 ? "未连接" : "已连接") // .arg(m_wsConnectedStatus == 0 ? "未连接" : "已连接")
// .arg(m_patientEmergencyInfos.length()) // .arg(m_patientEmergencyInfos.length())
// ); // );
if(m_wsConnectedStatus){ if(m_wsConnectedStatus){
ui->LEDLabel->setStyleSheet("border-image: url(:/image/1LED_green.png);"); ui->LEDLabel->setStyleSheet("border-image: url(:/image/1LED_green.png);");
}else{ }else{
ui->LEDLabel->setStyleSheet("border-image: url(::/image/1LED_gray.png);"); ui->LEDLabel->setStyleSheet("border-image: url(::/image/1LED_gray.png);");
} }
ui->statusLabel->setText(QString::number(m_patientEmergencyInfos.length())); if(m_patientEmergencyInfos.length() == 0){
ui->statusLabel->setText(QString::number(m_patientEmergencyInfos.length()));
}else{
ui->statusLabel->setText(QString::number(m_patientIndex+1) + "/" + QString::number(m_patientEmergencyInfos.length()));
}
if(m_patientEmergencyInfos.length() == 0){ if(m_patientEmergencyInfos.length() == 0){
//不显示 //不显示
@ -135,8 +147,8 @@ void MainWidget::resizeEvent(QResizeEvent *event)
//标题 //标题
// ui->textLabel->setGeometry(0,0,this->width(),(this->height()-30)/2); // ui->textLabel->setGeometry(0,0,this->width(),(this->height()-30)/2);
ui->countdownLabel->setGeometry(0,(this->height()-30)/2,this->width(),(this->height()-30)/2); ui->countdownLabel->setGeometry(0,(this->height()-30)/2,this->width(),(this->height()-30)/2);
ui->LEDLabel->setGeometry(this->width()-120,this->height()-30,20,30); ui->LEDLabel->setGeometry(this->width()-110,this->height()-30,30,30);
ui->statusLabel->setGeometry(this->width()-80,this->height()-30,20,30); ui->statusLabel->setGeometry(this->width()-80,this->height()-30,55,30);
} }
void MainWidget::lableScrollDisplay() void MainWidget::lableScrollDisplay()
@ -180,6 +192,10 @@ void MainWidget::onNewPatientMergencyInfo(QString firstAidId, QString name, QStr
PatientEmergencyInfo *pInfo = new PatientEmergencyInfo(firstAidId,name,content,realCountDownInSeconds); PatientEmergencyInfo *pInfo = new PatientEmergencyInfo(firstAidId,name,content,realCountDownInSeconds);
addPatientToList(pInfo); addPatientToList(pInfo);
qDebug() << "MainWidget::onNewPatientMergencyInfo " << firstAidId << name << content << realCountDownInSeconds; qDebug() << "MainWidget::onNewPatientMergencyInfo " << firstAidId << name << content << realCountDownInSeconds;
m_deviceService->timer1.start();
m_deviceService->m_ledStatus ^= 1;
m_deviceService->ledSet(m_deviceService->m_ledStatus);
} }
void MainWidget::onPatientMergencyStatusChanged(QString firstAidId,QString time, QString status) void MainWidget::onPatientMergencyStatusChanged(QString firstAidId,QString time, QString status)
@ -213,6 +229,26 @@ void MainWidget::onKeyClicked()
} }
} }
void MainWidget::onKeyDown()
{
keyDownPInfo = m_patientEmergencyInfos[m_patientIndex];
}
void MainWidget::onKeyWorked(KeyFlag flag)
{
m_deviceService->timer1.stop();
if(flag == Click){
m_deviceService->m_ledStatus = 0;
m_deviceService->ledSet(m_deviceService->m_ledStatus);
}else if(flag == Dbl_Click){
updateUi();
}else if(flag == Press){
deletePatientFromList(keyDownPInfo->id);
m_deviceService->m_ledStatus = 1;
m_deviceService->ledSet(m_deviceService->m_ledStatus);
}
}
void MainWidget::addPatientToList(PatientEmergencyInfo *info) void MainWidget::addPatientToList(PatientEmergencyInfo *info)
{ {
//1.如果有就删除,以保证同一个病人按两次应该重新开始计时 //1.如果有就删除,以保证同一个病人按两次应该重新开始计时

15
mainwidget.h

@ -5,6 +5,9 @@
#include "patientemergencyinfo.h" #include "patientemergencyinfo.h"
#include <QTimer> #include <QTimer>
#include <QtWidgets> #include <QtWidgets>
#include "httpservice.h"
#include "websocketservice.h"
#include "deviceservice.h"
namespace Ui { namespace Ui {
class MainWidget; class MainWidget;
@ -15,13 +18,20 @@ class MainWidget : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit MainWidget(QWidget *parent = 0); explicit MainWidget(HttpService *httpService,
WebsocketService *websocketService,
DeviceService *deviceService,
QWidget *parent = 0);
~MainWidget(); ~MainWidget();
void paintEvent(QPaintEvent *event); void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event); void resizeEvent(QResizeEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event); void mouseDoubleClickEvent(QMouseEvent *event);
private: private:
HttpService *m_httpService;
WebsocketService *m_websocketService;
DeviceService *m_deviceService;
Ui::MainWidget *ui; Ui::MainWidget *ui;
QList<PatientEmergencyInfo *> m_patientEmergencyInfos; QList<PatientEmergencyInfo *> m_patientEmergencyInfos;
qint32 m_maxPatientNum,m_switchPatientInterval; qint32 m_maxPatientNum,m_switchPatientInterval;
@ -33,6 +43,7 @@ private:
QTimer m_lableScrollTimer; QTimer m_lableScrollTimer;
int m_width, m_height, m_curX, m_y; int m_width, m_height, m_curX, m_y;
bool isFenzhen; bool isFenzhen;
PatientEmergencyInfo *keyDownPInfo;
public slots: public slots:
void updateUi(); void updateUi();
@ -44,6 +55,8 @@ public slots:
void lableScrollDisplay(); void lableScrollDisplay();
void onKeyClicked(); void onKeyClicked();
void onKeyDown();
void onKeyWorked(KeyFlag flag);
signals: signals:
void statusChanged(QString firstAidId,QString status); void statusChanged(QString firstAidId,QString status);

6
mainwidget.ui

@ -48,9 +48,9 @@
<widget class="QLabel" name="statusLabel"> <widget class="QLabel" name="statusLabel">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>950</x> <x>1050</x>
<y>390</y> <y>390</y>
<width>151</width> <width>51</width>
<height>21</height> <height>21</height>
</rect> </rect>
</property> </property>
@ -63,7 +63,7 @@
<string/> <string/>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="LEDLabel"> <widget class="QLabel" name="LEDLabel">

Loading…
Cancel
Save