串口助手(串口发送接收数据, 定时, 清空, hex显示)
文章目录
- 前言
- 一、串口接收数据
- 1. 默认接收,换行,hex显示
- 2. 清空接收区数据
- 3. 保存接受区数据
- 二、串口发送数据
- 1. 默认发送
- 2. 定时发送
- 三、串口助手优化
- 1. 设置组合框当前内容。
- 2. 未检测到串口,弹出警告。
- 3. 载入文件
- 总结
前言
这篇文章继续介绍 自制串口助手。串口助手(上)
一、串口接收数据
1. 默认接收,换行,hex显示
串口接收数据时,可以选择 “接收时间”, " HEX显示", “自动换行”。
在 Qt 中,通过 QSerialPort 的 read( ) 函数可以实现串口的读取数据。
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. 保存接受区数据
- 使用 文件对话框类QFileDialog 中的静态函数 getSaveFileName 函数 ,返回用户选择要保存的文件路径 ( filename )。
-
创建一个 QFile 对象 ( file ),以写入模式( QIODevice::WriteOnly ) 打开文件。
-
使用 QTextStream 创建一个数据流 ( out ),将文件与数据流关联。
-
使用了 QPlainTextEdit 的 toPlainText( ) 函数来获取 接受区 中的所有纯文本数据。
使用数据流将 接受区中的文本写入到文件中。
详细代码:
/*得到要保存的的文件名*/
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. 默认接收,换行,hex显示2. 清空接收区数据3. 保存接受区数据 二、串口发送数据1. 默认发送2. 定时发送 三、串口助手优化1. 设置组合框当前内容。2. 未检测到串口,弹出警告。3. 载入文件 总结 前言 这篇文章…...
bp神经网络
%% 2.读取数据(两个文件) 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进行解析,因系统默认支持的strace版本较低,需要使用较新的版本对strace进行交叉编译,这里使用了github上的 https://github.com/strace/strace/releases 发布的strace v5.19版本,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)
分类目录:《自然语言处理从入门到应用》总目录 文本分类(Text Classification, Text Categorization)是最简单也是最基础的自然语言处理问题。即针对一段文本输入,输出该文本所属的类别,其中,类别是事先定义…...

【论文】——Robust High-Resolution Video Matting with Temporal Guidance浅读
视频matting 时序监督 摘要 我们介绍了一种稳健、实时、高分辨率的人类视频抠图方法,该方法取得了新的最先进性能。我们的方法比以前的方法轻得多,可以在Nvidia GTX 1080Ti GPU上以76 FPS处理4K,以104 FPS处理HD。与大多数现有的逐帧作为独…...
第四章、用户体验五要素之范围层解析(本文作用是通俗讲解,让你更容易理解)
把用户需求和产品目标转换成特定的产品时应该提供给用户什么样的内容或者功能就变成了范围层。 范围层就是定义需求。如果不能很好的定义需求,那么你的软件永远都是测试待发布版本。如果产品只是负责人脑海中的一个不定型印象,那将是灾难性的。 1、产品负…...

计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现
文章目录 导文文章重点前言课题内容相关技术与方法介绍技术分析技术设计技术设计技术实现方面系统测试和优化总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现 文章重点 前言 本文介绍了一种基于Python的农业温室智…...
Java 进阶 -- 流
Java I/O, NIO, and NIO.2 BaseStream<T, S extends BaseStream<T, S>> extends AutoCloseable 流(streams)的基本接口,流是支持顺序和并行聚合操作的元素序列。下面的例子演示了一个使用流类型stream和IntStream的聚合操作,计算红色小部件…...

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

word恢复和粘贴按钮变灰色,不可用怎么办?
如果 Word 中的恢复和粘贴按钮变成灰色,可能是由于以下原因之一: 1. 文档处于只读模式。 2. 与 Office 相关的某些组件已损坏或缺失。 3. Word 的文件权限被配置为只读。 以下是一些可能的解决方法: 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入门 为什么要用消息中间件? 异步处理 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种1.串行的方式;2.并行方式。 串行方式:将注册信息写入数据库成功后,发送注册邮件ÿ…...

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

(1Gb)S28HS01GTGZBHA030/ S28HS01GTGZBHV033/ S28HS01GTGZBHA033 FLASH - NOR闪存器件
产品简介: Infineon 带有HyperBus™的S26HSxT以及S26HLxT Semper™闪存是一种高性能、安全可靠的NOR闪存解决方案。 这些组件集成了关键的安全功能,用于汽车、工业、通信等行业的各种应用。S26HSxT和S26HLxT Semper闪存采用HyperBus接口,符…...

苹果服务端通知v2处理(AppStore Server Notifications V2)
苹果服务端通知v2处理 关键词: App Store Server Notifications V2、Python源码、苹果订阅、JWS、x5c、JSON WEB TOKEN 背景 最近要接入苹果订阅功能,调研后发现订阅生命周期内的状态变更是通过苹果服务端通知返回的(什么时候普通内购也能加上减少掉单的概率)&am…...
matlab 道路点云路缘石边界提取
目录 一、功能概述1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、参考链接一、功能概述 1、算法概述 1、对于扫描线上的每个点,该函数计算这三个特征。 高差特征——计算一个点周围的标准偏差和高度最大差。路缘石点的标准偏差和高度差必须分别在指定的Heig…...

二叉树详解:带你掌握二叉树
目录 前言1. 树型结构1. 1 树的概念1.2 树的特点1.3 树的相关术语 2. 二叉树(binary tree)2.1 二叉树的概念2.2 二叉树中的特殊树2.2.1 满二叉树2.2.2 完全二叉树 2.3 二叉树的性质 3. 二叉树的遍历3.1 前序遍历3.2 中序遍历3.3 后序遍历3.4 层序遍历 总…...

LNMP网站框架搭建(编译安装)
目录 一、Nginx的工作原理 工作进程: 二、Nginx编译安装安装 三、mysql的编译安装 四、php的编译安装 验证PHP与nginx的是否连接 验证lnmp的是否搭建成功 五、部署 Discuz!社区论坛 一、Nginx的工作原理 php-fpm.conf 是控制php-fpm守护…...

详解Servlet API
目录 前言 HttpServlet HttpServletRequest 代码实例 打印请求信息 通过URL中的queryString进行传递。 通过post请求的body,使用form表单传递 通过POST 请求中的 body 按照 JSON 的格式进行传递 HttpServletResponse 核心方法代码实例 设置状态码 自动刷…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...