mbed用GPSモジュール利用プログラム for IZU 割り込みを利用し、自動的に内部変数へ座標などのデータが更新されるようになっている。そのため、好きなタイミングで専用関数により値を取得できる。

Dependencies:   GPS_interrupt mbed

Revision:
2:c05887794ff5
Parent:
1:1d1b6b0396d1
Child:
3:220b43770a14
--- a/Hybrid_interruptGPS.cpp	Mon Jan 02 00:43:18 2017 +0000
+++ b/Hybrid_interruptGPS.cpp	Mon Jan 02 18:49:49 2017 +0000
@@ -3,27 +3,67 @@
 Serial pc(USBTX, USBRX);
 RawSerial mygps(p9, p10);
 
-GPS_interrupt gps(&mygps, 9600);
+#define FIRST_BAUDRATE 115200
+#define BAUDRATE 115200
+
+GPS_interrupt gps(&mygps, BAUDRATE, 10, FIRST_BAUDRATE);
+
+void bootFunction(){
+    pc.printf("\r\n");
+    pc.printf("start LPC1768 boot phase\r\n");
+    wait(0.5);
+    for(int i = 0;i < 100;i++){
+        pc.printf("Loading... : %3d [%%]\r", i);
+        wait(0.025);
+    }
+    pc.printf("Loading... : %3d [%%]\r\n", 100);
+    pc.printf("\t-> finished!!\r\n");
+    pc.printf("System : %d Hz\r\n", SystemCoreClock );
+    wait(0.5);
+    pc.printf("start main program\r\n");
+    wait(0.1);
+    pc.printf("initialize");
+    wait(0.75);
+    pc.printf(" -> OK\r\n");
+    wait(0.1);
+    pc.printf("GPS Connecting");
+    wait(0.5);
+    pc.printf(".");
+    wait(0.5);
+    pc.printf(".");
+    wait(0.5);
+    pc.printf(".");
+    wait(0.5);
+    pc.printf(".");
+    wait(0.5);
+    pc.printf(".");
+    wait(0.5);
+    pc.printf(".");
+    wait(0.5);
+    while(1){
+        if(gps.gps_readable)    break;   
+    }
+    pc.printf(" -> OK\r\n");
+    pc.printf("start!!\r\n\r\n");
+    wait(0.5);
+}
 
 int main() {
     
     pc.baud(115200);
-    mygps.baud(9600);
+    //mygps.baud(FIRST_BAUDRATE);
     
-    pc.printf("%d Hz\r\n", SystemCoreClock );
+    bootFunction();
     
-    wait(3.0);
     while(1){
-        //if(gps.gps_readable){
-            double xy[2] = {0};
-            float utc[6] = {0};
-            gps.getPosition(xy);
-            gps.getUTC(utc);
-            pc.printf("%d 年 %d 月 %d 日 %d 時 %d 分 %02.2f 秒 ",(int)utc[0],(int)utc[1], (int)utc[2], (int)utc[3], (int)utc[4] ,utc[5]); 
-            pc.printf("lon %f\tlat %f\r\n",xy[0], xy[1]);
-            wait(0.10);
-           // gps.gps_readable = false;
-        //}
-        
+        double xy[2] = {0};
+        float utc[6] = {0};
+        gps.getPosition(xy);
+        gps.getUTC(utc);
+        pc.printf("\033[K");
+        pc.printf("%d/%d/%d %d:%d:%02.2f ",(int)utc[0],(int)utc[1], (int)utc[2], (int)utc[3], (int)utc[4] ,utc[5]); 
+        pc.printf("(%3.7fe,%3.7fn) ",xy[0], xy[1]);
+        pc.printf("%d satellites, %.2f[m], %.3f[m/s], %3.2f[degree]\r", gps.Number(), gps.Height(), gps.Knot()*1852/3600, gps.Degree());   
+        wait(0.1);
     }
 }