使用Qt实现:同时采集压力传感器的值和光栅尺的值,界面显示压力传感器的值,和光栅尺的值,把光栅尺的实时1000个左右数值用图表绘制动态折线图,并把数值汇总到文件保存。
实现: 图好模糊啊,懂得意思就够了。
.pro
QT += core gui charts serialport
使用到图表和串口,在.pro文件加入对应声明。
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtCharts/QLineSeries>
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
#include <QValueAxis>
#include <QTimer>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QIODevice>
#include <QFile>
QT_CHARTS_USE_NAMESPACE
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void writeData(); //写入文件
QTimer *timerline; //声明一个定时器
QLineSeries *series; //折线数据集
QChart *serialchart; //折线表
QValueAxis *AxisX; //x,y轴
QValueAxis *AxisY;
int i=1; //全局变量坐标轴X的值
void init(); //光栅串口初始化
QByteArray buf_gs; //声明一个全局变量buf,用于缓冲从光栅串口接收的数据
double guangshan_x ;//声明一个全局变量guangshan_x,用于光栅X轴数据的传递,传递给chart
QString guangshan_x_str;//声明一个全局变量guangshan_x_str,用于光栅X轴string数据的传递,用于写入文件
QByteArray buf_yali;//声明一个全局变量buf_yali,用于缓冲从压力串口接收的数据
public slots:
void guangshan_read(); //读取光栅尺数据
void yali_read(); //读取压力数据
protected:
void GetSeries(); //用于获取更新的点
void dealClose(); //用于关闭“x”操作
private slots:
void on_btn_openConsole_clicked();// 打开光栅串口
void on_btn_clearRecv_clicked();// 清空接收区
void on_button_stop_clicked(); // 停止收集数据画图按钮
void on_button_start_clicked(); //开始收集数据画图按钮
void on_btn_openConsole_yali_clicked();// 打开压力串口
void on_btn_send_yali_clicked();// 发送
void on_btn_clearRecv_yali_clicked();// 清空接收区
private:
Ui::Widget *ui;
QSerialPort *serial_gs;//光栅串口初始化
QSerialPort *serial_yali;//压力串口初始化
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QtCharts/QLineSeries>
#include <QDebug>
#include <QFile>
static const char blankString[] = QT_TRANSLATE_NOOP("SettingsDialog", "N/A");
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
init();//串口初始化
series = new QLineSeries();//画线实例
serialchart = new QChart();//创建表格
//填充数据集
series->append(0,70); //必须先设置一个点,数据才能与轴相连接
series->setVisible(true);//设置数据点可见
serialchart->legend()->hide();//图例隐藏
serialchart->addSeries(series);//增加数据集到chart
serialchart->setTitle("中心距变化");//设置标题
//自定义坐标轴
QValueAxis *AxisX= new QValueAxis();
AxisX->setRange(0, 1000);
AxisX->setTitleText("X");
AxisX->setTickCount(1); // 横坐标被10等分刻度显示
QValueAxis *AxisY = new QValueAxis;
AxisY->setRange(0,170); // 设置坐标轴范围
AxisY->setTitleText(QString::fromLocal8Bit("Y")); // 设置Y轴坐标
AxisY->setTickCount(1); // 纵坐标被10等分刻度显示
// 图表添加坐标轴
serialchart->setAxisX(AxisX,series);//设置chart的坐标轴
serialchart->setAxisY(AxisY,series);
series->attachAxis(AxisX);//连接数据集与坐标轴,如果不连接,数据集与坐标轴的尺度就不