gpt4 book ai didi

c++ - QSerialPort readyRead() 信号不能正常工作

转载 作者:行者123 更新时间:2023-11-28 04:03:46 29 4
gpt4 key购买 nike

因此,我试图让我的 Arduino 与我的 Qt 项目进行通信,但信号 readyRead() 从未由 QSerialPort 发出。我试错了许多方法和命令来实现它,尝试了以下视频中的代码,但它也不起作用,尝试了另一个微 Controller 和另一个端口。

https://www.youtube.com/watch?v=AX-HhBXBzGg

我用这段代码建立了串行连接,所以我的 arduino 的写 LED 灯闪烁,它的端口很忙。当我定期使用 waitForReadyRead() 函数时,我只能执行 readSerial() ,这是愚蠢的。没有该函数 readRead() 不会被发射。

另一个观察结果:当我尝试向我的 arduino 写入内容时,它的读取 LED 正在闪烁,但它没有正确读取信号。使用 Arduino IDE 串行监视器,它工作正常。

这是我的Qt代码和arduino代码:

序列号.h:

#ifndef SERIAL_H
#define SERIAL_H
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>

class Serial : public QSerialPort
{
Q_OBJECT

public:
Serial();
~Serial();

public slots:
void readSerial();
};

#endif // SERIAL_H

序列号.cpp:

#include "serial.h"

Serial::Serial(){
QObject::connect(this, SIGNAL(readyRead()), this, SLOT(readSerial()));
setBaudRate(QSerialPort::Baud9600);
setDataBits(QSerialPort::Data8);
setParity(QSerialPort::NoParity);
setStopBits(QSerialPort::OneStop);
setFlowControl(QSerialPort::NoFlowControl);
setReadBufferSize(10);

foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
if (info.description() == "Arduino Leonardo"){
setPort(info);
open(QSerialPort::ReadWrite);
if (isOpen()) qDebug() << portName();
}
}
}

Serial::~Serial(){
if (isOpen()){
close();
}
}

void Serial::readSerial(){
qDebug() << "Never triggered!";
while (!atEnd()){
QByteArray data = readAll();
clear();
qDebug() << data;
}
}

arduino(有点琐碎):


void setup() {
Serial.begin(9600);
}

void loop() {
Serial.print(0);
Serial.flush();
}

非常感谢!

最佳答案

我在使用 5.13.1 和 mingw 时遇到完全相同的问题(readyRead() 仅在调用 waitForReadyRead() 时触发)。与 5.13.0 相同的代码有效。我的解决方案是周期性计时器事件(~50 毫秒),它依次执行 waitForReadyRead(1)

这是一个已知问题,已记录 here .

关于c++ - QSerialPort readyRead() 信号不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59080271/

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