sample for GPS (used by nucleo_STM-F303K8)

Dependencies:   mbed

Fork of Nucleo_GPS by Kosuke Furumoto

Revision:
2:59b33f158822
Parent:
1:91f4ae33e6ac
Child:
3:03e5370e74a3
--- a/main.cpp	Mon Oct 24 16:22:38 2016 +0000
+++ b/main.cpp	Mon Nov 21 04:17:17 2016 +0000
@@ -9,63 +9,62 @@
 以下ピン配置
 Nucleo  GPSモジュール
 GND-----GND-----------0V
-5v------VIN
+5V------VIN
 D0------TX
 D1------RX
 */
 #include "mbed.h"
 
-Serial gps(D1, D0);        // tx, rx
+DigitalOut myled(LED1);
+Serial gps(D1, D0);       // tx, rx
 Serial pc(PA_2, PA_3);    // tx, rx
-
-int main() {
-      unsigned char c;
-      int i,rlock;
-      char gps_data[256],gps2_data[256];
-      char ns,ew;
-      float world_time,hokui,tokei;
-      float g_hokui,g_tokei;
-      float d_hokui,m_hokui,d_tokei,m_tokei;
-      pc.baud(115200);
-      gps.baud(9600);
-      pc.printf("*** GPS GT-720F ***");
+int i,rlock,mode;
+char gps_data[256],gps2_data[256];
+char ns,ew;
+float w_time,hokui,tokei;
+float g_hokui,g_tokei;
+float d_hokui,m_hokui,d_tokei,m_tokei;
+unsigned char c;
 
-    while (1) {
-      i=0;
-      while(gps.getc()!='$'){
-      }
-
-      while((gps_data[i]=gps.getc()) != '\r'){
-        i++;
-        if(i==256){
-           pc.printf("*** Div Error! ***\n");
-           i=255;
-           break;
-         }
-      }
+void getGPS() {
+  c = gps.getc();
+  if( c=='$' || i == 256){
+    mode = 0;
+    i = 0;
+  }
+  if(mode==0){
+    if((gps_data[i]=c) != '\r'){
+      i++;
+    }else{
       gps_data[i]='\0';
-//      pc.printf("%s",gps_data);
-      if( sscanf(gps_data, "$GPGGA,%f,%f,%c,%f,%c,%d",&world_time,&hokui,&ns,&tokei,&ew,&rlock) >= 1){
+      
+      if( sscanf(gps_data, "$GPGGA,%f,%f,%c,%f,%c,%d",&w_time,&hokui,&ns,&tokei,&ew,&rlock) >= 1){
         if(rlock==1){
           pc.printf("Status:Lock(%d)\n\r",rlock);
-         //logitude
+          //logitude
           d_tokei= int(tokei/100);
           m_tokei= (tokei-d_tokei*100)/60;
           g_tokei= d_tokei+m_tokei;
-          pc.printf("Log:%4.5f,",g_tokei);
-         //Latitude
+          //Latitude
           d_hokui=int(hokui/100);
           m_hokui=(hokui-d_hokui*100)/60;
           g_hokui=d_hokui+m_hokui;
-          pc.printf("Lat:%4.5f\n\r",g_hokui);
-
+          pc.printf("Lon:%.6f, Lat:%.6f\n\r",g_tokei, g_hokui);
         }
         else{
           pc.printf("\n\rStatus:unLock(%d)\n\r",rlock);
-          for(i=0;i<40;i++){
-            pc.printf("%c",gps_data[i]);
-          }
+          pc.printf("%s",gps_data);
         }
+        sprintf(gps_data, "");
       }//if
-    }//while
-}//main
+    }
+  }
+}
+
+int main(){
+  pc.printf("*** GPS GT-720F ***");
+  gps.baud(9600);
+  pc.baud(115200);
+  gps.attach(getGPS,Serial::RxIrq);
+  while(1) {}
+}