ARDUINO解析GPS数据,读取出来GPRMC帧数据
测试板子使用ARDUINO MEGA2560
#include <TimerOne.h>
#define GPSSerial Serial1
#define DebugSerial Serial
const 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;
}
ARDUINO解析GPS数据,读取出来GPRMC帧数据的更多相关文章
- 从文件中读取yuv和h264数据
1.从文件中读取h264数据 参考ffmpeg avc.c写的从文件中一帧帧读取h.264数据的demo #include <stdio.h> #include <stdlib.h& ...
- 如何在ADO中使用数据读取器(DataReader)读取数据
DbDataReader类型(实现IDataReader接口)是从数据源获取信息最简单也最快速的方法. 数据读取器是只读向前的效据流.井且一次返回一条记录.因此.只有当你向数据源提交 Select 查 ...
- 【转载】PyTorch系列 (二):pytorch数据读取
原文:https://likewind.top/2019/02/01/Pytorch-dataprocess/ Pytorch系列: PyTorch系列(一) - PyTorch使用总览 PyTorc ...
- tensorflow 1.0 学习:十图详解tensorflow数据读取机制
本文转自:https://zhuanlan.zhihu.com/p/27238630 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找 ...
- TensorFlow数据读取
TensorFlow高效读取数据的方法 TF Boys (TensorFlow Boys ) 养成记(二): TensorFlow 数据读取 Tensorflow从文件读取数据 极客学院-数据读取 十 ...
- tensorflow之数据读取探究(1)
Tensorflow中之前主要用的数据读取方式主要有: 建立placeholder,然后使用feed_dict将数据feed进placeholder进行使用.使用这种方法十分灵活,可以一下子将所有数据 ...
- 十图详解tensorflow数据读取机制
在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下 ...
- 十图详解TensorFlow数据读取机制(附代码)
在学习TensorFlow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下 ...
- TensorFlow的数据读取机制
一.tensorflow读取机制图解 首先需要思考的一个问题是,什么是数据读取?以图像数据为例,读取的过程可以用下图来表示 假设我们的硬盘中有一个图片数据集0001.jpg,0002.jpg,0003 ...
随机推荐
- mysql_affected_rows的注意点
取得最近一次与 link_identifier 关联的 INSERT,UPDATE 或 DELETE 查询所影响的记录行数. 1.执行成功,则返回受影响的行的数目,如果最近一次查询失败的话,函数返回 ...
- STL学习笔记(数值算法)
运用数值算法之前必须先加入头文件<numeric> 加工运算后产生结果 1.对序列进行某种运算 T accumulate(InputIterator beg,InputIterator e ...
- Websphere: Stop Server and Uninstall Application
In WAS, stopping server and uninstalling application are important steps to re-deploy. SET ProfileLo ...
- 【Linux】使用xshell登陆时密码框为灰色,无法输入密码
使用xshell登陆时,出现以上情况,那么这到底值咋回事呢?经过查询以后发现是服务器端设置问题,解决办法如下: vi /etc/ssh/sshd_config 接着保存退出,然后重启sshd服务 se ...
- jetty学习小结
1.什么是jetty? 开源HTTP服务器和Servlet引擎,是web应用的容器,同tomcat类似.由于其轻量灵活的特性,很多知名产品也应用了它,如maven.eclipse.hadoop.spa ...
- Java中的split函数的用法
Java中的 split 函数是用于按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回: 例如: String str="1234@abc"; String[] a ...
- samba基本配置
安装启动不用说了 vim /etc/samba/smb.conf workgroup = WORKGROUP server string = Samba Server %vnetbios name = ...
- wxWidgets之wxGrid控件
1. 介绍 wxGrid控件时wxWidgets界面库中内置的网格控件. 通经常使用来显示表格数据.该控件拥有强大的功能.开发人员可依据自己的需求对其进行定制. 2. 经常使用API 构造函 ...
- CONTROLLER_NAME 常量 当前访问的控制器
CONTROLLER_NAME 常量 当前访问的控制器
- android requestLayout()重新请求布局
在应用中有时会遇到,例如你listView 的设置的高度为warp_content 自适应,listView下方有个TextView但如果你删了一个listView的item 我们希望下面的TextV ...