gpt4 book ai didi

c++ - QT如何从串口读取数据?

转载 作者:行者123 更新时间:2023-11-28 02:00:49 24 4
gpt4 key购买 nike

我正在 QT 中创建一个脚本,用于从串行端口读取格式包 (AA)、(BB) 等。我打开串行端口,但是当我去检查 QByteArray 值内部时,返回我无法读取任何值。

这是我的代码

...
QSerialPort *serialPort = new QSerialPort();
serialPort->setPortName("ttyUSB0");
serialPort->setParity(QSerialPort::NoParity);
serialPort->setBaudRate(QSerialPort::Baud9600, QSerialPort::AllDirections);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->setFlowControl(QSerialPort::NoFlowControl);
serialPort->open(QIODevice::ReadOnly);

if (serialPort->isOpen()) {
qDebug() << "Serial port is open...";
QByteArray datas = serialPort->readAll();
if (datas.size() == 0) {
qDebug() << "Arrived data: 0";
} else {
for (int i = 0; i < datas.size(); i++){
if (datas.at(i)) {
qDebug() << datas[i];
}
}
}

} else {
qDebug() << "OPEN ERROR: " << serialPort->errorString();
}

serialPort->close();
qDebug() << "...serial port is closed!";

return 0;
...

最佳答案

您在 open() 之后立即调用了 readAll()。计算机从一个到另一个可能需要几纳秒。

在 9600 波特率下,每个数据字节的传输时间略多于 1 毫秒。在这么短的时间间隔内绝对不可能有任何数据到达,所以这就是您没有数据的原因。

串行端口在您打开它们之前不会开始缓冲传入的数据(当没有程序打开端口时,它们怎么可能,什么波特率和其他设置将用于接收和缓冲?)

使用某种阻塞读取函数(例如 readLine())或在数据到达时对数据使用react的事件循环。

关于c++ - QT如何从串口读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39678253/

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