[转]ARDUINO解析GPS数据,读取出来GPRMC帧数据 - 神秘藏宝室 - 博客园
(转载请删除括号里的内容)
---------------------
作者:神秘藏宝室
来源:CNBLOGS
原文:https://www.cnblogs.com/Mysterious/p/5724220.html
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件
测试板子使用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博客文章一键转载插件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix