记录下QT读取串口数据时遇到的问题

news2024/11/16 23:53:50

一、如果使用QT读取串口数据

使用定时器定时发送信号,然后调用槽函数来读取串口数据,串口数据读取过程加锁。

timer1 = startTimer(15);
connect(this, SIGNAL(callCapData()), this, SLOT(CapData()));
void ecgfrom::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == timer5) {
    	if(...)
    	{
    	...;
    	}
    }
}

当有多个窗体时,使用线程。

ecgfrom::ecgfrom(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ecgfrom)
{
    ui->setupUi(this);

    //推荐写法:去掉this.(加上this,耗时任务仍在主线程中完成)
    m_myThread = new QThread();
    // 将工作类(这里是窗体显示)移入线程,
    // 什么时候开始执行,执行完成后需要干什么,都是通过信号槽来完成。
    this->moveToThread(m_myThread);
    m_myThread->start();

	/* 其他处理 */    
	...;
}

二、串口通信的过程

概念:
1、一个数据包(帧)长度
在这里插入图片描述
在这里插入图片描述
以上图为例,数据帧(包)长度为33(Byte)

2、按每次32个数据包,处理接收缓冲区数据。(读取一次串口接收缓冲区数据能读到32个数据)

qint32 tempval[256] = {0}; // 每个数据 4 字节,共4*256 = 1024 字节

3、时间频率为15ms(定时器定时每15ms去读取一次串口接收缓冲区数据)

timer1 = startTimer(15);

采集卡(外设)与电脑通过串口通信流程:

启发自这个视频链接: https://www.bilibili.com/video/BV1Pd4y1k7sE/?spm_id_from=333.999.0.0&vd_source=b91967c499b23106586d7aa35af46413

在这里插入图片描述
当电脑端的应用程序点击打开串口时,发送缓冲区的数据会以指定的波特率发送至电脑短的FIFO中,电脑端在点击读取串口数据时,会从FIFO中读取指定大小的数据,同时被读出的数据 会从FIFO中出队列,等待下次发送过来的数据。

从下面的

qint32 tempval[256] = {0}; // 每个数据 4 字节,共4*256 = 1024 字节

可知,电脑端接收缓冲区中的数据至少为1024个字节,应该会更大(由于下位机(采集卡)每次只发送 256 个数据,所以及时我将读取的时间调整为更大,tempval数据的大小调整为512个字节,可以读取512个字节,但是只是 0 — 255有数值,剩下的256 — 512个都为 0)。

重视这个问题,可以解决问题 —— 滤除杂波(这里是起始数据乱了)。

方法是,再开个定时器,先将杂波数据读出来之后,再将该定时器关闭和把原来采样定时器开启。

