QT接收并解析GPS模块串口数据

目录

一、QT读取串口数据

二、解析数据


目标:

使用QT,读取gps模块的串口数据,并解析其中的经纬高数据,然后进行处理

一、QT读取串口数据

变量定义

QSerialPort *serial;
QSerialPortInfo SerialPortInfo;
QByteArray lineData;

 串口初始化

//初始化串口
void serialPort::initSerialPort() {serial = new  QSerialPort;QList<QSerialPortInfo> listCom;//获取串口列表listCom = QSerialPortInfo::availablePorts();for (int i = 0; i < listCom.size(); i++)qDebug() << "串口名称:" << listCom[i].portName();//打印串口信息foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())//搜索串口,获取串口列表{if (info.portName() == "COM3") {//在串口列表中查找//此处使用的是判断串口描述说明相同SerialPortInfo = info;//储存串口信息serial->setPort(info);//设置串口break;//找到所需要的串口信息,退出循环}//使用if语句判断是否所需串口}if (SerialPortInfo.portName() == "COM3") {qDebug() << "所需串口已找到,具体信息如下:";qDebug() << "Name : " << SerialPortInfo.portName();//串口名称,比如com3qDebug() << "Description : " << SerialPortInfo.description();//串口描述说明qDebug() << "Manufacturer: " << SerialPortInfo.manufacturer();qDebug() << "Serial Number: " << SerialPortInfo.serialNumber();//串口号qDebug() << "System Location: " << SerialPortInfo.systemLocation();//系统位置}else {qDebug() << "串口信息未找到,请检查设备是否连接";}serial->setBaudRate(QSerialPort::Baud9600);//设置串口波特率(9600)serial->setDataBits(QSerialPort::Data8);//设置数据位(8)serial->setParity(QSerialPort::NoParity); //设置奇偶校检(无)serial->setStopBits(QSerialPort::OneStop);//设置停止位(一位)serial->setFlowControl(QSerialPort::NoFlowControl);//设置流控制(无)serial->open(QIODevice::ReadOnly);//打开串口,并设置串口为只读模式if (serial->isOpen())qDebug() << "串口已经打开";connect(serial, SIGNAL(readyRead()), this, SLOT(slot_read_from_port()));
}

二、解析数据

因为串口每次读取不定长的字符,因此需要对每一条GPS数据进行拼接,遇到回车符\n拼接结束,进行解析。

