来自Arduino的信号在qcustomplot中绘画

时间:2016-08-09 05:30:55

标签: c++ qt arduino

我想做一个从Arduino输出值并在Qt中绘制形状的项目。我不确定QCustomPlot是否可以做到这一点。你能给我一些建议吗?

例如,我创建了一个Qt GUI,用于输入位置(x,y)到Arduino并进行计算,然后Arduino将值信号发送到Qt并在我想要的位置上绘制形状。有可能吗?

1 个答案:

答案 0 :(得分:0)

几年前,我使用QWTQextSerialPort做了类似的事情。您必须使用串行连接(在Windows COM1,COM2 ...中)连接Arduino,并且您将能够从缓冲区读取/写入数据。

现在,Qt集成了对此任务的本机支持,请检查QtSerialPort Support,以配置您的端口检查此类QSerialPort。如何读取数据?使用QByteArray,一个例子:

 QByteArray responseData = serial->readAll();
 while(serial->waitForReadyRead(100))
       responseData += serial->readAll();

现在将所有字节存储在double类型的QVector中。

QVector<double> data;
QDataStream stream(line);
stream >> data;

此数据将由QCustomPlot绘制。例如:

int numSamples = data.size();
QVector<double> x(numSamples), y(numSamples); // initialize with entries 0..100
for (int i=0; i<numSamples; ++i)
{
  x[i] = i/50.0 - 1; // x goes from -1 to 1
  y[i] = data[i]; // In this line copy the data from your Arduino Buffer and apply what you want, maybe some signal processing
}
// create graph and assign data to it:
customPlot->addGraph();
customPlot->graph(0)->setData(x, y);
// give the axes some labels:
customPlot->xAxis->setLabel("x");
customPlot->yAxis->setLabel("y");
// set axes ranges, so we see all data:
customPlot->xAxis->setRange(-1, 1);
customPlot->yAxis->setRange(0, 1);
customPlot->replot();

享受!