【发布时间】:2019-11-07 17:22:42
【问题描述】:
我正在尝试从 QT 应用程序到 Arduino 进行通信。流程是这样的:QT 应用程序发送一个“1”,Arduino 预计会响应一些数据(数据字符串长度很大,大约 300)。 QT 应用程序以大约 5Hz(每 200 毫秒)的速率发送“1”。
我面临的问题是,Arduino 到 QT 通信之间存在累积延迟。也就是说,我从 Arduino 收到的数据不是最近的数据,而是来自 Arduino 的数据频率仅为 5Hz(正如预期的那样),只是来的数据不是最近的。这种延迟随着时间的推移不断增加。我相信缓冲区或其他东西有问题。
我尝试了什么:
QSerialPort serialPort; 是我的设备端口
serialPort.clear()serialPort.flush()- 从两端增加和减少波特率。
- 从 Arduino 减少字符长度,这里延迟显着减少,但长时间后会观察到累积的延迟。
清除串行通信缓冲区,但问题仍然存在。
这是我的代码 sn-p:
connect(timer_getdat, SIGNAL(timeout()), this, SLOT(Rec()));
timer_getdat->start(200);
Rec() 是我做通信部分的函数。
在Rec():
serialPort.write("1", 2);
// serialPort.waitForBytesWritten(100);
long long bytes_available = serialPort.bytesAvailable();
if (bytes_available >= 1)
{
serialPort.readLine(temp, 500);
serialPort.flush(); // no change
serialPort.clear(); // no change by .clear() also
}
我在这个问题上纠结了很长时间。上面的代码 sn-p 是我认为必要的,但如果有人需要更多说明,我可能会透露更多代码。
【问题讨论】:
-
目前串口速度是多少?能否跟上:"...字符串长度很大,大约 300 [无单位]..." 数据量?
-
将它减少到 100 字符长,我猜对于 18400 的波特率来说这并不长,仍然不起作用。
-
好的,当我提高波特率时,延迟会显着减少,但累积的延迟会在很长一段时间后反映出来。