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

Dependencies:   GPS_interrupt mbed

Revision:
3:220b43770a14
Parent:
2:c05887794ff5
--- a/Hybrid_interruptGPS.cpp	Mon Jan 02 18:49:49 2017 +0000
+++ b/Hybrid_interruptGPS.cpp	Tue Feb 21 13:42:17 2017 +0000
@@ -1,12 +1,15 @@
 #include "mbed.h"
 #include "GPS_interrupt.h"
-Serial pc(USBTX, USBRX);
-RawSerial mygps(p9, p10);
+RawSerial pc(USBTX, USBRX);
+//RawSerial mygps(p28, p27);
 
-#define FIRST_BAUDRATE 115200
+#define FIRST_BAUDRATE 9600
 #define BAUDRATE 115200
 
-GPS_interrupt gps(&mygps, BAUDRATE, 10, FIRST_BAUDRATE);
+//GPS_interrupt *gps;
+//GPS_interrupt gps(&mygps, 10);
+Serial mygps(D1, D0,115200);
+GPS_interrupt gps(&mygps);//, 10);
 
 void bootFunction(){
     pc.printf("\r\n");
@@ -39,31 +42,37 @@
     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(FIRST_BAUDRATE);
     
     bootFunction();
-    
+    wait(0.5);
+    gps.gps_readable = false;
+    gps.debug(true);
+    while(!gps.gps_readable){
+        if(pc.readable())   break;   
+    }
+    pc.printf(" -> OK\r\n");
+    pc.printf("start!!\r\n\r\n");
     while(1){
         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);
+        if(gps.gps_readable){
+            gps.debug(false);
+            gps.gps_readable = false;
+            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.0/3600.0, gps.Degree());   
+            wait(0.1);
+        }
+        else gps.debug(true);
     }
 }