当前位置: 首页 > news >正文

串口助手(串口发送接收数据, 定时, 清空, hex显示)

文章目录

  • 前言
  • 一、串口接收数据
      • 1. 默认接收,换行,hex显示
      • 2. 清空接收区数据
      • 3. 保存接受区数据
  • 二、串口发送数据
      • 1. 默认发送
      • 2. 定时发送
  • 三、串口助手优化
      • 1. 设置组合框当前内容。
      • 2. 未检测到串口,弹出警告。
      • 3. 载入文件
  • 总结

前言

这篇文章继续介绍 自制串口助手。串口助手(上)


一、串口接收数据

1. 默认接收,换行,hex显示

串口接收数据时,可以选择 “接收时间”, " HEX显示", “自动换行”。
在这里插入图片描述
在 Qt 中,通过 QSerialPortread( ) 函数可以实现串口的读取数据。

QSerialPort 会在串口有数据收到时发出 readyRead( ) 信号,可以在其槽函数里进行数据的接收。

// 连接信号与槽
connect(serial, SIGNAL(readyRead()), this, SLOT(receiveData()));
void Widget::receiveData()
{QByteArray data = serial->readAll();			 // readAll() 读取串口缓冲区的所有数据bytesReceive += QString(data).size();			// size() 获取接收数据的字节大小qDebug() << bytesReceive;// 检查读取是否成功if (data.isEmpty()){qDebug() << "Failed to read the data from serial port";return;}// 处理数据if(ui->checkBox_7->isChecked())    						// toHex() 转换为 hex{QString hexString = data.toHex(' ');ui->plainTextEdit->insertPlainText(hexString);}else if(ui->checkBox_10->isChecked())    				 // appendPlainText()换行{ui->plainTextEdit->appendPlainText(QString(data));}else if(ui->checkBox->isChecked())        				 // 接收时间{// currentDateTime ()获取当前时间QDateTime currentTime = QDateTime::currentDateTime(); // 显示接收时间 QString strDateTime = currentTime.toString(QString("【") + "yyyy-MM-dd hh:mm:ss" + QString("】  "));ui->plainTextEdit->insertPlainText(strDateTime);ui->plainTextEdit->insertPlainText(QString(data));}else{ui->plainTextEdit->insertPlainText(QString(data));		// 默认数据接收,}ui->label_13->setText("Received: " + QString::number(bytesReceive));
}

注意
appendPlainText(const QString &text ) : 将带有文本的新段落附加到文本编辑的末尾。

insertPlainText ( const QString &text) : 在当前光标位置插入文本的便利插槽。

setPlainText(const QString &text): 将文本编辑的文本更改为字符串文本。将删除任何以前的文本

2. 清空接收区数据

使用 clear( ) 函数可以清空接受区的数据。


ui->plainTextEdit->clear();

3. 保存接受区数据

  1. 使用 文件对话框类QFileDialog 中的静态函数 getSaveFileName 函数 ,返回用户选择要保存的文件路径 ( filename )。

在这里插入图片描述
在这里插入图片描述

  1. 创建一个 QFile 对象 ( file ),以写入模式( QIODevice::WriteOnly ) 打开文件。

  2. 使用 QTextStream 创建一个数据流 ( out ),将文件与数据流关联。

  3. 使用了 QPlainTextEdittoPlainText( ) 函数来获取 接受区 中的所有纯文本数据。
    使用数据流将 接受区中的文本写入到文件中。

详细代码:

