Qt同步读取串口
头文件
#include "InsScpi.h"
#include <QObject>
#include <QSerialPort>class TestSerial : public QObject
{Q_OBJECT
public:explicit TestSerial(QObject *parent = nullptr);//打开设备bool openDevice(const QString &portName);//关闭设备void closeDevice();//发送数据bool write(const char* cmd, qint64 maxSize);//-- 获取温度 //-- 返回字符串格式://-- "22.3408 22.7402 24.3184 24.6043"QString getTemp(bool& ok, int msec = 500);signals:void sig_finishReadSerial(); //完成串口读取信号private:void init(); //初始化函数private:QSerialPort* m_serialPort = nullptr; //串口QString m_portName = "COM1"; //串口号//串口描述信息using QtSP = QSerialPort;QtSP::BaudRate m_baudRate = QtSP::Baud115200; //波特率QtSP::DataBits m_dataBits = QtSP::Data8; //数据位长度QtSP::Parity m_parity = QtSP::NoParity; //校验位QtSP::StopBits m_stopBits = QtSP::OneStop; //停止位
};
实现
#include <QDebug>
#include <QEventLoop>
#include <QTimer>TestSerial::TestSerial( QObject *parent): QObject{parent}
{(void)init();
}void TestSerial::init()
{//[1] 实例化串口对象if (!m_serialPort){m_serialPort = new QSerialPort();}
}bool TestSerial::openDevice(const QString &portName)
{//[1] 判断串口对象是否实例化if (!m_serialPort){qDebug() << "serial obj is null";return false;}//[2] 判断串口是否已经打开if (m_serialPort->isOpen()){qDebug() << "device is already open";return false;}//[3] 设置串口信息m_portName = portName;m_serialPort->setPortName(m_portName);m_serialPort->setBaudRate(m_baudRate, QSerialPort::AllDirections);m_serialPort->setDataBits(m_dataBits);m_serialPort->setParity(m_parity);m_serialPort->setStopBits(m_stopBits);m_serialPort->setFlowControl(QSerialPort::NoFlowControl);//[4] 打开串口return m_serialPort->open(QIODevice::ReadWrite);
}void TestSerial::closeDevice()
{//[1] 判断串口对象是否实例化if (!m_serialPort){qDebug() << "serial obj is null";return;}//[2] 关闭串口m_serialPort->close();
}bool TestSerial::write(const char *cmd, qint64 maxSize)
{//[1] 判断串口对象是否实例化if (!m_serialPort){qDebug() << "serial obj is null";return false;}//[2] 判断串口是否打开if (!m_serialPort->isOpen()){qDebug() << "serial is not open";return false;}//[3] 发送数据if(maxSize != m_serialPort->write(cmd, maxSize)){qDebug() << "send serial data failed";return false;}return true;
}//-- 获取温度
//-- 返回字符串格式:
//-- "22.3408 22.7402 24.3184 24.6043"
QString TestSerial::getTemp(bool& ok, int msec)
{static QString ret;ret.clear();if (!m_serialPort){qDebug() << "serial obj is null";return "";}QEventLoop loop;QObject::connect(this, &TestSerial::sig_finishReadSerial, &loop, &QEventLoop::quit);QTimer::singleShot(msec, this, [&]{ emit sig_finishReadSerial(); });QByteArray cmdBa = "getTemp()";m_serialPort->clear();if(0 != cmdBa.size()) {if(cmdBa.size() == m_serialPort->write(cmdBa)) ok = true;else ok = false;}auto async = QObject::connect(m_serialPort, &QSerialPort::readyRead, [&]() {auto rcvData = m_serialPort->readAll();ret = QString::fromLatin1(rcvData);emit sig_finishReadSerial();});loop.exec();QObject::disconnect(async);return ret;
}
相关文章:
Qt同步读取串口
头文件 #include "InsScpi.h" #include <QObject> #include <QSerialPort>class TestSerial : public QObject {Q_OBJECT public:explicit TestSerial(QObject *parent nullptr);//打开设备bool openDevice(const QString &portName);//关闭设备…...
如何用上AI视频工具Sora,基于ChatGPT升级Plus使用指南
没有GPT,可以参考这个教程:详情移步至底部参考原文查看哦~ 1.准备工作 详情移步至底部参考原文查看哦~ 详情移步至底部参考原文查看哦~ 4.Sora使用 详情移步至底部参考原文查看哦 参考文章:【包教包会】如何用上AI视频工具Soraÿ…...
对象的状态变化处理与工厂模式实现
一、引言 在 C 编程中,有效地处理对象的状态变化以及合理运用设计模式可以极大地提高代码的可维护性、可扩展性和可读性。本文将深入探讨 C 如何处理对象的状态变化以及如何实现工厂模式。 二、C 中对象的状态变化处理 使用成员变量表示状态 class GameCharacte…...
关于IP代理API,我应该了解哪些功能特性?以及如何安全有效地使用它来隐藏我的网络位置?
IP代理API是一种服务,允许用户通过访问经过中间服务器的网络连接来改变其公开的互联网协议地址(IP),从而达到隐藏真实地理位置的效果。以下是您在选择和使用IP代理API时应关注的一些功能和安全性考虑: 匿名度ÿ…...
在Linux上将 `.sh` 脚本、`.jar` 包或其他脚本文件添加到开机自启动
在Linux上将 .sh 脚本、.jar 包或其他脚本文件添加到开机自启动 在Linux环境中,有时需要将一些程序、脚本或应用程序设置为开机时自动启动。这对于那些需要在系统启动时启动的服务或应用非常有用。本文将介绍如何将 .sh 脚本、.jar 包或其他脚本文件添加到Linux系统…...
[Maven]构建项目与高级特性
有关于安装配置可以看我的另一篇文章:Maven下载安装配置与简介。 构建项目的生命周期和常用命令 这一节的内容熟记即可,要用了认得出来即可。 在Maven出现之前,项目构建的生命周期就已经存在。对项目进行清理、编译、测试、部署等一系列工作…...
【系统架构设计师】真题论文: 论数据分片技术及其应用(包括解题思路和素材)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2020年 试题1)解题思路论文素材参考Hash 分片原理一致性 Hash 分片原理按照数据范围(Range Based)分片原理项目采用的分片方式的实现过程和效果真题题目(2020年 试题1) 数据分片就是按照一定的规则…...
【bWAPP】XSS跨站脚本攻击实战
别低头,皇冠会掉;别流泪,贱人会笑。 0x01、XSS - Reflected (GET) Low 输入的内容直接输出到页面中: 后台服务端没有对输入的参数进行过滤, 构造一个注入xss payload即可: <script>alert(1)</script> 成功弹窗 Medium 审查…...
Ubuntu 22.04,Rime / luna_pinyin.schema 输入法:外挂词库,自定义词库 (****) OK
测试平台: Ubuntu 22.04 sudo apt install ibus-rime 实例 1 :不实用的 实例 2 :实用的 文件使用说明:已经内嵌在文件中了。 ====================================== 实例 1 :不实用的 一共需要 3 个文件,放在用户文件夹下:~/.config/ibus/rime/ # Test A @ Fi…...
多协议视频监控汇聚/视频安防系统Liveweb搭建智慧园区视频管理平台
智慧园区作为现代化城市发展的重要组成部分,不仅承载着产业升级的使命,更是智慧城市建设的重要体现。随着产业园区竞争的逐渐白热化,将项目打造成完善的智慧园区是越来越多用户关注的内容。 然而我们往往在规划前期就开始面临众多难题&#…...
如何高效获取Twitter数据:Apify平台上的推特数据采集解决方案
引言 在数据分析和市场研究领域,Twitter(现在的X)数据一直是重要的信息来源。但是,自从Twitter更改API定价策略后,获取数据的成本大幅提升。本文将介绍一个经济实惠的替代方案。 为什么需要Twitter数据? …...
第二部分:进阶主题 15 . 安全管理 --[MySQL轻松入门教程]
MySQL 数据库的安全管理是一个多方面的工作,涉及到了解和配置数据库的访问控制、加密、备份与恢复策略、日志记录等多个方面。以下是一些关键点: 1. 用户权限管理 最小权限原则:每个用户应该只被授予完成其工作所需的最低限度的权限。定期审查权限:定期检查用户的权限,确…...
力扣hot100——双指针
283. 移动零 class Solution { public:void moveZeroes(vector<int>& nums) {for (int i 0, j 0; j < nums.size() || i < nums.size(); j) {if (j > nums.size()) {nums[i] 0;continue;}if (nums[j]) nums[i] nums[j];}} }; 双指针,一个指…...
【代码随想录day58】【C++复健】 117. 软件构建(拓扑排序);47. 参加科学大会(dijkstra(朴素版)精讲)
117. 软件构建(拓扑排序) 继续边看解析边做题,思考时的问题做个如下的总结: 1. 存边用什么数据结构? 在题目中,我们需要存储节点之间的依赖关系(边信息)。选择适合的数据结构非常重…...
【NLP 16、实践 ③ 找出特定字符在字符串中的位置】
看着父亲苍老的白发和渐渐老态的面容 希望时间再慢一些 —— 24.12.19 一、定义模型 1.初始化模型 ① 初始化父类 super(TorchModel, self).__init__(): 调用父类 nn.Module 的初始化方法,确保模型能够正确初始化。 ② 创建嵌入层 self.embedding n…...
费解的开关(bfs + 哈希表 or 递推)
题目描述: 25盏灯排成一个5x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。 我们用数字“1”表示一盏开着的灯,用数字“0”表示关…...
C语言——实现求出最大值
问题描述:利用C语言自定义函数求出一维数组里边最大的数字 //利用函数找最大数#include<stdio.h>int search(int s[9]) //查找函数 {int i , max s[0] , max_xia 0;for(i0;i<9;i){if(s[i] > max){max_xia i;max s[max_xia];}}return max; } in…...
基于微信小程序的短视频系统(SpringBoot)+文档
💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...
Flutter 中 Sliver 的各种装饰器介绍与使用
在 Flutter 中,Sliver 是一种可以在滚动视图中实现自定义效果的组件。Sliver 组件可以根据滚动位置动态改变其外观和行为。本文将介绍几种常用的 Sliver 装饰器及其使用方法。 1. SliverAppBar SliverAppBar 是一个可以随着滚动而变化的应用栏。它可以在用户向下滚…...
电感的基本概念
电感的定义: 电感一般是由导线绕成空芯线圈或带铁芯的线圈而制成。 当线圈中有电流通过时,线圈周围就会产生磁场,当线圈中流过的是直流电流时,线圆周围就会产生固定的磁场,线圈产生的物理现象就是电磁铁,当…...
从apt-get到yum:Ubuntu20.04下跨平台包管理工具安装指南
从apt-get到yum:Ubuntu 20.04下跨平台包管理工具实战指南 在Linux生态中,不同发行版采用不同的包管理系统——Debian系的apt与RedHat系的yum就是典型代表。当开发者需要在Ubuntu环境下运行原本为CentOS设计的软件时,掌握yum的安装与配置技巧能…...
忍者像素绘卷多场景应用:微信小程序插图、游戏素材、社交配图一站式生成
忍者像素绘卷多场景应用:微信小程序插图、游戏素材、社交配图一站式生成 1. 像素艺术的新纪元 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站,它将传统像素艺术与现代AI技术完美结合。这款工具特别适合需要快速生成高质量像素风格图像…...
零基础玩转mxbai-embed-large-v1:6大核心功能实战,从向量化到摘要生成
零基础玩转mxbai-embed-large-v1:6大核心功能实战,从向量化到摘要生成 1. 引言:为什么选择mxbai-embed-large-v1? mxbai-embed-large-v1是当前自然语言处理领域的一颗新星,这款多功能句子嵌入模型在MTEB基准测试中表…...
终极指南:PrivateGPT增量文档处理策略与动态更新解决方案
终极指南:PrivateGPT增量文档处理策略与动态更新解决方案 【免费下载链接】privateGPT 利用GPT的强大功能与你的文档进行互动,确保100%的隐私保护,无数据泄露风险 项目地址: https://gitcode.com/GitHub_Trending/pr/privateGPT Priva…...
cool-admin(midway版)数据权限缓存:基于用户角色的权限数据预加载
cool-admin(midway版)数据权限缓存:基于用户角色的权限数据预加载 【免费下载链接】cool-admin-midway 🔥 cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js…...
m4s-converter:释放B站缓存价值的格式转换利器
m4s-converter:释放B站缓存价值的格式转换利器 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 价值对比:格式转换前后的效…...
【实战】CodeBuddy使用技巧:5个Skills让编程效率翻倍的隐藏操作
目录摘要一、CodeBuddy不只是代码补全1.1 三种形态,覆盖全开发场景1.2 核心差异化二、Craft模式:一句话从0到上线2.1 实测案例:20分钟出一个完整MVP2.2 多模型切换策略2.3 Figma设计稿一键转代码三、5个效率翻倍的独有技巧3.1 技巧1ÿ…...
全能解析工具UniExtract2:多格式提取的效率革命
全能解析工具UniExtract2:多格式提取的效率革命 【免费下载链接】UniExtract2 Universal Extractor 2 is a tool to extract files from any type of archive or installer. 项目地址: https://gitcode.com/gh_mirrors/un/UniExtract2 在数字化信息处理领域&…...
RIFE智能帧插值技术全解析:从原理到实战的视频流畅度提升指南
RIFE智能帧插值技术全解析:从原理到实战的视频流畅度提升指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/v…...
从ONNX到TPU:跨框架模型部署的编译器避坑指南(2023最新版)
从ONNX到TPU:跨框架模型部署的编译器避坑指南(2023最新版) 当ResNet模型在PyTorch中达到99%的测试准确率时,真正的挑战才刚刚开始——如何让这个模型在边缘设备的TPU芯片上高效运行?这个问题困扰着85%的AI工程师。本文…...
