Qt多串口通信,根据数据实时绘制动态图表,并将数据写入文件记录

本文介绍如何利用Qt进行多串口通信,实时显示压力传感器和光栅尺数据,界面展示压力读数,同时以动态折线图形式展示光栅尺的1000个左右数值变化,并将数据保存到文件中。
摘要由CSDN通过智能技术生成

使用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);//连接数据集与坐标轴,如果不连接,数据集与坐标轴的尺度就不
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值