/*得到要保存的的文件名*/
QString filename = QFileDialog::getSaveFileName(this, "另存为", "C:/", tr("Text Files(*.txt)"));/*判断文件名是否为空,文件是否保存成功*/
if(!filename.isEmpty())
{QFile file(filename);if(file.open(QIODevice::WriteOnly)){QTextStream out(&file);       				 //数据流 写数据进文件out << ui->plainTextEdit->toPlainText();file.close();						// 关闭文件}
}

效果展示:
在这里插入图片描述

二、串口发送数据

1. 默认发送

使用 QSerialPort 类的 write( ) 函数进行发送。
write( ) 返回值 是 实际写入的字节数.

write(const char *data);
void Widget::sendData()
{QString data = ui->lineEdit_9->text();				// 获取要发送的文本// 由于data 是QString ,需要转换为 const char *QByteArray byteArray = data.toUtf8();     			// 1.将QString -> QByteArrayconst char *data1 = byteArray.data();     			// 2.获取 QByteArray 的数据指针int Send = serial->write(data1);					// 3.发送数据,返回写发送的字节数bytesSend += Send;									// 累计发送数据的个数ui->label_14->setText("Send: " + QString::number(bytesSend));
}

按下 “ 发送” 按钮,发送数据:

void Widget::on_send_clicked()
{sendData();
}

2. 定时发送

通过自己设置的时间间隔来定时发送数据。
在这里插入图片描述

定时发送 需要依靠于定时器类 QTimer

// 创建定时器对象QTimer timer2;timer2.setInterval(ui->ms_time->text().toInt());		// toInt将字符串转换为int类型。获取,设置时间间隔。timer2.start();									  // 启动定时器// 连接信号与槽,到达时间间隔则进入 timerSend 槽函数
connect(&timer2,SIGNAL(timeout()),this,SLOT(timerSend()));		
void Widget::timerSend()          // 定时发送数据
{if(ui->checkBox_11->isChecked()){timer2.setInterval(ui->ms_time->text().toInt());    //更新右下角时间sendData();}
}

效果如下图:
在这里插入图片描述

三、串口助手优化

1. 设置组合框当前内容。

当 组合框 中有多个选项卡时,可以使用 setCurrentIndex( ) 函数来选择当前显示的选项卡。
参数 index 要显示的选项卡的索引值,选项卡的索引值从 0 开始计数

void setCurrentIndex(int index);

2. 未检测到串口,弹出警告。

使用 QMessageBox 类的 静态成员函数 warning 来弹出消息对话框。

在这里插入图片描述

QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton)

其中:

  • parent:指定该对话框所属的父组件,通常传入 this 即可,代表当前组件。
  • title:警告对话框的标题。
  • text:警告对话框的内容(警告信息)。
  • buttons:指定对话框上出现的按钮。默认情况下只会显示 OK 按钮。可以选择其他的按钮,如 Yes、No、Cancel、Apply、Close 等。
  • defaultButton:指定哪个按钮应该被默认选中。默认情况下不会有默认选中的按钮。

3. 载入文件

如果我们使用多文本发送数据,可以点击 " 载入",即可将保存好的文本在文本框中显示,直接发送即可。
在这里插入图片描述

// 1.打开文件对话框选择要打开的文件,并返回其路径
QString fileName = QFileDialog::getOpenFileName(this, "打开列表", "C:/Users/w/Desktop/test1", tr("Text Files(*.txt)"));// 2. 根据路径创建 QFile 对象
QFile file(fileName);QString one = "";
QString two = "";// 3. 以可读可写的模式打开文件
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{// 4.创建一个数据流 in,将文件与数据流关联QTextStream in(&file);// 5. 数据流读出数据in >> one;in >> two;// 6. 将文本显示在文本框中ui->lineEdit->setText(one);ui->lineEdit_2->setText(two);// 关闭文件file.close();
}

总结

大家可以在此基础上 对自制的 串口助手 加以改进和开发。

相关文章:

串口助手(串口发送接收数据, 定时, 清空, hex显示)

文章目录 前言一、串口接收数据1. 默认接收&#xff0c;换行&#xff0c;hex显示2. 清空接收区数据3. 保存接受区数据 二、串口发送数据1. 默认发送2. 定时发送 三、串口助手优化1. 设置组合框当前内容。2. 未检测到串口&#xff0c;弹出警告。3. 载入文件 总结 前言 这篇文章…...

bp神经网络

%% 2.读取数据&#xff08;两个文件&#xff09; datareadmatrix(C:\Users\Administrator\Desktop\synthetic_01.csv); file_lengthlength(data); for i1:file_length %用for循环去导入第二个csv文件 namedata(i); pathstrcat(C:\Users\Administrator\Desktop\ydata.…...

strace交叉编译后对特定文件的写流程进行监控和过滤

交叉编译 为了支持strace对pid进行解析&#xff0c;因系统默认支持的strace版本较低&#xff0c;需要使用较新的版本对strace进行交叉编译&#xff0c;这里使用了github上的 https://github.com/strace/strace/releases 发布的strace v5.19版本&#xff0c;2022-08-12发布。lo…...

初识网络之TCP网络套接字

目录 一、TCP常用网络接口 1. 监听服务器 2. 接收链接 3. 发起连接 二、实现一个简单的tcp程序 1. 日志函数 2. 服务端文件 2.1 .hpp文件 2.2 .cpp文件 3. 客户端文件 3.1 .hpp文件 3.2 .cpp文件 4. 程序测试 三、实现支持多个用户并发访问的tcp程序 1. 当前程序…...

自然语言处理从入门到应用——自然语言处理的基本问题:文本分类(Text Classification, Text Categorization)

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 文本分类&#xff08;Text Classification, Text Categorization&#xff09;是最简单也是最基础的自然语言处理问题。即针对一段文本输入&#xff0c;输出该文本所属的类别&#xff0c;其中&#xff0c;类别是事先定义…...

【论文】——Robust High-Resolution Video Matting with Temporal Guidance浅读

视频matting 时序监督 摘要 我们介绍了一种稳健、实时、高分辨率的人类视频抠图方法&#xff0c;该方法取得了新的最先进性能。我们的方法比以前的方法轻得多&#xff0c;可以在Nvidia GTX 1080Ti GPU上以76 FPS处理4K&#xff0c;以104 FPS处理HD。与大多数现有的逐帧作为独…...

第四章、用户体验五要素之范围层解析(本文作用是通俗讲解,让你更容易理解)

把用户需求和产品目标转换成特定的产品时应该提供给用户什么样的内容或者功能就变成了范围层。 范围层就是定义需求。如果不能很好的定义需求&#xff0c;那么你的软件永远都是测试待发布版本。如果产品只是负责人脑海中的一个不定型印象&#xff0c;那将是灾难性的。 1、产品负…...

计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现

文章目录 导文文章重点前言课题内容相关技术与方法介绍技术分析技术设计技术设计技术实现方面系统测试和优化总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现 文章重点 前言 本文介绍了一种基于Python的农业温室智…...

Java 进阶 -- 流

Java I/O, NIO, and NIO.2 BaseStream<T, S extends BaseStream<T, S>> extends AutoCloseable 流(streams)的基本接口&#xff0c;流是支持顺序和并行聚合操作的元素序列。下面的例子演示了一个使用流类型stream和IntStream的聚合操作&#xff0c;计算红色小部件…...

硬件 TCP/IP 协议栈

目录 全硬件的TCP/IP 协议栈简介以太网接入单片机方案以太网接口芯片CH395Q 简介以太网接口芯片CH395Q 命令简介以太网接口芯片CH395Q 寄存器配置与使用移植CH395Q 源码 TCP_Client 实验TCPClient 配置流程TCPClient 实验硬件设计程序设计下载验证 WebServer 实验WebServer 简介…...

word恢复和粘贴按钮变灰色,不可用怎么办?

如果 Word 中的恢复和粘贴按钮变成灰色&#xff0c;可能是由于以下原因之一&#xff1a; 1. 文档处于只读模式。 2. 与 Office 相关的某些组件已损坏或缺失。 3. Word 的文件权限被配置为只读。 以下是一些可能的解决方法&#xff1a; 1. 检查文档是否处于只读模式。 如果是…...

【unity技巧】Physics2D Raycast、Overlapcircle、OverlapBox检测的用法

文章目录 分析检测地面1. 使用Raycast1.1 介绍1.3 场景窗口可视化1.4 完整实例代码1.4 存在问题1.4.1 问题11.4.2 问题2 2. 使用Overlapcircle2.1 介绍2.2 场景窗口可视化2.3 完整实例代码2.4 存在问题 3. 使用OverlapBox3.1 介绍3.2 场景窗口可视化3.3 完整实例代码3.4 注意事…...

一、kafka入门

Kafka入门 为什么要用消息中间件&#xff1f; 异步处理 场景说明&#xff1a;用户注册后&#xff0c;需要发注册邮件和注册短信。传统的做法有两种1.串行的方式&#xff1b;2.并行方式。 串行方式&#xff1a;将注册信息写入数据库成功后&#xff0c;发送注册邮件&#xff…...

公司新来一00后,真让人崩溃...

2022年已经结束结束了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备今年的金九银十的面试计划。 在此展示一套学习笔记 / 面试手册&#xff0c;年后跳槽的朋友可以好好刷一刷&#xff0c;还是挺有必要的&#xff0c;它几乎涵盖了所有的…...

(1Gb)S28HS01GTGZBHA030/ S28HS01GTGZBHV033/ S28HS01GTGZBHA033 FLASH - NOR闪存器件

产品简介&#xff1a; Infineon 带有HyperBus™的S26HSxT以及S26HLxT Semper™闪存是一种高性能、安全可靠的NOR闪存解决方案。 这些组件集成了关键的安全功能&#xff0c;用于汽车、工业、通信等行业的各种应用。S26HSxT和S26HLxT Semper闪存采用HyperBus接口&#xff0c;符…...

苹果服务端通知v2处理(AppStore Server Notifications V2)

苹果服务端通知v2处理 关键词: App Store Server Notifications V2、Python源码、苹果订阅、JWS、x5c、JSON WEB TOKEN 背景 最近要接入苹果订阅功能&#xff0c;调研后发现订阅生命周期内的状态变更是通过苹果服务端通知返回的(什么时候普通内购也能加上减少掉单的概率)&am…...

matlab 道路点云路缘石边界提取

目录 一、功能概述1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、参考链接一、功能概述 1、算法概述 1、对于扫描线上的每个点,该函数计算这三个特征。 高差特征——计算一个点周围的标准偏差和高度最大差。路缘石点的标准偏差和高度差必须分别在指定的Heig…...

二叉树详解:带你掌握二叉树

目录 前言1. 树型结构1. 1 树的概念1.2 树的特点1.3 树的相关术语 2. 二叉树&#xff08;binary tree&#xff09;2.1 二叉树的概念2.2 二叉树中的特殊树2.2.1 满二叉树2.2.2 完全二叉树 2.3 二叉树的性质 3. 二叉树的遍历3.1 前序遍历3.2 中序遍历3.3 后序遍历3.4 层序遍历 总…...

LNMP网站框架搭建(编译安装)

目录 一、Nginx的工作原理 工作进程&#xff1a; 二、Nginx编译安装安装 三、mysql的编译安装 四、php的编译安装 验证PHP与nginx的是否连接 验证lnmp的是否搭建成功 五、部署 Discuz&#xff01;社区论坛 一、Nginx的工作原理 php-fpm.conf 是控制php-fpm守护…...

详解Servlet API

目录 前言 HttpServlet HttpServletRequest 代码实例 打印请求信息 通过URL中的queryString进行传递。 通过post请求的body&#xff0c;使用form表单传递 通过POST 请求中的 body 按照 JSON 的格式进行传递 HttpServletResponse 核心方法代码实例 设置状态码 自动刷…...

【小白教程】Docker安装使用教程,以及常用命令!

【小白教程】Docker安装使用教程&#xff0c;以及常用命令&#xff01; - 带你薅羊毛最近调试Docker内容&#xff0c;顺手记录一下&#xff0c;我常用的几个命令&#xff01;这里总结一下&#xff0c;方便自己也同时方便大家使用&#xff01; 内容慢慢完善更新&#xff01;如有…...

TypeScript基础

TS编译运行 ts不是在终端运行&#xff0c;是一门中间语言&#xff0c;最终编译为js运行。 手动编译 // 1. ts编译为js npm i -g typescript // 查看版本 tsc -v// 2. ts直接运行&#xff0c;主要用来查看是否报错 npm i -g ts-node // 查看版本 ts-node -v1.手动编译ts代码 …...

QML学习二:Doxygen为qml工程生成代码文档

效果如下: 设置后能够支持.js和.qml文档。 QML学习二:Doxygen为工程生成注释文档 前言一、安装doxyqml二、Doxygen设置1.文档目录设置2.文档目录设置三、添加注释总结前言 好的代码必须配一个好的文档说明,方便以后维护以及学习。 前提条件: 1.安装好了Doxygen代码生成工…...

Vue 有哪些经典面试题?

前言 下面总结了vue的一些经典的面试题&#xff0c;希望对正在找工作面试的小伙伴们提供一些帮助&#xff0c;我们废话少说直接进入整体、 简述一下什么是MVVM模型 MVVM&#xff0c;是Model-View-ViewModel的简写&#xff0c;其本质是MVC模型的升级版。其中 Model 代表数据模…...

pandas速学-DataFrame

一、理解DataFrame 他是一个表格结构&#xff1a;DataFrame 是一个表格型的数据结构 他是有序的&#xff0c;不同值类型&#xff1a;它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。 他可以被看做一个由series组成的…...

在任务与执行策略之间的隐性耦合

我们已经知道&#xff0c; Executor 框架可以将任务的提交与任务的执行策略解耦开来。就像许多对复杂过程的解耦操作那样&#xff0c;这种论断多少有些言过其实了。虽然Executor 框架为制定和修改执行策略都提供了相当大的灵活性&#xff0c;但并非所有的任务都能适用所有的执行…...

Spring Cloud Alibaba Nacos 构建配置中心

构建配置中心 新建命名空间 登录 Nacos 面板&#xff0c;依次点击左侧菜单栏【命名空间→新建命名空间】、填写命名空间名和描述信息&#xff0c;点击【确定】&#xff1a; 新建配置文件 依次点击左侧菜单栏【配置管理→配置列表】、切换到指定命名空间【此处为 shop】、点击…...

华为OD机试真题 Java 实现【猴子爬山】【2023 B卷 100分】,附详细解题思路

一、题目描述 一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯: 每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式? 二、输入描述 输入只有一个整数N(0<N<=50)此阶梯有多少个阶梯。 三、输出描述 输…...

【19JavaScript for 循环】JavaScript for 循环:掌握重复执行的关键

JavaScript for 循环 在JavaScript中&#xff0c;for循环是一种常用的循环结构&#xff0c;它允许您重复执行一段代码&#xff0c;达到循环的目的。 基本语法 for (initialization; condition; iteration) {// 要执行的代码}for循环由以下几个关键部分组成&#xff1a; init…...

MySQL学习(联结,组合查询,全文本搜索)

联结 SQL最强大的功能之一就是能在数据检索查询的执行中联结表&#xff1b; 关系表 为什么要使用关系表&#xff1f; 使用关系表可以储存数据不重复&#xff0c;从而不浪费时间和空间&#xff1b;如果有数据信息变动&#xff0c;只需更新一个表中的单个记录&#xff0c;相关…...

营销型网站建设制作/百度搜索广告价格

C# GetHashCode 的实现方式 在项目中&#xff0c;在使用哈希表时&#xff0c;有时会需要Override GetHashCode。这里给出一种普遍的做法&#xff1a; 版本1&#xff1a; 实现一个helper&#xff0c;传递类型T&#xff0c;返回这个类型的hashcode。函数逻辑很直接&#xff0c;只…...

医疗网站建设案例/重庆高端品牌网站建设

最近自己一直在学习理财相关的东西&#xff0c;所以后面一段时间&#xff0c;可能会多分享一些这方面的学习笔记 其实在学习之前&#xff0c;我一直在思考一个问题&#xff1a;为什么我们在市场上赚不了钱&#xff1f;可能基金还好点&#xff0c;只要行情不是特别差&#xff0…...

滁州网站开发/互联网运营推广

知识点1----ALTER 下列代码意义&#xff1a;向已存在的表my_foods中新增自动排列的列 作为主键 ALTER TABLE my_contacts  --表名称ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST,   --新的 列 id&#xff0c;自动排列&#xff0c;该列于第一位 ADD PRIMARY KEY (id);…...

任务网站建设/搜索引擎调词工具哪个好

B2B是商家/企业与商家/企业的网络交易&#xff0c;例如阿里巴巴、会搜商务网。 B2C是商家企业与消费者的网络交易&#xff0c;比如淘宝商城。 C2C是个体户与消费者的交易&#xff0c;比如淘宝。 b2b&#xff0c;b2c&#xff0c;c2c全面解释&#xff1a; b2b&#xff1a; B2B&am…...

潍坊 企业网站建设/谷歌搜索引擎下载安装

针对国家工程建设标准化信息网站公布的《建筑结构可靠性设计统一标准》中关于建筑结构作用分项系数的调整&#xff0c;现对其在YJK软件中的应用及影响解析如下&#xff1a;在YJK软件中&#xff0c;在建模、上部结构计算、砌体设计、基础设计、施工图设计模块中均有涉及分项系数…...

泰州市网站建设/seo薪资

flex里的[Inspectable]标签用于为as类的属性定义一些可供flex代码提示等使用的信息&#xff0c;比如属性的类型啦合法值啦默认值啦之类的&#xff0c;[Inspectable]标签可以用在属性上&#xff0c;也可以用在getter/setter方法上&#xff0c;写法如下&#xff1a; [Inspectable…...