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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS信息收集(小迪网络安全笔记~

免责声明&#xff1a;本文章仅用于交流学习&#xff0c;因文章内容而产生的任何违法&未授权行为&#xff0c;与文章作者无关&#xff01;&#xff01;&#xff01; 附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;…

基于w25q128的智能门禁

项目需求 1. 矩阵键盘输入密码&#xff0c;正确则开锁&#xff0c;错误则提示&#xff0c;三次错误蜂鸣器响3秒&#xff1b; 2. 按下#号确认输入&#xff0c;按下*号修改密码&#xff1b; 3. 密码保存在 W25Q128 里&#xff1b; 4. OLED 屏幕显示信息。

【计算机网络】期末考试预习复习|中

作业讲解 转发器、网桥、路由器和网关(4-6) 作为中间设备&#xff0c;转发器、网桥、路由器和网关有何区别&#xff1f; (1) 物理层使用的中间设备叫做转发器(repeater)。 (2) 数据链路层使用的中间设备叫做网桥或桥接器(bridge)。 (3) 网络层使用的中间设备叫做路…

开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述

定义 开放词汇目标检测&#xff08;Open-Vocabulary Object Detection, OVOD&#xff09;是一种目标检测任务&#xff0c;旨在检测和识别那些未在训练集中明确标注的物体类别。传统的目标检测模型通常只能识别有限数量的预定义类别&#xff0c;而OVOD模型则具有识别“开放词汇…

单点登录平台Casdoor搭建与使用,集成gitlab同步创建删除账号

一&#xff0c;简介 一般来说&#xff0c;公司有很多系统使用&#xff0c;为了实现统一的用户名管理和登录所有系统&#xff08;如 GitLab、Harbor 等&#xff09;&#xff0c;并在员工离职时只需删除一个主账号即可实现权限清除&#xff0c;可以采用 单点登录 (SSO) 和 集中式…

算法笔记—前缀和(动态规划)

【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) #include <initializer_list> #include <iostream> #include <vector> using namespace std;int main() {//输入数据int n,q;cin>>n>>q;vector<int> arr;arr.resize(n1);for(int i1;i<…

力扣438-找到字符串中所有字母异位词

力扣438-找到字符串中所有字母异位词 力扣438-找到字符串中所有字母异位词原题地址&#xff1a;https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/ 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词的子串&#x…

linux-----进程及基本操作

进程的基本概念 定义&#xff1a;在Linux系统中&#xff0c;进程是正在执行的一个程序实例&#xff0c;它是资源分配和调度的基本单位。每个进程都有自己独立的地址空间、数据段、代码段、栈以及一组系统资源&#xff08;如文件描述符、内存等&#xff09;。进程的组成部分&am…

胡九道:经典传承(贵宾酒)

胡九道的由来 在辽阔的科尔沁草原上&#xff0c;有一个美丽的女子&#xff0c;她才貌双全&#xff0c;知书达礼&#xff0c;她就是历史上著名的孝庄皇后。大玉儿不仅聪慧过人&#xff0c;而且深具母仪天下的气质&#xff0c;深受百姓和皇室的敬爱。当她跟随丈夫皇太极入关来到…

【Mongo工具】Mongo迁移工具之Mongo-shake

Mongo-Shake 简介 Mongo-Shake 是一个基于 MongoDB 操作日志&#xff08;oplog&#xff09;的通用服务平台。它从源 MongoDB 数据库中获取操作日志&#xff0c;并在目标 MongoDB 数据库中重放&#xff0c;或者通过不同的隧道发送到其他终端。如果目标端是 MongoDB 数据库&…

EGO Swarm翻译

目录 摘要 Ⅰ 介绍 Ⅱ 相关工作 A . 单四旋翼局部规划 B . 拓扑规划 C. 分布式无人机集群 Ⅲ 基于梯度的局部规划隐式拓扑轨迹生成 A.无需ESDF梯度的局部路径规划 B.隐式拓扑轨迹生成 Ⅳ 无人机集群导航 A 机间避碰 B. 定位漂移补偿 C. 从深度图像中去除agent Ⅴ …

虚拟机断网没有网络,需清理内存,删除后再重启

进入NetworkManager可能没权限&#xff0c;设置权限777 to

整合 Knife4j 于 Spring Cloud 网关:实现跨服务的 API 文档统一展示

&#x1f3af;导读&#xff1a;本文档概述了构建和配置基于JDK 17、Spring Boot 3.0.7及Spring Cloud 2022.0.3的微服务系统&#xff0c;特别聚焦于集成Knife4j以增强API文档管理和接口测试功能。文中详细介绍了如何在Spring Boot应用中添加Knife4j依赖、配置Swagger UI路径和A…

使用光耦合器测量电压:实用指南

光耦合器&#xff0c;也称为光隔离器&#xff0c;是用于电气隔离和信号传输的多功能组件。其应用之一是测量电路中的电压。本文介绍了如何利用光耦合器进行电压测量&#xff0c;阐明了其操作和实际用途。 使用光耦合器进行电压测量的工作原理 使用光耦合器进行电压测量依赖于其…

LeetCode刷题day29——动态规划(完全背包)

LeetCode刷题day29——动态规划&#xff08;完全背包&#xff09; 377. 组合总和 Ⅳ分析&#xff1a; 57. 爬楼梯&#xff08;第八期模拟笔试&#xff09;题目描述输入描述输出描述输入示例输出示例提示信息 分析&#xff1a; 322. 零钱兑换分析&#xff1a; 279. 完全平方数分…

【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器

作为主设备写入多个线圈和寄存器 文章目录 作为主设备写入多个线圈和寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、写入多个线圈2.1 数据格式2.2 发送数据2.3 结果3、写入多个寄存器3.1 数据格式3.2 发送数据3.3 结果本文将实现STM32作为ModBus主…

Unity 圆形循环复用滚动列表

一.在上一篇垂直循环复用滚动列表的基础上&#xff0c;扩展延申了圆形循环复用滚动列表。实现此效果需要导入垂直循环复用滚动列表里面的类。 1.基础类 using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using …

【前后端】HTTP网络传输协议

近期更新完毕&#xff0c;建议关注、收藏&#xff01; http请求 URL 严格意义上应该是URI http or https http不加密不安全&#xff1b;https加密协议&#xff08;公网使用&#xff09; http端口号80 https端口号443GET or POST GET和POST是HTTP请求的两种基本方法. 因为POST需…

基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视…

疾风大模型气象系统:精准预报,引领未来

精准预报,引领未来 在当今快速变化的世界中,天气预报已成为日常生活和社会运行中不可或缺的一部分。从规划日常出行到防范极端天气影响,高精准的气象服务正在重新定义我们的生活方式。而在这一领域,疾风大模型气象系统以其卓越的技术实力和领先的预测能力,正引领气象服务…