Qt5-实现串口助手版“示波器”

一.前言

  • 闲了好久没更新博客,偷懒的我就拿了去年暑假备战电赛时做的一个串口版“示波器”来充充水。抛砖引玉哈。
  • 因为以前发过一篇主题一样的文章,所以就当该文就相当于上版的升级版(其实两者没啥关系,仅是主题一样,以前那篇是单纯为赛题弄的,这篇更有通用性)
  • 是当时为电赛准备的(吐槽一下,原本我组准备的电源题,怎么想着也会用上adc、pwm啥的吧,结果19年的A题一出来真是让我一言难尽啊)
  • 实现的功能有:自定义数据格式,多个数据图线显示,自动和手动两种模式,显示鼠标当前的位置
  • 因为时间有点久,很多注释没写到还请谅解。

二.效果介绍

  • 因为一直宅在家,又没带板子回来,所以就只能看看界面了,红色字体为说明
  • 在这里插入图片描述

三.软件思路介绍

  1. 大概思路,串口接收数据,然后按照自定义格式解析数据,最后绘画波形图,因为总代码有点多,就不全贴出来,有空我上传到github上去,也可以评论发邮箱号我来发给你
  2. 这里用到到绘画波形图的库是qcustomplot,不清楚的可以百度一下,它的官网介绍得挺详细的。
  3. 先是定义一个Handle类里有串口的自动检测,即如果检测有串口出现会自动加到串口端口的栏中,和串口数据的接收、数据解析和曲线图的绘画(放在一个线程里执行,防止界面显示卡死)代码如下,先是头文件:
#include <QObject>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include "qcustomplot.h"
#include <QVector>
#define MAX_COUNT       1500			// x轴可显示的最大范围
#define cout qDebug() << __LINE__ << ":"
class Handle : public QObject
{
   
    Q_OBJECT
public:
    explicit Handle(QCustomPlot *P,QObject *parent = nullptr);
signals:
    void finish();						// 数据解析完成时发出信号
public slots:
    void getValidPort(QComboBox* p);    // 获取有效串口端口
    void getText(QString t);
    void analyData();					// 解析数据
    void setFlag(QString b = "[",QString m=",",QString e="]"){
   
        begin = b;mid = m; end = e;
    }									// 自定义数据格式,分隔符
    void clear();						// 数据清空
    void setAuto(bool e){
   				// 是否设置为自动模式
        isAuto = e;
    }
    void setRun(bool e){
   				// 是否设置为运行
        isRun = e;
    }
    void setOpen(bool e){
   				// 是否打开串口
        isPortOpen = e;
    }
    bool getOpen(){
   return isPortOpen;}	// 获取串口打开状态
    bool getRun(){
   return isRun;}		// 获取串口是否在运行
    bool getAuto(){
   return isAuto;}		// 获取是否为自动模式
private:
    QString begin,mid,end;              // 自定义数据格式
    QString text;
    bool isPortOpen;                    // 标识串口端口是否打开
    QStringList list;

    QCustomPlot *Plot;                  // 图层
    QVector <QCPItemTracer *>   trace;  // 曲线上的跟随点
    QVector <QCPItemText *  >   Ptext;  // 每条曲线上的显示的文字
    QVector <QVector<double>>   YData;  // Y轴数据,可具有多个数据曲线
    QVector <double>            XData;  // x轴数据
    QVector<QPen>               pen;    // 曲线颜色的区分
    int Clk,xMid;                       // x轴的刻度
    int countLine;                      // 曲线的数量
    int firstLine;
    bool isAuto,isRun;                  // 标识是否自动,是否在运行
};
  1. 再贴点串口数据解析函数的代码
/*
 * 串口数据的解析
 */
void Handle::analyData()
{
   
	// 进行数据提取,比如begin="[",mid=",",end="]",串口数据为,30][10,20,30][...
	// 
    int _end = text.indexOf(begin);
    text.remove(0,_end+1);		// 移除前面多余的数据,比如移除,30][,还剩10,20,3
  • 11
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 66
    评论
示波器相信大家都知道了,在设备的连接汇总,通过示波器判断设备的连接方式,检测设备的兼容性等都是非常重要的,这款ComDigitalScopeV100串口示波器软件功能丰富,是一款集硬件设备的检测与串口的连接,查看各种示波器的变化数据,支持恢复,暂停,移动,调焦,放大,缩小, X 轴调节,Y 轴调节等功能于一体的工具,有需要的用户千万不要错过哦。 ComDigitalScopeV100是一款功能丰富的串口示波器软件,该软件主要您可以将示波器的图像调整到适应您浏览大小的比例,也可以直接缩放到最大化,方便您观察不同数据段的波形变化。 本程序在相应硬件(如USB转TTL,高速RS232等)支持下能够进行串口高速数据采集,并使数据在PC机上实时图形显示。 正常操作时,点击START按钮,打开串口接收功能,软件将从串口接收到的数据实时图形化显示。 下位机只要按照说明书的格式通过串口向上发送数据,上位机即可将接收到的数据显示成为波形,有AA55,CRC,SUM的数据校验方式。 当下位机持续向上位机发送满足要求的数据时,软件则会将收到的数据显示为1-8条曲线。 您可根据需要任意扩大缩小图形,并可保存以备下次分析。同时该程序还具有串口调试助手功能。 这是一款功能极其强大的串口调试工具,界面明了,易于使用,若应用于下位机程序开发等工作,将大大提高您的开发效率,成为您必不可缺的开发助手。 ComDigitalScopeV100 有两条坐标T0 T1 ,有T0,T1之间最大最小值显示。可更改各个数据通道名称,以及数据显示倍数显示调整等功能。 试用本,COM1,波特率为9600bit/s。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 66
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值