C++ 试图通过qserialport将arduino与pc通信
为了在创建基于qtquick的应用程序后将arduino连接到PC,我创建了arduino.cpp和arduino.h文件。代码中有错误,但我无法获取并解决它。请,如果有人能帮忙,这里是.cpp和.h文件。我不知道为什么serialsettings不被接受为类型名, 然后对某些行进行错误处理C++ 试图通过qserialport将arduino与pc通信,c++,arduino,qtserialport,qqmlapplicationengine,qtquick-designer,C++,Arduino,Qtserialport,Qqmlapplicationengine,Qtquick Designer,为了在创建基于qtquick的应用程序后将arduino连接到PC,我创建了arduino.cpp和arduino.h文件。代码中有错误,但我无法获取并解决它。请,如果有人能帮忙,这里是.cpp和.h文件。我不知道为什么serialsettings不被接受为类型名, 然后对某些行进行错误处理 #include "Arduino.h" #include<QSerialPort> Arduino::Arduino() { } void Arduino::set
#include "Arduino.h"
#include<QSerialPort>
Arduino::Arduino()
{
}
void Arduino::setupSerialPort(serialSettings *port){
port->baudRate=QSerialPort::Baud9600;
port->dataBits=QSerialPort::Data8;
port->parity=QSerialPort::NoParity;
port->stopBits=QSerialPort::OneStop;
port->flowControl= QSerialPort::NoFlowControl;
}
void Arduino::setupCom(){
serial1 = new QSerialPort();
serial2 = new QSerialPort();
serial3 = new QSerialPort();
// Port 1 settings sudo echo "Test" > /dev/ttyS10
port1Settings.name="ttyS10";
setupSerialPort(&port1Settings);
// Port 2 settings
port2Settings.name="ttyUSB0";
port2Settings.name="ttyS12";
setupSerialPort(&port2Settings);
// Port 3 settings
port3Settings.name="ttyUSB3";
port3Settings.name="ttyS14";
setupSerialPort(&port3Settings);
}
bool Arduino::openSerialPort(QSerialPort *ser,serialSettings p)
{
ser->setPortName(p.name);
bool serialWorking=false;
if (ser->open(QIODevice::ReadWrite)) {
if (ser->setBaudRate(p.baudRate)
&& ser->setDataBits(p.dataBits)
&& ser->setParity(p.parity)
&& ser->setStopBits(p.stopBits)
&& ser->setFlowControl(p.flowControl)) {
//statusBar->showMessage(tr("Connected to %1 ").arg(p.name));
qDebug()<<"connected to 1%";
serialWorking=true;
// connect(ser, SIGNAL(readyRead()), SLOT(showResponse()));
// port1Infos=QSerialPortInfo(p.name);
// qDebug()<<"Connected to port : "<<port1Infos.productIdentifier()<<port1Infos.description()<<port1Infos.manufacturer();
} else {
ser->close();
//QMessageBox::critical(this, tr("Erreur dans les parametres de communication Serie %1").arg(p.name), ser->errorString());
qDebug()<<"Erreur dans les parametres de communication Serie";
//statusBar->showMessage(tr("Open error"));
qDebug()<<"open error";
}
} else {
//QMessageBox::critical(this, tr("Erreur!"), ser->errorString());
qDebug()<<"Erreur "<<ser->error()<<" .Impossible d'ouvrir le port Serie 1: "<<ser->errorString();
//statusBar->showMessage(tr("Impossible d'ouvrir le port Serie %1: %2").arg(p.name).arg(ser->errorString()));
}
return serialWorking;
}
void Arduino::openSerialPorts(){
qDebug()<<"ouvertture des Ports Serie: "<<port1Settings.name<<" "<<port2Settings.name<<" "<<port3Settings.name;
if (!serial1->isOpen()){
serial1Working=openSerialPort(serial1,port1Settings);
if (!serial1Working){
// arret(2,true);
}
}
// if (!serial2->isOpen()){
// serial2Working=openSerialPort(serial2,port2Settings);
// if (!serial2Working){
// arret(2,true);
// }
// }
// if (!serial3->isOpen()){
// serial3Working=openSerialPort(serial3,port3Settings);
// if (!serial3Working){
// arret(2,true);
// }
// }
machineStarting=true;
connect (this,SIGNAL(checkCom1()),this,SLOT(updateChargement()));
if (!com1Working){
doAction(QString("X"),serial1);
// We wait for the correct response for 0.5s with a one shot timer
startSingleShotTimer(checkCom1Timer,intervalleCheckCom);
connect(checkCom1Timer, SIGNAL(timeout()), this, SLOT (updateChargement()));
}
}
void updateChargement()
{ const QByteArray requestData;
requestData.fromStdString(std::string("hi"));
serial.write(requestData);
if (serial.waitForBytesWritten(m_waitTimeout)) {
//! [8] //! [10]
// read response
if (serial.waitForReadyRead(currentWaitTimeout)) {
QByteArray responseData = serial.readAll();
while (serial.waitForReadyRead(10))
responseData += serial.readAll();
const QString response = QString::fromUtf8(responseData);
QDebug()<<"reponse arduino""<< response;
}
}}
#ifndef SERIALCOM_H
#define SERIALCOM_H
#include <QtSerialPort>
#include <QSerialPortInfo>
class Arduino
{
public:
Arduino();
{QString name;
qint32 baudRate;
QString stringBaudRate;
QSerialPort::DataBits dataBits;
QString stringDataBits;
QSerialPort::Parity parity;
QString stringParity;
QSerialPort::StopBits stopBits;
QString stringStopBits;
QSerialPort::FlowControl flowControl;
QString stringFlowControl;}
void setupini();
void setupCom();
void openSerialPorts();
void updateChargement();
private:
void setupSerialPort(serialSettings *port);
serialSettings port1Settings;
serialSettings port2Settings;
serialSettings port3Settings;
QSerialPortInfo port1Infos;
QSerialPortInfo port2Infos;
QSerialPortInfo port3Infos;
QSerialPort *serial;// utilise pour les tests! a supprimer apres
QSerialPort *serial1;// COM1
QSerialPort *serial2;// COM2
QSerialPort *serial3;// COM3
bool serial1Working,serial2Working,serial3Working;
bool openSerialPort(QSerialPort *ser, serialSettings p);
void sendMsg(QSerialPort *ser,QString msg);
};
#endif // SERIALCOM_H
#包括“Arduino.h”
#包括
Arduino::Arduino()
{
}
void Arduino::setupSerialPort(serialSettings*端口){
端口->波特率=QSerialPort::Baud9600;
port->dataBits=QSerialPort::Data8;
端口->奇偶校验=QSerialPort::NoParity;
端口->停止位=QSerialPort::OneStop;
端口->流量控制=QSerialPort::NoFlowControl;
}
void Arduino::setupCom(){
serial1=新的QSerialPort();
serial2=新的QSerialPort();
serial3=新的QSerialPort();
//端口1设置sudo echo“Test”>/dev/ttyS10
port1Settings.name=“ttyS10”;
设置串行端口(和端口1设置);
//端口2设置
port2Settings.name=“ttyUSB0”;
port2Settings.name=“ttyS12”;
设置串行端口(和端口2设置);
//端口3设置
port3Settings.name=“ttyUSB3”;
port3Settings.name=“ttyS14”;
设置串行端口(和端口3设置);
}
boolArduino::openSerialPort(QSerialPort*ser,SerialP设置)
{
ser->setPortName(p.name);
bool serialWorking=false;
如果(ser->open(QIODevice::ReadWrite)){
if(ser->setBaudRate(p.baudRate)
&&ser->setDataBits(p.dataBits)
&&ser->设置奇偶校验(p.奇偶校验)
&&ser->设置停止位(p.停止位)
&&ser->setFlowControl(p.flowControl)){
//状态栏->显示消息(tr(“连接到%1”).arg(p.name));
qDebug()它是否未编译或在运行时的行为不符合预期?这可能会有所帮助,稍后将检查您的代码。它在编写@Mansoor1时显示错误。您应该在此处复制并粘贴准确的错误,而不是对其进行解释或让人们猜测。2.您使用serialsettings
作为类型,声明和定义在哪里?假设您是lac查看serialsettings
的定义,请参阅我第一条评论的第二部分。PS:由于屏幕截图不可文本搜索,因此此处不欢迎使用。它是否未编译或在运行时表现不符合预期?这可能会有所帮助,稍后将检查您的代码。它在编写@Mansoor1时显示错误。您应该复制并粘贴这里有确切的错误,不要转述或让人们猜测。2.您使用serialsettings
作为类型,声明和定义在哪里?假设您缺少serialsettings
的定义,请参阅我第一条评论的第二部分。注:屏幕截图不受欢迎,因为它们无法进行文本搜索。