Browse Source

按键、led测试

master
Bai 4 years ago
parent
commit
13be8e5f39
  1. 2
      QCPShow.pro.user
  2. 103
      deviceservice.cpp
  3. 12
      deviceservice.h
  4. 6
      main.cpp
  5. 50
      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"?>
<!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>
<data>
<variable>EnvironmentId</variable>

103
deviceservice.cpp

@ -8,10 +8,13 @@
#define WIRING_PIN_LED 4 //GPIO.4
#define WIRING_PIN_KEY 3 //GPIO.3
#define Click_Overtime 50
#define Press_Overtime 150
#define DblClick_Difftime 800
DeviceService::DeviceService(QObject *parent) : QObject(parent)
{
key.flag = None;
key.lastFlag = None;
key.lastState = KEY_Up;
m_ledStatus = 0;
m_keyStatus = 0;
@ -27,12 +30,13 @@ DeviceService::DeviceService(QObject *parent) : QObject(parent)
qDebug() << "pinMode(WIRING_PIN_BTN,INPUT)";
#endif
//按键灯闪烁
timer1.setInterval(1000);
timer1.start();
connect(&timer1,&QTimer::timeout,[=](){
m_ledStatus ^= 1;
ledSet(m_ledStatus);
});
// timer1.start();
// connect(&timer1,&QTimer::timeout,[=](){
// m_ledStatus ^= 1;
// ledSet(m_ledStatus);
// });
timer2.setInterval(50);
timer2.start();
@ -42,11 +46,15 @@ DeviceService::DeviceService(QObject *parent) : QObject(parent)
// m_keyStatus = keyStatus;
// qDebug() << "m_keyStatus " << m_keyStatus;
// }
// key.flag = (KeyFlag)keyDetection();
// if(key.flag != None){
// if(key.flag == Click){
// emit keyClicked();
// }
// }
key.flag = (KeyFlag)keyDetection();
if(key.flag != None){
if(key.flag == Click){
emit keyClicked();
}
emit keyWorked(key.flag);
}
});
}
@ -77,6 +85,7 @@ quint8 DeviceService::keyReadOnce()
quint8 DeviceService::keyDetection()
{
#if 0
key.flag = None; //清空按键标志
quint8 status = keyReadOnce();
if ((status == KEY_Down) && (key.lastState == KEY_Up))
@ -90,4 +99,82 @@ quint8 DeviceService::keyDetection()
}
key.lastState = status;
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 <QTimer>
#include <QTime>
typedef enum{
GPIO_PIN_RESET = 0u,
@ -22,6 +23,7 @@ typedef enum{
typedef struct{
KeyFlag flag;
KeyFlag lastFlag;
quint8 lastState;
}KeyType;
@ -30,17 +32,23 @@ class DeviceService : public QObject
Q_OBJECT
public:
explicit DeviceService(QObject *parent = 0);
int m_ledStatus,m_keyStatus;
QTimer timer1;
private:
KeyType key;
int m_ledStatus,m_keyStatus;
QTimer timer1,timer2;
QTimer timer2;
QTime lastFlagTime, lastStateTime;
signals:
void keyClicked();
void keyDown();
void keyWorked(KeyFlag);
public slots:
void ledSet(int status);
quint8 keyReadOnce();
quint8 keyDetection();
quint8 getbtnstatus();
};
#endif // DEVICESERVICE_H

6
main.cpp

@ -28,7 +28,7 @@ int main(int argc, char *argv[])
DeviceService deviceService;
//创建主窗体
MainWidget w;
MainWidget w(&httpService,&websocketService,&deviceService);
//绑定信号与槽
QObject::connect(&websocketService,&WebsocketService::wsConnectedStatusChanged,
@ -39,6 +39,10 @@ int main(int argc, char *argv[])
&w,&MainWidget::onPatientMergencyStatusChanged);
QObject::connect(&deviceService,&DeviceService::keyClicked,
&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::complexOneKeyStart,&httpService,&HttpService::onComplexOneKeyStart);

50
mainwidget.cpp

@ -7,7 +7,13 @@
QString namelist[] = {"传立春","传立夏","传立秋","传立冬"};
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),
ui(new Ui::MainWidget)
{
@ -61,6 +67,8 @@ MainWidget::MainWidget(QWidget *parent) :
m_curX = 0;
connect(&m_lableScrollTimer,SIGNAL(timeout()),this,SLOT(lableScrollDisplay()));
m_lableScrollTimer.start(10);
this->setCursor(Qt::BlankCursor);
}
MainWidget::~MainWidget()
@ -73,16 +81,20 @@ void MainWidget::updateUi()
// m_curX = 0;//内容超出显示区域时,更新患者信息显示从头开始滚动
//更新statusLabel
// ui->statusLabel->setText(QString("%1 | %2")
// .arg(m_wsConnectedStatus == 0 ? "未连接" : "已连接")
// .arg(m_patientEmergencyInfos.length())
// );
// ui->statusLabel->setText(QString("%1 | %2")
// .arg(m_wsConnectedStatus == 0 ? "未连接" : "已连接")
// .arg(m_patientEmergencyInfos.length())
// );
if(m_wsConnectedStatus){
ui->LEDLabel->setStyleSheet("border-image: url(:/image/1LED_green.png);");
}else{
ui->LEDLabel->setStyleSheet("border-image: url(::/image/1LED_gray.png);");
}
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){
//不显示
@ -135,8 +147,8 @@ void MainWidget::resizeEvent(QResizeEvent *event)
//标题
// 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->LEDLabel->setGeometry(this->width()-120,this->height()-30,20,30);
ui->statusLabel->setGeometry(this->width()-80,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,55,30);
}
void MainWidget::lableScrollDisplay()
@ -180,6 +192,10 @@ void MainWidget::onNewPatientMergencyInfo(QString firstAidId, QString name, QStr
PatientEmergencyInfo *pInfo = new PatientEmergencyInfo(firstAidId,name,content,realCountDownInSeconds);
addPatientToList(pInfo);
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)
@ -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)
{
//1.如果有就删除,以保证同一个病人按两次应该重新开始计时

15
mainwidget.h

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

6
mainwidget.ui

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

Loading…
Cancel
Save