[转]ARDUINO解析GPS数据,读取出来GPRMC帧数据 - 神秘藏宝室 - 博客园

(转载请删除括号里的内容)

测试板子使用ARDUINO MEGA2560

#include <TimerOne.h>#define GPSSerial Serial1#define DebugSerial Serialconst unsigned int bufferLength = 600;char RxBuffer[bufferLength];unsigned int ii = 0;char EER_GPS_Buffer[24] = {"$GPRMC,,V,,,,,,,,,,N*7F"};struct{	unsigned char CMD;	unsigned int LengthA;	char fixed[20];	unsigned char id_length;	char id[20];	unsigned char LengthB1;	unsigned char LengthB2;	char api_key[50];} login;struct{	unsigned char CMD;	unsigned char LengthA;	unsigned char mark;	unsigned char type;	unsigned char LengthB1;	unsigned char LengthB2;	char streamA[24];	char id[20];	char streamB[27];	char GPS_Buffer[150];	char streamC[7];} Save_Data;void setup(){	GPSSerial.begin(9600);	DebugSerial.begin(9600);	Timer1.initialize(1000);	Timer1.attachInterrupt(Timer1_handler);	DebugSerial.println("setup end!");}void loop(){	DebugSerial.println("loop start!");	getGPSData();	DebugSerial.println("loop end!");}unsigned long  Time_Cont = 0;void Timer1_handler(void){	Time_Cont++;}void getGPSData(){	char *GPS_BufferHead, *GPS_BufferTail;	clrRxBuffer();	Time_Cont = 0;	while (Time_Cont < 2000)	{		readBuffer();		if ((GPS_BufferHead = strstr(RxBuffer, "$GPRMC,")) != NULL)		{			if ((GPS_BufferTail = strstr(GPS_BufferHead, "\r\n")) != NULL)			{				if(GPS_BufferTail > GPS_BufferHead)				{					memcpy(Save_Data.GPS_Buffer, GPS_BufferHead, GPS_BufferTail - GPS_BufferHead);					DebugSerial.println("-----1------");					DebugSerial.println(Save_Data.GPS_Buffer);					break;					clrRxBuffer();				}			}		}			}	if(Time_Cont >= 2000)	{		memcpy(Save_Data.GPS_Buffer, EER_GPS_Buffer, 24);	//输出错误信息		}	DebugSerial.println("-----2------");	DebugSerial.println(Save_Data.GPS_Buffer);	memset(Save_Data.GPS_Buffer, 0, sizeof Save_Data.GPS_Buffer);	//使用后清空数据	DebugSerial.println("-----3------");	DebugSerial.println(Save_Data.GPS_Buffer);	clrRxBuffer();}void readBuffer(){	while (GPSSerial.available())	{		RxBuffer[ii++] = GPSSerial.read();		if (ii == bufferLength)clrRxBuffer();	}}void clrRxBuffer(void){	memset(RxBuffer, 0, bufferLength);		//清空	ii = 0;}

---------------------
作者:神秘藏宝室
来源:CNBLOGS
原文:https://www.cnblogs.com/Mysterious/p/5724220.html
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件
posted @   安全支付  阅读(233)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示