zoukankan      html  css  js  c++  java
  • 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, "
    ")) != 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;
    }
    
  • 相关阅读:
    CSS中position小解
    position
    mac默认安装postgresql, 如何让postgresql可以远程访问
    The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.0.
    active admin gem error
    psql 无法添加超级用户
    ubuntu 15.04 安装Balsamiq Mockups 3
    Rails html 写public里图片的路径
    rails c 历史命令
    undefined local variable or method `per' for []:ActiveRecord::Relation
  • 原文地址:https://www.cnblogs.com/Mysterious/p/5724220.html
Copyright © 2011-2022 走看看