void serialPort::slot_read_from_port() {QByteArray  byteArray = serial->readAll();lineData.append(byteArray);if (lineData.contains('\n'))//只有等到\n的时候才能进入{QString lineQstring = QString::fromLocal8Bit(lineData);qDebug() << "lineQstring: " << lineQstring;QString parseName = "GNGGA";//解析GPGGA数据if (lineQstring.contains(parseName)) { //如果解析北斗数据,换为 BDGGA   格洛纳斯:GLGGA//qDebug()<<"parse data: " << lineQstring;//通过逗号分割数据QList<QString>d = lineQstring.split(',');/*(1)UTC时间,格式为hhmmss.ss;(2)纬度,格式为ddmm.mmmmm(度分格式);(3)纬度半球,N或S(北纬或南纬);(4)经度,格式为dddmm.mmmmm(度分格式);(5)经度半球,E或W(东经或西经);(9) 海拔高度(-9999.9~99999.9)*///时间转为秒_flyData.time = d[1].mid(0, 2).toInt() * 60 * 60 + d[1].mid(2, 2).toInt() * 60 + d[1].mid(4, 2).toInt();//纬度if (d[3] == "N") {_flyData.lat = parseLngLat(d[2].toDouble());}else if (d[3] == "S") {_flyData.lat = -parseLngLat(d[2].toDouble());}//经度if (d[5] == "E") {_flyData.lng = parseLngLat(d[4].toDouble());}else if (d[5] == "W") {_flyData.lng = -parseLngLat(d[4].toDouble());}//高度_flyData.alt = d[9].toDouble();//qDebug() << d[1] << "  " << _flyData.lng << "  " << _flyData.lat << "  " << _flyData.alt;}lineData.clear();}}//解析经纬度至小数
double serialPort::parseLngLat(double LL) { //例如:4546.40891 //度int d = int(LL / 100);int m = int(LL - d * 100);double s = ((LL - d * 100) - m) * 60;//组合为小数return (d + m / 60.0 + s / 3600.0);
}

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

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

相关文章

RKNPU2从入门到实践 --- 【10】RKNPU2零拷贝API实现RKNN模型在RK3588开发板上的部署

目录 一、为什么叫零拷贝API&#xff1f; 二、零拷贝API执行流程&#xff08;代码解读&#xff09; 2.1 前奏工作 2.2 main.cc文件的编写&#xff08;代码的编写&#xff09; 2.2.1 第一步&#xff1a;rknn_init接口创建rknn_context对象、加载RKNN模型 2.2.2 第二步…

C# 传值参数

传值参数 1.值类型 值参数创建变量的副本&#xff1a;当传递值参数时&#xff0c;实际上是创建了原始变量的一个副本&#xff0c;然后将副本传递给方法。对值参数的操作永远不影响变量的值&#xff1a;由于是复制了一份新的副本&#xff0c;所以对副本进行操作不会影响原始变量…

python,json数据格式,pyecharts模块,pycharm中安装pyecharts

json数据格式 JSON是一种轻量级的数据交互格式 可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能&#xff1a; json就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互. 类似于&#xff1a; 国…

普元Devops-在云主机上拉取harbor的docker镜像并部署

1 前言 本文讲解如何从普元Devops配置构建&#xff0c;从而实现在云主机上拉取Docker镜像&#xff0c;然后运行Docker容器&#xff0c;实现云主机的Docker部署。 2 主要步骤说明 首先&#xff0c;我们有一个Devops服务器&#xff0c;还有一个云主机服务器&#xff0c;还有一个…

【微信小程序】如何触发按钮事件,例如调起微信客服

需求 实现一个如下图的效果, 点击客服按钮, 调起微信客服功能, 需要和button组合使用 效果图 实现思路 客服只能通过button按钮调起, 所以我们需要写一个button按钮, open-type“contact”, 然后把它隐藏起来。给客服图标加一个label, 设置for“btnId”, 这样点击图片就会触…

在ElementUI项目中集成iconfont图标库

在前端项目开发中经常会遇到使用的组件库提供的ICON图标不够用的情况。最常见的解决方案无非就是把设计图的图标切图引入到项目中。还有就是使用svg图标&#xff0c;封装一个渲染组件在项目里面直接引入这个组件。 本文将介绍另一种方法&#xff0c;即集成iconfont图标库的图标…

养老小程序源码家政服务小程序开发方案

预约上门养老小程序&#xff0c;是php开发预约&#xff0c;前端是uniapp&#xff0c;有开发好的小程序案例&#xff0c;可源码&#xff0c;也可以二开&#xff0c;也可以定制开发。 一 用户端&#xff1a;服务分类、服务内容详情介绍、在线下单支付&#xff0c;管理我的订单。…

前缀和差分【算法 13】

在算法领域中&#xff0c;前缀和与差分数组是两种高效处理区间问题的技术。它们能在特定问题场景下将时间复杂度从 (O(n)) 降到 (O(1))&#xff0c;适用于频繁的区间查询与修改操作。本文将简要介绍这两种技术及其应用。 1. 前缀和 (Prefix Sum) 前缀和是指一个数组的第 (i)…

利用TOPSIS算法进行生长素和施肥量对农作物各指标影响力的分析

文章目录 1 摘要2 问题的重述1&#xff0e; 背景介绍2&#xff0e; 问题的产生及进行数学建模的意义 3 TOPSIS算法1. TOPSIS算法介绍2. TOPSIS算法使用步骤 4 问题的分析1. 对问题一的分析及解答2. 对问题二的分析及解答3. 对问题三的分析及解答 5 模型的改进1. 验证2.模型改进…

整理了几十家高频面试题,让你避坑软件测试公司面试的套路,收藏收藏刷起来...

俗话说金九银十&#xff0c;就要到找工作的高峰期了 年前找我拿面试题的姐妹已经收到offer了&#xff0c;准备换工作的抓紧背起来哦 去面试的&#xff0c;一定要提前了解一下&#xff0c;这些面试题。可能不是特别全面&#xff0c;但是已经够用了。你们面试时还遇到了哪些奇葩…

Redis中的数据类型及应用场景(面试版)

五种常用数据类型介绍 Redis中存储的都是key-value对结构的数据&#xff0c;其中key都是字符串类型&#xff0c;value有5种常用的数据类型&#xff1a; 字符串 string 哈希 hash 列表 list 集合 set 有序集合 sorted set / zset 各种数据类型特点 解释说明&#xff1a; …

【C++】vector(下)--上篇

个人主页~ vector&#xff08;上&#xff09;~ vector 二、vector的模拟实现1、了解组成2、vector.h&#xff08;1&#xff09;为什么有了size_t参数的vector构造函数还要再写一个int参数的重载vector构造函数&#xff08;2&#xff09;为什么reserve不用memcpy&#xff08;3&…

DAMA数据管理知识体系(第3章 数据治理)

课本内容 3.1 引言 数据治理&#xff08;Data Governance&#xff0c;DG&#xff09;的定义是在管理数据资产过程中行使权力和管控&#xff0c;包括计划、监控和实施。数据治理项目的范围和焦点 战略 定义、交流和驱动数据战略和数据治理战略的执行制度 设置与数据、元数据管理…

MySQL编译安装

1.源码包地址 2.编译/安装 3.设置环境变量 4.初始化/登录 地址: MYSQL源码包下载 右键复制链接 使用wget 下载到/usr/local/src下 再使用rpm –ivh 安装 --这个时候跳转到 cd /root/rpmbuild/SOURCES 使用ll查看有什么东西 yum -y install gcc gcc-c ncurses ncurses-d…

Tensorflow实现深度学习8:猫狗识别

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 导入数据 import matplotlib.pyplot as plt import tensorflow as tf # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] Fals…

本地部署Xinference实现智能体推理工作流(二)

第二篇章 Dify接入 Xinference 部署的本地模型 1. 安装Dify 克隆 Dify 源代码至本地。 git clone https://github.com/langgenius/dify.git 2. 启动Dify 进入 Dify 源代码的 docker 目录&#xff0c;执行一键启动命令&#xff1a; cd dify/docker cp .env.example .env d…

Linux学习(15)-网络编程:滑动窗口、拥塞控制、udp

本节学习内容 1.滑动窗口&#xff08;1.滑动窗口的作用2.如果如果接收端填充的接收窗口为0&#xff0c;发送端接下来怎么处理3.糊涂窗口综合征4.tcp中nagle算法是什么&#xff09; 2.拥塞控制 3.udp协议特点及编程流程 本节可能会用到的指令 ifconfig查看自己的ip地址 pi…

Amazon Bedrock 实践:零基础创建贪吃蛇游戏

本文探讨了如何利用 Amazon Bedrock 和大型语言模型&#xff0c;快速创建经典的贪吃蛇游戏原型代码。重点展示了利用提示工程&#xff0c;将创新想法高效转化为可运行代码方面的过程。文章还介绍了评估和优化提示词质量的最佳实践。 亚马逊云科技开发者社区为开发者们提供全球的…

C# UserControl、Dockpanel和DockContent、Cursor、

一、UserControl类 UserControl 是 .NET 中的一个基类&#xff0c;用于创建自定义控件&#xff0c;主要用于 Windows Forms 和 WPF。通过继承 UserControl&#xff0c;你可以设计和实现具有特定界面和功能的控件组件。UserControl 允许你将多个标准控件组合在一起&#xff0c;…

网络层 III(划分子网和构造超网)【★★★★★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、网络层转发分组的过程 分组转发都是基于目的主机所在网络的&#xff0c;这是因为互联网上的网络数远小于主机数&#xff0c;这样可以极大地压缩转发表的大小。…