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

news2024/11/23 4:06:38

目录

一、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();//串口名称,比如com3
		qDebug() << "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.coloradmin.cn/o/2070579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Deepin【2】:Deepin系统盘扩容

Deepin【2】&#xff1a;Deepin系统盘扩容 1、进入live系统1.1、live系统入步骤 2、连接网络3、新增系统仓库4、安装gparted应用5、使用gparted进行扩容操作5.1、观察当前分区5.2、压缩data分区5.3、Rootb分区合并空闲空间5.4、Rootb分区压缩空间5.5、Roota合并空闲空间5.6、核…

【学习笔记】STM32F407探索者HAL库开发(二)STM32F4最小系统设计

【学习笔记】STM32F407探索者HAL库开发&#xff08;二&#xff09;STM32F4最小系统设计 0 什么是最小系统1 电源电路1.1 数字部分电源1.2 模拟部分电源1.3 参考电压1.4 VBAT 2 复位电路3 BOOT启动电路&#xff08;F4&#xff09;4 晶振电路4.1 低速晶振4.2 高速晶振 5 下载调试…

计算机操作员试题(公共科目)

计算机操作员试题(公共科目) ★★★ RZer整理 仅供参考 ★★★ 单项选择题 “人的本质”这一概念是人对自身的认识发展到一定阶段形成的,它力图从根本上回答“人是什么”或“什么是人”这一重大问题。马克思主义认为,人的本质( )。 A.永恒不变 B.可随主观意志而任意改变 C…

【Material-UI】Radio Group中的 Color 属性详解

文章目录 一、Radio Group 组件概述1. 组件介绍2. 基本用法 二、Color 属性详解1. Color 属性的作用2. 使用 Color 属性设置颜色3. 自定义颜色 三、Color 属性的实际应用场景1. 品牌一致性2. 状态指示3. 突出特定选项 四、注意事项1. 色彩对比2. 无障碍设计3. 主题定制 五、总结…

electron仿微信,点击子窗口以外的区域时、关闭子窗口

环境 windows&#xff1a;PC微信 我们可以看到&#xff0c;微信聊天界面点击右上角三个点时&#xff0c;会显示这个人的聊天信息窗口&#xff0c;我们把鼠标点击在其他位置时&#xff0c;这个聊天信息窗口就消失了&#xff0c;那么&#xff0c;这是怎么实现的呢&#xff0c;能…

Git的使用教程及常用语法02

四.将文件添加到仓库 创建仓库 git init查看仓库的状态 git status 添加到暂存区 git add提交 git commitgit status 可以查看当前仓库的状态信息&#xff0c;例如包含哪些分支&#xff0c;有哪些文件以及这些文件当前处在怎样的一个状态。 由于当前没有存储任何的东西&…

深度解析丨AI绘画StableDiffusion如何实现模特精准换装,以及如何将假人模特替换成真人模特!

大家好&#xff0c;我是灵魂画师向阳 今天给大家分享一下用AI绘画Stable Diffusion 进行模特换装&#xff01;本篇教程主要运用StableDiffusion这个工具来进行操作&#xff0c;下面会通过几个小案例&#xff0c;给大家展示不同需求下&#xff0c;我们该如何使用StableDiffusio…

Linux查看jvm相关参数以及设置调优参数

1、查看jvm相关参数 1.1、查看Java进程命令 jcmd会显示出来对应的Java进程id 1.2、查看堆内存各个区域的使用大小、具体大小和GC次数以及耗时 jstat -gc 4036145jstat -gc 进程id 各个参数的含义。 如上图,4036145的进程,FGCT是0.452,FGC是4.平均每次full gc耗时0.11秒。 …

如何选择行为审计管理软件?值得收藏的三款行为审计管理软件

在选择行为审计管理软件时&#xff0c;企业需要考虑多个方面以确保所选软件能够满足其特定的需求和目标。以下是一些关键的选择标准&#xff0c;以及基于这些标准推荐的三款优秀软件。 选择行为审计管理软件的关键标准 1.功能全面性&#xff1a;软件应覆盖行为审计的各个方面&…

Godot《躲避小兵》实战之为游戏添加音效

