我目前有一个问题。我正在尝试编写一个实时绘图程序。我从Arduino收到数据。我可以成功打开串口并正确读取信息并绘制图形。问题是,如果我没有指定缓冲区大小,输入缓冲区被认为是无限的(现在读取300Hz-4800Hz的数据,你可以想象你的计算机的内存最终可能会填满,一切都崩溃了!)。
现在我尝试了类似的东西:
serial->setReadBufferSize(5000);
现在这确实成功设置了缓冲区大小,我使用serial->readBufferSize()
来确认它是否有效。
问题是一旦缓冲区已满,程序就会停止绘图。现在我想象我应该做的是:
重复步骤2 - 4。
但这似乎不起作用。
我正在利用QCustomPlot
进行实时绘图。
答案 0 :(得分:2)
您可以以异步方式读取数据。只需将readyRead()
的{{1}}信号连接到一个插槽即可。只要有新数据,就会发出QSerialPort
:
readyRead()
connect(&serial, SIGNAL(readyRead()), this, SLOT(readData()));
是每次readData()
发出QSerialPort
信号时调用的广告位。 readyRead()
将任何可用数据附加到readData()
类成员。您可以在此插槽中检查是否收到特定数量的数据:
QByteArray
答案 1 :(得分:0)
确保serial.waitForReadyRead不是很小。
serial.waitForReadyRead(50)
50毫秒对我有用。