Nucleo-F303K8とGPSモジュールを用いた緯度・経度の取得プログラム.

Dependencies:   mbed

Fork of Nucleo_GPS by Kosuke Furumoto

Revision:
2:ee6862d07ae9
Parent:
1:aec45e847ec3
--- a/main.cpp	Tue Aug 16 15:57:35 2016 +0000
+++ b/main.cpp	Sun Sep 04 14:51:04 2016 +0000
@@ -1,68 +1,75 @@
+/*
+説明
+Nucleo-F303K8とGPSmモジュールを使ったサンプルプログラム
+
+参考
+http://www.hiramine.com/physicalcomputing/general/gps_nmeaformat.html
+
+
+以下ピン配置
+Nucleo  GPSモジュール
+GND-----GND-----------0V
+5v------VIN
+D0------TX
+D1------RX
+*/
 #include "mbed.h"
 
 DigitalOut myled(LED1);
-Serial gps(D1, D0);        // tx, rx
-Serial pc(USBTX, USBRX);    // tx, rx
- 
-void pc_rx() {
-
-      unsigned char c;
-      int i,rlock;
-      char gps_data[256],gps2_data[256];
-      char ns,ew;
-      float time,hokui,tokei;
-      float g_hokui,g_tokei;
-      float d_hokui,m_hokui,d_tokei,m_tokei;
-      
-      gps.baud(9600);
-      pc.printf("*** GPS GT-720F ***");    
+Serial gps(D1, D0);       // tx, rx
+Serial pc(PA_2, PA_3);    // tx, rx
+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;
 
-    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() {
+  unsigned char 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';
-      
-      if( sscanf(gps_data, "GPGGA,%f,%f,%c,%f,%c,%d",&time,&hokui,&ns,&tokei,&ew,&rlock) >= 1){
+      // pc.printf("%s\r\n",gps_data);
+
+      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
+          pc.printf("Status:Lock(%d)\n\r",rlock);
+          //logitude
           d_tokei= int(tokei/100);
           m_tokei= (tokei-d_tokei*100)/60;
-          g_tokei= d_tokei+m_tokei; 
+          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);
-          
         }
         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);
         }
       }//if
-    }//while
+    }
+  }
 }
 
 int main(){
-    gps.attach(pc_rx,Serial::RxIrq);
-    while(1) {
-        myled = 1;
-        wait(0.2);
-        myled = 0;
-        wait(0.2);
-    }
-}
\ No newline at end of file
+  pc.printf("*** GPS GT-720F ***");
+  gps.baud(9600);
+  pc.baud(115200);
+  gps.attach(getGPS,Serial::RxIrq);
+  while(1) {
+    myled = 1;
+    wait(0.2);
+    myled = 0;
+    wait(0.2);
+  }
+}