现在&#xff0c;我们已经完成了游戏的所有功能。以下是一些剩余的步骤&#xff0c;为游戏加点“料”&#xff0c;改善游戏体验。 随意用你自己的想法扩展游戏玩法。 背景 默认的灰色背景不是很吸引人&#xff0c;那么我们就来改一下颜色。一种方法是使用 ColorRect节点。将…

JavaScript学习文档(6):什么是对象、对象使用、遍历对象、内置对象、术语解释

目录 一、什么是对象 1、对象是什么 二、对象使用 1、对象使用 2、对象有属性和方法组成 &#xff08;1&#xff09;对象属性&#xff08;增删改查&#xff09; &#xff08;2&#xff09;对象方法 三、遍历对象 1、遍历对象 2、渲染学生信息案例 四、内置对象 1、…

旅游行业怎么利用C#接口发送短信

旅游企业一般拥有众多的分支机构&#xff0c;同时各地分支机构又有众多下属分散在当地各区的旅游营业报名点&#xff0c;以前传统的解决方案是采用专线、MODEM拔号等方式&#xff0c;专线的成本很高&#xff0c;MODEM拔号更费时&#xff0c;且长途拔号互联成本在多点情况下费用…

scikit-learn特征抽取

为什么需要特征工程 数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已 什么是特征工程 特征工程是使用专业背景知识和技巧处理数据&#xff0c;使得特征能在机器学习算法上发挥更好的作用的过程 意义&#xff1a;会直接影响机器学习的效果 特征…

Type-C无线麦克风方案

在数字化浪潮的推动下&#xff0c;音频设备正经历着前所未有的变革。从传统的有线麦克风到如今的蓝牙无线麦克风&#xff0c;每一次技术的飞跃都极大地丰富了我们的音频体验。而今&#xff0c;随着Type-C接口的普及与技术的不断成熟&#xff0c;Type-C无线麦克风正悄然成为音频…

数据结构----红黑树

小编会一直更新数据结构相关方面的知识&#xff0c;使用的语言是Java&#xff0c;但是其中的逻辑和思路并不影响&#xff0c;如果感兴趣可以关注合集。 希望大家看完之后可以自己去手敲实现一遍&#xff0c;同时在最后我也列出一些基本和经典的题目&#xff0c;可以尝试做一下。…

DRF——Filter条件搜索模块

文章目录 条件搜索自定义Filter第三方Filter内置Filter 条件搜索 如果某个API需要传递一些条件进行搜索&#xff0c;其实就在是URL后面通过GET传参即可&#xff0c;例如&#xff1a; /api/users?age19&category12在drf中也有相应组件可以支持条件搜索。 自定义Filter …

学习2d直线拟合-2

参考文章 直线拟合算法&#xff08;续&#xff1a;加权最小二乘&#xff09;_加权拟合直线法-CSDN博客 对比了参考文中和opencv中的直线拟合权重&#xff0c;不知道理解的对不对&#xff0c;前者是权重平方&#xff0c;后者没有平方

迷雾大陆辅助:VMOS云手机助力升级装备系统秘籍!

在《迷雾大陆》的广阔世界中&#xff0c;装备的选择和获取对于每一位冒险者来说都是至关重要的。为了让玩家能够更轻松地管理装备并在冒险中获得更高的效率&#xff0c;VMOS云手机提供了专属定制版云手机&#xff0c;内置游戏安装包&#xff0c;不需要重新下载安装游戏。VMOS云…

【VectorNet】vectornet网络学习笔记

文章目录 前言(vectornet算法流程)(向量表示)(图构建)(子图构建)(全局图构建)(解码器: 轨迹预测)(辅助研究)(损失函数)(实验)(问题厘清) VectorNet Overview 前言 论文: https://arxiv.org/pdf/2005.04259代码: https://github.com/xk-huang/yet-another-vectornet年份: 2020.…

Hadoop联邦模式搭建

在Hadoop架构中提供了三类搭建方式&#xff0c;第一类是给测试或开发人员使用的伪分布式或单NN节点搭建方式&#xff0c;第二类是用来商用化并解决NN单点故障的HA搭建方式&#xff0c;第三类就是这里要说的联邦模式&#xff0c;它本身也是一种供给商用的模式&#xff0c;但是它…