QSerialPort - setReadBufferSize

时间:2014-09-01 00:37:27

标签: c++ qt serial-port

我目前有一个问题。我正在尝试编写一个实时绘图程序。我从Arduino收到数据。我可以成功打开串口并正确读取信息并绘制图形。问题是,如果我没有指定缓冲区大小,输入缓冲区被认为是无限的(现在读取300Hz-4800Hz的数据,你可以想象你的计算机的内存最终可能会填满,一切都崩溃了!)。

现在我尝试了类似的东西:

serial->setReadBufferSize(5000);

现在这确实成功设置了缓冲区大小,我使用serial->readBufferSize()来确认它是否有效。

问题是一旦缓冲区已满,程序就会停止绘图。现在我想象我应该做的是:

  1. 设置缓冲区大小(仅一次)
  2. 阅读串口
  3. 绘制数据
  4. 清除缓冲区(serial-> clear())。
  5. 重复步骤2 - 4。

    但这似乎不起作用。

    我正在利用QCustomPlot进行实时绘图。

2 个答案:

答案 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毫秒对我有用。