11/28
This commit is contained in:
		
							parent
							
								
									9b6889d259
								
							
						
					
					
						commit
						80bbc13c78
					
				| @ -1,10 +1,11 @@ | ||||
| import QtQuick 2.0 | ||||
| import TcpSocket 2.0 | ||||
| import BCIManager 2.0 | ||||
| 
 | ||||
| Item { | ||||
|     property int hitIndex: -1 | ||||
|     property bool bStimulate: false | ||||
|     property int responseTime: 10*1000 | ||||
|     property int responseTime: 10 | ||||
|     property bool bTest: true | ||||
|     property bool bConnect: false; | ||||
| 
 | ||||
| @ -25,7 +26,20 @@ Item { | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R12.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R13.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R14.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R15.png" | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R15.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R14.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R13.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R12.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R11.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R10.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R09.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R08.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R07.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R06.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R05.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R04.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R03.png", | ||||
|              "qrc:/DependFile/Source/brainTrain/upTest/upper_stretch_R02.png" | ||||
|          ] | ||||
| 
 | ||||
|     property int currentIndexTwelevHz: 0 | ||||
| @ -120,7 +134,7 @@ Item { | ||||
| 
 | ||||
|     Timer { | ||||
|         id: hitTimer | ||||
|         interval: responseTime; | ||||
|         interval: responseTime*1000; | ||||
|         repeat: false | ||||
|         onTriggered: { | ||||
|             clearHit(); | ||||
| @ -142,14 +156,17 @@ Item { | ||||
|         { | ||||
|             ssvepTenHzTimer.start(); | ||||
|             hitTimer.start(); | ||||
|             bci.startTrain(0,responseTime); | ||||
|         }else if(index === "1") | ||||
|         { | ||||
|             ssvepTwelveHzTimer.start(); | ||||
|             hitTimer.start(); | ||||
|             bci.startTrain(1,responseTime); | ||||
|         }else if(index === "2") | ||||
|         { | ||||
|             ssvepFifteenHzTimer.start(); | ||||
|             hitTimer.start(); | ||||
|             bci.startTrain(2,responseTime); | ||||
|         }else | ||||
|         { | ||||
|             return; | ||||
| @ -172,7 +189,6 @@ Item { | ||||
|     } | ||||
| 
 | ||||
|     function onExit(){ | ||||
|         console.log("1222222222222222"); | ||||
|         if(bConnect) | ||||
|         { | ||||
|             clientSocket.writeBytes(getIntArr("2")); | ||||
| @ -187,7 +203,7 @@ Item { | ||||
| 
 | ||||
|     Component.onCompleted: | ||||
|     { | ||||
|         //BCIManager.signalQmlStopLinkerPrograme.connect(onExit); | ||||
|         bci.initTrain(); | ||||
|     } | ||||
|     TcpSocket{ | ||||
|         id: clientSocket | ||||
| @ -228,6 +244,10 @@ Item { | ||||
|             console.info("Client socket disconnected") | ||||
|         } | ||||
|     } | ||||
|     BCIManager | ||||
|     { | ||||
|         id:bci; | ||||
|     } | ||||
| 
 | ||||
|     Rectangle{ | ||||
|             anchors.top: parent.top | ||||
| @ -356,7 +376,7 @@ Item { | ||||
|                        anchors.bottom: parent.bottom | ||||
|                        Timer { | ||||
|                            id: ssvepTenHzTimer | ||||
|                            interval: 300; | ||||
|                            interval: 70; | ||||
|                            repeat: true | ||||
|                            onTriggered: { | ||||
|                                currentIndexTenHz = (currentIndexTenHz + 1) % imageFilesTenHz.length; | ||||
| @ -726,7 +746,7 @@ Item { | ||||
|             { | ||||
|                 anchors.fill: parent | ||||
|                 onClicked: { | ||||
|                     ssvepHit(0); | ||||
|                     ssvepHit("0"); | ||||
|                     stopStimulate(); | ||||
|                 } | ||||
|             } | ||||
| @ -764,7 +784,7 @@ Item { | ||||
|             { | ||||
|                 anchors.fill: parent | ||||
|                 onClicked: { | ||||
|                     ssvepHit(1); | ||||
|                     ssvepHit("1"); | ||||
|                     stopStimulate(); | ||||
|                 } | ||||
|             } | ||||
| @ -802,7 +822,7 @@ Item { | ||||
|             { | ||||
|                 anchors.fill: parent | ||||
|                 onClicked: { | ||||
|                     ssvepHit(2); | ||||
|                     ssvepHit("2"); | ||||
|                     stopStimulate(); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @ -6,7 +6,23 @@ | ||||
| BCIManager::BCIManager(QObject *parent) | ||||
|     : QObject{parent} | ||||
| { | ||||
|     heartTimer = new QTimer(); | ||||
|     heartTimer->setInterval(1000); | ||||
|     heartTimer->start(); | ||||
|     trainTimer = new QTimer(); | ||||
|     connect(heartTimer, SIGNAL(timeout()), this, SLOT(slotHeartTimer())); | ||||
|     connect(trainTimer, SIGNAL(timeout()), this, SLOT(slotTrainTimer())); | ||||
| 
 | ||||
|     m_st_bicycleParam.trainMode = 0; //被动
 | ||||
|     m_st_bicycleParam.spasmSwitch = 1; //开启
 | ||||
|     m_st_bicycleParam.spasmLevel = 1; //默认一级
 | ||||
|     m_st_bicycleParam.configPower = 0; //默认低
 | ||||
|     m_st_bicycleParam.switchDirectonTime = 10; //换向时间默认10
 | ||||
|     m_st_bicycleParam.phaseValue = 0; //协同相位值
 | ||||
|     m_st_bicycleParam.direction = 1; //方向正向
 | ||||
|     m_st_bicycleParam.speed = 10; //速度 10
 | ||||
|     m_st_bicycleParam.resistance = 10; //阻力 Nm  0~20挡
 | ||||
|     m_st_bicycleParam.spasmType = 0; //默认逆向
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| @ -51,6 +67,34 @@ bool BCIManager::startLinkerPrograme() | ||||
|     m_pCmd->start(strCmd); | ||||
| } | ||||
| 
 | ||||
| void BCIManager::initTrain() | ||||
| { | ||||
|     if(nullptr == heartTimer) | ||||
|     { | ||||
|         heartTimer = new QTimer(); | ||||
|         heartTimer->setInterval(1000); | ||||
|         heartTimer->start(); | ||||
|         connect(heartTimer, SIGNAL(timeout()), this, SLOT(slotHeartTimer())); | ||||
|     } | ||||
| 
 | ||||
|     if(nullptr == trainTimer) | ||||
|     { | ||||
|         trainTimer = new QTimer(); | ||||
|         connect(trainTimer, SIGNAL(timeout()), this, SLOT(slotTrainTimer())); | ||||
| 
 | ||||
|         m_st_bicycleParam.trainMode = 0; //被动
 | ||||
|         m_st_bicycleParam.spasmSwitch = 1; //开启
 | ||||
|         m_st_bicycleParam.spasmLevel = 1; //默认一级
 | ||||
|         m_st_bicycleParam.configPower = 0; //默认低
 | ||||
|         m_st_bicycleParam.switchDirectonTime = 10; //换向时间默认10
 | ||||
|         m_st_bicycleParam.phaseValue = 0; //协同相位值
 | ||||
|         m_st_bicycleParam.direction = 1; //方向正向
 | ||||
|         m_st_bicycleParam.speed = 10; //速度 10
 | ||||
|         m_st_bicycleParam.resistance = 10; //阻力 Nm  0~20挡
 | ||||
|         m_st_bicycleParam.spasmType = 0; //默认逆向
 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void BCIManager::slotLinkerProgrameReadyReadStandardOutput() | ||||
| { | ||||
|     if(m_pCmd) | ||||
| @ -66,3 +110,82 @@ void BCIManager::slotLinkerProgrameReadyReadStandardError() | ||||
|         qDebug() << m_pCmd->readAllStandardError(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void BCIManager::slotHeartTimer() | ||||
| { | ||||
|     //qDebug()<<"上位机发送心跳";
 | ||||
|     CCommunicateAPI::getInstance()->sendHeartBeat(); | ||||
|     static int num = 0; | ||||
|     ++num; | ||||
|     if(num > 3) | ||||
|     { | ||||
|         num = 0; | ||||
|         QPixmap pixmap; | ||||
|         if(heartCount < 1) | ||||
|         { | ||||
| 
 | ||||
| 
 | ||||
|         } | ||||
|         else | ||||
|         { | ||||
| 
 | ||||
|         } | ||||
|         if(heartCount >= 3) | ||||
|         { | ||||
|             heartCount = 0; | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void BCIManager::slotTrainTimer() | ||||
| { | ||||
|     stopTrain(); | ||||
| } | ||||
| 
 | ||||
| void BCIManager::startTrain(int Part, int Time) | ||||
| { | ||||
|     initTrain(); | ||||
|     if(trainTimer->isActive()) | ||||
|     { | ||||
|         stopTrain(); | ||||
|     } | ||||
|     trainTimer->setInterval(Time * 1000); | ||||
|     trainTimer->start(); | ||||
|     //状态控制 0-停止 1启动 2-暂停 3-继续
 | ||||
|     m_st_bicycleParam.controlState = 1; | ||||
|     m_st_bicycleParam.bodyPart = Part; //训练部位 0-上肢 1-下肢 2-四肢 3-垂直上肢
 | ||||
|     m_st_bicycleParam.trainTime = 120; | ||||
|     CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); | ||||
| 
 | ||||
| } | ||||
| void BCIManager::stopTrain() | ||||
| { | ||||
|     if(trainTimer) | ||||
|     { | ||||
|         if(trainTimer->isActive()) | ||||
|         { | ||||
|             trainTimer->stop(); | ||||
|         } | ||||
|         m_st_bicycleParam.controlState = 0; | ||||
|         CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); | ||||
|     } | ||||
| } | ||||
| void BCIManager::pauseTrain() | ||||
| { | ||||
|     if(trainTimer) | ||||
|     { | ||||
|         trainTimer->stop(); | ||||
|         m_st_bicycleParam.controlState = 2; | ||||
|         CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); | ||||
|     } | ||||
| } | ||||
| void BCIManager::continueTrain() | ||||
| { | ||||
|     if(trainTimer) | ||||
|     { | ||||
|         trainTimer->start(); | ||||
|         m_st_bicycleParam.controlState = 3; | ||||
|         CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -4,6 +4,8 @@ | ||||
| #include <QObject> | ||||
| #include <QProcess> | ||||
| #include "QmlTcpSocket/TcpSocket.h" | ||||
| #include "ccommunicateapi.h" | ||||
| #include <QTimer> | ||||
| 
 | ||||
| class BCIManager : public QObject | ||||
| { | ||||
| @ -20,21 +22,40 @@ public: | ||||
|     static void registerQMLType() | ||||
|     { | ||||
|         qmlRegisterType<QMLTcpSockets::TcpSocket>("TcpSocket", 2, 0, "TcpSocket"); | ||||
|         qmlRegisterType<BCIManager>("BCIManager", 2, 0, "BCIManager"); | ||||
|     } | ||||
|     //启动Linker工具
 | ||||
|     bool startLinkerPrograme(); | ||||
| 
 | ||||
| 
 | ||||
|     Q_INVOKABLE void initTrain(); | ||||
|     Q_INVOKABLE void startTrain(int Part, int Time); | ||||
|     Q_INVOKABLE void stopTrain(); | ||||
|     Q_INVOKABLE void pauseTrain(); | ||||
|     Q_INVOKABLE void continueTrain(); | ||||
| 
 | ||||
| private slots: | ||||
|     //Linker程序的标准输出
 | ||||
|     void slotLinkerProgrameReadyReadStandardOutput(); | ||||
|     //Linker程序的错误输出
 | ||||
|     void slotLinkerProgrameReadyReadStandardError(); | ||||
| 
 | ||||
|     //下位机心跳包
 | ||||
|     void slotHeartTimer(); | ||||
|     //下位机心训练计时停止
 | ||||
|     void slotTrainTimer(); | ||||
| 
 | ||||
| signals: | ||||
|     void signalQmlStopLinkerPrograme(); | ||||
| 
 | ||||
| private: | ||||
|     QProcess *m_pCmd = nullptr; | ||||
| 
 | ||||
|     QTimer *heartTimer = nullptr; | ||||
|     QTimer *trainTimer = nullptr; | ||||
| 
 | ||||
|     int heartCount = 0; //心跳次数,用于检测通信
 | ||||
|     ST_BicycleParam m_st_bicycleParam;  //启动参数
 | ||||
| }; | ||||
| 
 | ||||
| #endif // BCIMANAGER_H
 | ||||
|  | ||||
| @ -8,58 +8,15 @@ eyeTrainWidget::eyeTrainWidget(QWidget *parent) : | ||||
|     ui(new Ui::eyeTrainWidget) | ||||
| { | ||||
|     ui->setupUi(this); | ||||
|     heartTimer = new QTimer(); | ||||
|     heartTimer->setInterval(1000); | ||||
|     heartTimer->start(); | ||||
|     trainTimer = new QTimer(); | ||||
|     connect(heartTimer, SIGNAL(timeout()), this, SLOT(slotHeartTimer())); | ||||
|     connect(trainTimer, SIGNAL(timeout()), this, SLOT(slotTrainTimer())); | ||||
| 
 | ||||
|     m_st_bicycleParam.trainMode = 0; //被动
 | ||||
|     m_st_bicycleParam.spasmSwitch = 1; //开启
 | ||||
|     m_st_bicycleParam.spasmLevel = 1; //默认一级
 | ||||
|     m_st_bicycleParam.configPower = 0; //默认低
 | ||||
|     m_st_bicycleParam.switchDirectonTime = 10; //换向时间默认10
 | ||||
|     m_st_bicycleParam.phaseValue = 0; //协同相位值
 | ||||
|     m_st_bicycleParam.direction = 1; //方向正向
 | ||||
|     m_st_bicycleParam.speed = 10; //速度 10
 | ||||
|     m_st_bicycleParam.resistance = 10; //阻力 Nm  0~20挡
 | ||||
|     m_st_bicycleParam.spasmType = 0; //默认逆向
 | ||||
| 
 | ||||
|     BCIManager::getInstance().startLinkerPrograme(); | ||||
|     ui->quickWidget->setSource(QUrl("qrc:/DependFile/QML/Ssvep.qml")); | ||||
| 
 | ||||
| //    int8_t controlState;//状态控制 0-停止 1启动 2-暂停 3-继续
 | ||||
| //    int8_t bodyPart;    //训练部位 0-上肢 1-下肢 2-四肢 3-垂直上肢
 | ||||
| //    int8_t trainMode;   //训练模式 0-被动 1-主动 2-助力 3-等速 4-上下肢协同被动 7-四肢主被动 9-单独主动 10-被动可切主动(主被动)
 | ||||
| //    int8_t spasmSwitch; //痉挛开关 0-关 1-开
 | ||||
| //    int8_t spasmLevel;  //痉挛等级1~3挡
 | ||||
| //    int8_t configPower; //配置功率0~2 低中高
 | ||||
| //    int8_t switchDirectonTime;//换向时间
 | ||||
| //    int8_t phaseValue;  //协同相位值
 | ||||
| //    int8_t direction;   //方向 0-逆向 1-正向
 | ||||
| //    int8_t speed;       //速度 2~60r/min
 | ||||
| //    int8_t resistance;  //阻力 Nm  0~20挡
 | ||||
| //    int8_t spasmType;   //痉挛后方向  1-正向 0-逆向,默认逆向,没有了
 | ||||
| //    uint8_t trainTime; //训练时间 0~120min
 | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| eyeTrainWidget::~eyeTrainWidget() | ||||
| { | ||||
| 
 | ||||
| 
 | ||||
|     if(heartTimer) | ||||
|     { | ||||
|         heartTimer->stop(); | ||||
|         delete heartTimer; | ||||
|     } | ||||
|     if(trainTimer) | ||||
|     { | ||||
|         trainTimer->stop(); | ||||
|         delete trainTimer; | ||||
|     } | ||||
|     delete ui; | ||||
|     QVariant retVal; | ||||
|     QMetaObject::invokeMethod(ui->quickWidget->rootObject(), | ||||
| @ -74,83 +31,10 @@ eyeTrainWidget::~eyeTrainWidget() | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| void eyeTrainWidget::startTrain(int8_t Part, int Time) | ||||
| { | ||||
|     // heartTimer->start();
 | ||||
|     trainTimer->setInterval(Time*1000); | ||||
|     trainTimer->start(); | ||||
|     //状态控制 0-停止 1启动 2-暂停 3-继续
 | ||||
|     m_st_bicycleParam.controlState = 1; | ||||
|     m_st_bicycleParam.bodyPart = Part; //训练部位 0-上肢 1-下肢 2-四肢 3-垂直上肢
 | ||||
|     m_st_bicycleParam.trainTime = 120; | ||||
|     CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); | ||||
| 
 | ||||
| } | ||||
| void eyeTrainWidget::stopTrain() | ||||
| { | ||||
| 
 | ||||
|     heartTimer->stop(); | ||||
|     trainTimer->stop(); | ||||
| 
 | ||||
|     m_st_bicycleParam.controlState = 0; | ||||
|     CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); | ||||
| 
 | ||||
| } | ||||
| void eyeTrainWidget::pauseTrain() | ||||
| { | ||||
|     trainTimer->stop(); | ||||
|     m_st_bicycleParam.controlState = 2; | ||||
|     CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); | ||||
| } | ||||
| void eyeTrainWidget::continueTrain() | ||||
| { | ||||
|     trainTimer->start(); | ||||
|     m_st_bicycleParam.controlState = 3; | ||||
|     CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); | ||||
| } | ||||
| 
 | ||||
| void eyeTrainWidget::slotQmlStatusChanged(QQuickWidget::Status emStatus) | ||||
| { | ||||
|     qDebug() << "3342" << emStatus; | ||||
|     qDebug() << "slotQmlStatusChanged" << emStatus; | ||||
| } | ||||
| void eyeTrainWidget::slotHeartTimer() | ||||
| { | ||||
|     //qDebug()<<"上位机发送心跳";
 | ||||
|     CCommunicateAPI::getInstance()->sendHeartBeat(); | ||||
|     static int num = 0; | ||||
|     ++num; | ||||
|     if(num > 3) | ||||
|     { | ||||
|         num = 0; | ||||
|         QPixmap pixmap; | ||||
|         if(heartCount < 1) | ||||
|         { | ||||
| 
 | ||||
| 
 | ||||
|         } | ||||
|         else | ||||
|         { | ||||
| 
 | ||||
|         } | ||||
|         if(heartCount >= 3) | ||||
|         { | ||||
|             heartCount = 0; | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
| void eyeTrainWidget::slotTrainTimer() | ||||
| { | ||||
| 
 | ||||
|     trainTimer->stop(); | ||||
|     m_st_bicycleParam.controlState = 0; | ||||
|     CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); | ||||
| } | ||||
| /*void eyeTrainWidget::on_startButton_clicked()
 | ||||
| { | ||||
|     startTrain(0, 10); | ||||
| } | ||||
| void eyeTrainWidget::on_closeButton_clicked() | ||||
| { | ||||
|     stopTrain(); | ||||
| }*/ | ||||
|  | ||||
| @ -5,7 +5,6 @@ | ||||
| #include <QTimer> | ||||
| #include <QMessageBox> | ||||
| #include <QDebug> | ||||
| #include "ccommunicateapi.h" | ||||
| #include <QQuickWidget> | ||||
| namespace Ui | ||||
| { | ||||
| @ -19,26 +18,13 @@ class eyeTrainWidget : public QWidget | ||||
| public: | ||||
|     explicit eyeTrainWidget(QWidget *parent = nullptr); | ||||
|     ~eyeTrainWidget(); | ||||
|     ST_BicycleParam m_st_bicycleParam;  //启动参数
 | ||||
|     void startTrain(int8_t Part, int Time); | ||||
|     void stopTrain(); | ||||
|     void pauseTrain(); | ||||
|     void continueTrain(); | ||||
| 
 | ||||
| private slots: | ||||
|     void slotQmlStatusChanged(QQuickWidget::Status emStatus); | ||||
| 
 | ||||
| private: | ||||
|     Ui::eyeTrainWidget *ui; | ||||
|     QTimer *heartTimer; | ||||
|     QTimer *trainTimer; | ||||
| 
 | ||||
|     int heartCount; //心跳次数,用于检测通信
 | ||||
| private slots: | ||||
|     void slotHeartTimer(); | ||||
|     void slotTrainTimer(); | ||||
|     //void on_startButton_clicked();
 | ||||
|     //void on_closeButton_clicked();
 | ||||
| }; | ||||
| 
 | ||||
| #endif // EYETRAINWIDGET_H
 | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user