实时数据显示 - Qt C++ 串口数据可视化
这段代码是实时显示数据的函数。它从串口读取数据,并将其添加到图表中,以实时显示数据。其中,'key' 是时间轴上的数据点,'temp_float' 是从串口读取的数据值,'time_inter' 是两个数据点之间的时间间隔。函数还将数据保存到数组中,以备后续使用。最后,它将图表重新绘制,以更新显示。
void serial::realtimeDataSlot1()
{
static QTime time(QTime::currentTime());
static QDateTime datetime(QDateTime::currentDateTime());
// calculate two new data points:
double key = time.elapsed()/1000.0; // time elapsed since start of demo, in seconds
static double lastPointKey = 0;
float temp_float,time_inter;
double key_x[256];
time_inter=0.075;// 采样数据的更新时间256*1/3125Hz=0.08192
if (key-lastPointKey > time_inter)
{
// add data to lines:
save_num++;
temp_float=data_num[num++];
/**/ if(save_num<=8)
for(int i=0;i<256;i++)
save_data[256*(save_num-1)+i]=data_num[i];
else
{
save_num=8;
for(int i=256;i<2048;i++) save_data[i-256]=save_data[i];
for(int i=0;i<256;i++)
save_data[256*7+i]=data_num[i];
}
for(int i=0;i<256;i++)
{
key_x[i]=lastPointKey+0.00032*i;
ui->dataView->graph(0)->addData(key_x[i], data_num[i]);
}
ui->dataView->graph(0)->addData(key, temp_float);
// rescale value (vertical) axis to fit the current data:
ui->dataView->graph(0)->rescaleValueAxis();
if(num>255)
num=0;
lastPointKey = key;
}
// make key axis range scroll with the data (at a constant range size of 8):
ui->dataView->xAxis->setRange(key, 0.3, Qt::AlignRight);
ui->dataView->replot();
}
该代码主要包含以下部分:
- 数据读取: 代码从串口读取数据,并存储在 'data_num' 数组中。
- 时间轴: 代码使用 'QTime' 和 'QDateTime' 类来记录时间,并计算时间轴上的数据点 'key'。
- 数据点添加: 代码将时间点 'key' 和数据值 'temp_float' 添加到图表中。
- 数据保存: 代码将数据保存到 'save_data' 数组中,用于后续分析和处理。
- 图表更新: 代码调用 'ui->dataView->replot()' 函数重新绘制图表,以更新显示。
该代码可以帮助你实现实时数据显示功能,并方便后续的数据分析和处理。
原文地址: https://www.cveoy.top/t/topic/jnW2 著作权归作者所有。请勿转载和采集!