[转]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博客文章一键转载插件

浙公网安备 33010602011771号