SSLM1 / Mbed 2 deprecated GMS6-CR6

Dependencies:   mbed

main.cpp

Committer:
sasakisho
Date:
2020-05-16
Revision:
0:d2b63af6bf3b

File content as of revision 0:d2b63af6bf3b:

/* GMS6-CR6の流すデータからフォーマットGPGGAのみを取得して,PCに出力 */

#include "mbed.h"
#include "math.h"

#define TIME_GAP 6.0

Serial gps (p9, p10);       //GPSのピンを設定
Serial pc (USBTX, USBRX);

/* mbedにあるなにかの関数らしい */
Timer  timer_open;
Timer  timer_log;
Ticker tic_open;
Ticker tic_log;

/* プロタイプ宣言 */
float _DMS2DEG(float raw_data);
int   _input(char cha);

/* グローバル変数の設定 */
float Time;
char  gps_data[256];
int   cnt_gps;
int   Cnt_GPS = 0;

int main()
{
    while(1)
    {
        if(gps.readable())
        {
            gps_data[cnt_gps] = gps.getc();
            
            if(gps_data[cnt_gps] == '$' || cnt_gps == 256)
            {
                cnt_gps = 0;
                memset(gps_data, '\0', 256); //この関数なんや
            }
            else if(gps_data[cnt_gps] == '\r')
            {
                float world_time, lon_east, lat_north;
                int rlock, sat_num;
                char lat, lon;
                
                if(sscanf(gps_data, "GPGGA,%f,%f,%c,%f,%c,%d,%d", &world_time, &lat_north, &lat, &lon_east, &lon, &rlock, &sat_num) >= 1)
                {
                    if (rlock == 1)
                    {
                        lat_north = _DMS2DEG(lat_north);
                        lon_east = _DMS2DEG(lon_east);
                        printf("%s \r\n", gps_data);
                        printf("Lat:%f, Lon:%f \r\n time:%f,sat_num:%d\r\n", lat_north, lon_east, sat_num);
                    }
                    else
                    {
                        printf("%s \r\n", gps_data);
                    }
                }
            }
             else
             {
                 cnt_gps++;
             }
        }
        if(timer_log.read() >= 30.0*60.0) timer_log.reset();
    }
}

float _DMS2DEG(float raw_data)
{
    int d = (int)(raw_data/100);
    float m = (raw_data - (float)d * 100);
    return (float) d + m /60;
}