SSLM1 / Mbed 2 deprecated GMS6-CR6

Dependencies:   mbed

Revision:
0:d2b63af6bf3b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat May 16 05:44:18 2020 +0000
@@ -0,0 +1,75 @@
+/* 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;
+}