gpt4 book ai didi

c++ - 与 QSerialPort 的基本通信

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:09 25 4
gpt4 key购买 nike

我正在尝试在 QT 中设置一些基本的串行通信我正在从 QSerialPortInfo 获取端口 COM19,并且我通过 Arduino 成功地与该端口通话。但是,我无法通过 QT 取回任何东西。

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QTextStream>
#include <QFile>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
qDebug() << "Name :" << info.portName();
qDebug() << "Description :" << info.description();
qDebug() << "Manufactuer :" << info.manufacturer();

QSerialPort serial;
serial.setPort(info);

if(serial.open(QIODevice::ReadWrite))
qDebug() << serial.errorString();

serial.write("M114 \n");

qDebug() << serial.readAll();

serial.close();
// Now we need to send and receive commands

serial.setPortName("COM19");
serial.setBaudRate(QSerialPort::Baud57600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);

if(serial.open(QIODevice::ReadWrite)){
qDebug() << "opened";
}else{
qDebug() << "Not opened";
}
qDebug() << serial.errorString();

serial.write("M114 \n");
qDebug() << serial.readAll();

serial.close();


}





MainWindow w;
w.show();

return a.exec();
}

如您所见,我正在尝试按照文档中的方式进行简单连接,并在其中写出所有波特率信息。他们抛出两个不同的错误。

就像我说的,我正在通过 arduino 连接到同一个端口并取得成功。任何想法出了什么问题?

Name  : "COM19" 
Description : "USB Serial (Communication Class, Abstract Control Model)"
Manufactuer : "PJRC.COM, LLC."
"Unknown error"
""
opened
"The handle is invalid."
""

对我做错了什么有什么想法吗?

我的想法是向设备发送命令,然后将它们读回控制台。

最佳答案

代码看起来有点困惑。您打开所有可用端口,然后尝试做一些错误的事情。

注意:您可以像使用 shell 应用程序一样使用 GUI 应用程序。这是错误的。

尝试:

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QTextStream>
#include <QFile>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QSerialPort serial;
serial.setPortName("COM19");

if(serial.open(QIODevice::ReadWrite)){
//Now the serial port is open try to set configuration
if(!serial.setBaudRate(QSerialPort::Baud57600))
qDebug()<<serial.errorString();

if(!serial.setDataBits(QSerialPort::Data8))
qDebug()<<serial.errorString();

if(!serial.setParity(QSerialPort::NoParity))
qDebug()<<serial.errorString();

if(!serial.setStopBits(QSerialPort::OneStop))
qDebug()<<serial.errorString();

if(!serial.setFlowControl(QSerialPort::NoFlowControl))
qDebug()<<serial.errorString();

//If any error was returned the serial il corrctly configured

serial.write("M114 \n");
//the serial must remain opened

if(serial.waitForReadyRead(100)){
//Data was returned
qDebug()<<"Response: "<<serial.readAll();
}else{
//No data
qDebug()<<"Time out";
}

//I have finish alla operation
serial.close();
}else{
qDebug()<<"Serial COM19 not opened. Error: "<<serial.errorString();
}

MainWindow w;
w.show();

return a.exec();
}

关于c++ - 与 QSerialPort 的基本通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22542518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com