timer5 = startTimer(15);
/* 作用:消除杂波 */
      if(event->timerId() == timer5) { // 15ms

          if (CapType==0)
          {
              if(viewing)
              {
                  times+=1;
                  if(times<=90)
                  {
                    qDebug()<<times<<"start read";
                  	emit callCapDataDel();
                    qDebug()<<"end read";
                    if (times==90)
                    {
                        timer2 = startTimer(15); // 启动原先负责采样的定时器
                        killTimer(timer5);
                        qDebug()<<"killTimer5";
                    }
              }
          }
      }
}                        	      
void ecgfrom::CapDataDel()
{
    mutex.lock();
    if(CapType==0)
    {
        m_Libcom.ReadCoom(tempval); // 将杂波滤除
    }
    mutex.unlock();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/70807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Allegro如何批量把器件放在指定的格点上操作指导

Allegro如何批量把器件放在指定的格点上操作指导 Allegro支持批量把器件放在指定的格点上,具体操作如下 以下图为例,器件在小数点位以后的格点上,如果只是个别器件,只需要切换好格点,并且手动移动下就可以了,如果有大量的器件都是这样,这样会比较费时 选择File-change…

Java中注解的理解

一.什么是注解 1.Annotation是从JDK5开始引入的最新技术 2.Annotation的作用&#xff1a; 1&#xff09;不是程序本身&#xff0c;可以对程序做出解释&#xff0c;(这一点和注释(comment)没什么区别)。 2&#xff09;可以被其他程序&#xff08;比如编译器&#xff09;读取…

【论文随笔】Time-Incremental Learning from Data Using Temporal Logics

[1] E. Aasi, M. Cai, C. I. Vasile, and C. Belta, “Time-Incremental Learning from Data Using Temporal Logics.” arXiv, Dec. 28, 2021. doi: 10.48550/arXiv.2112.14300. 好久没看文献了&#xff0c;来更一篇 Outline time-variant weights of STL weights are learn…

【Windows基础】Windows用户和用户组的管理

一、用户账户 什么是用户账户&#xff1f; 不同的用户身份拥有不同的权限每个用户包含了一个名称和一个密码每一个用户登录系统后&#xff0c;拥有不同的操作权限。为不同的账户赋权限&#xff0c;也就是为不用账户的SID赋权限&#xff01;每个用户都有自己的配置文件(家目录…

opcj1——mac下如何快速搭建Java开发环境

这是我们OPCJ的第一篇&#xff0c;搭建基础的开发环境。我们的服务会不断增加新组件&#xff0c;我们这里先介绍如何快速搭建开发环境。一般来说Java程序员的电脑上总是会有一些已经配置好的idea、git、maven或者其他的&#xff0c;如果有的话&#xff0c;调整一下直接用就行了…

欧科云链对话ChatGPT:Web3会颠覆互联网?

最近&#xff0c;要说什么最火&#xff1f; 身为“当红炸子鸡”的ChatGPT 说第二就没人敢说第一 ChatGPT&#xff0c;是OpenAI基于Ai技术而实现的一个辅助引擎&#xff0c;通过大量的资料学习&#xff0c;打造出一个类似搜索引擎一样可以回答问题的工具。 它的爆火&#xff0c;…

uniapp使用unipush推送及java后台推送代码(含本地打包apk使用unipush推送)

你懂的&#xff0c;又是项目用到了&#xff0c;作为程序猿义无反顾需要定时 “进化” &#xff0c;硬头皮去写&#xff0c;虽然曾经作为android开发者写了很多的推送&#xff0c;但是uniapp的推送也是有所差异的&#xff0c;记录一下&#xff0c;以后留用。 首先uniapp的推送u…

深度学习-Tensorboard可视化面板

文章目录简介安装SummaryWriter新建添加数字运行添加图片添加直方图实战前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 Tensorboard是Tensorflow官方提供的实用可视化工具&#xf…

[附源码]JAVA毕业设计宿舍管理系统(系统+LW)

[附源码]JAVA毕业设计宿舍管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

「微服务系列」微服务框架的介绍

为什么要学习微服务框架知识&#xff1f; 从求知的角度、企业的角度&#xff0c;微服务都是必知必会的&#xff01; 需要学习哪些微服务知识&#xff1f; 传统单点架构&#xff0c;无法承载高并发场景&#xff1b;微服务领域按功能模块&#xff0c;将应用拆分成多个服务。大型…

【JavaScript高级】07-ES5、ES6中实现继承,原型及原型链

ES5、ES6实现继承&#xff0c;原型及原型链理解ES5实现继承对象和函数的原型对象的原型函数的原型new、constructor函数原型上的属性优化通过构造函数创建对象原型链原型链实现的继承借用构造函数继承寄生组合实现继承ES5实现继承 对象和函数的原型 对象的原型 JavaScript当…

C#实现发送钉钉工作通知消息

一、实现效果 实现在钉钉的工作中心里面发送消息(比如发送【文本消息】、【markdown消息】等不同类型的内容),实现效果如下: 二、实现思路 2.1、了解钉钉学习路径图 钉钉开放文档 (dingtalk.com)https://open.dingtalk.com/document/org-roadmap 2.2、学习了解钉钉的接入…

cubeIDE开发, stm32的RS485/232串口通信开发要点

一、stm32串口通信 stm32串口通信一般是指通过UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;通用异步收发传输器传输数据&#xff0c;UART 作为异步串口通信协议的一种&#xff0c;工作原理是将传输数据的每个字符一位接一位地传输&#xff0c;其在…

数据库01_内存分页管理_分段管理_设备管理_IO处理_索引文件结构_文件目录_位示图---软考高级系统架构师008

可以看到数据库方面的考点.在架构里面考4,5分左右 这里只说比较重要的标红的考点. 然后我们来看ER图: 1.首先看一下实体的概念:实体是指的客观存在并相互区别的事物,可以举一个例子,比如一家超市,那么超市经理,员工,部门经理,业务员等等,这都是名词,都是属于实体. 2.然后…

知识图谱-KGE-语义匹配-双线性模型(打分函数用到了双线性函数)-2013:NTN(Neural Tensor Network)

【paper】 Reasoning With Neural Tensor Networks for Knowledge Base Completion 【简介】 本文是斯坦福大学陈丹琦所在团队 2013 年的工作&#xff0c;好像是发表在一个期刊上的。文章提出了用于知识库补全的神经网络框架 NTN&#xff08;Neural Tensor Network&#xff09…

Golang代码质量检查工具GolangCI-Lint(学习笔记)

Golang代码质量检查工具GolangCI-Lint 直接用下面go get的方式会出现报错 go get github.com/golangci/golangci-lint/cmd/golangci-lint解决方法 直接去 https://github.com/golangci/golangci-lint/releases 下载对应版本 go < 1.9 isn’t supported go1.9 is officia…

机器学习之数据分离与混淆矩阵

文章目录[TOC](文章目录)前言数据分离混淆矩阵實戰總結前言 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文就介绍了机器学习的基础内容之数据分离与混淆矩阵。 数据分离 前面我们…

多线程间的同步控制和通信

用多线程并发处理&#xff0c;目的是为了让程序更充分地利用CPU &#xff0c;好能加快程序的处理速度和用户体验。如果每个线程各自处理的部分互不相干&#xff0c;那真是极好的&#xff0c;我们在程序主线程要做的同步控制最多也就是等待几个工作线程的执行完毕&#xff0c;如…

weston input 概述

weston input 概述 零、前言 本文描述了有关于 weston (基于 wayland 协议一种显示服务器的实现) 中有关于输入设备管理的部分;为了聚焦于此,本文不会对 weston 整体或 wayland 协议进行过多的阐述. 考虑到读者可能存在不同的需求,采用分层次的描述方式,主要面向以下两类人群…

Android Studio 导入opencv异常报错紧急救援

Download OpenCV from SourceForge.net 1、下载Android demo之后导入Android Studio 如下图所示 报错信息如下 A problem occurred configuring root project opencv_samples. > Could not resolve all artifacts for configuration :classpath.> Could not find org.j…