ublox社製GPSモジュール NEO-7Mから、SPI経由でGPSデータをUBXプロトコルで読み出すライブラリです SPI経由ではGPSの出力設定が出来ないので、予めUART接続でPCから出力データを変更する必要があります。ここら辺の詳細については https://ameblo.jp/tsukuba-step/entry-12282936077.html を参考にして下さい。 出力設定は、 NAV-POSLLH,NAV-TIMEUTC,NAV-VELNED のみを出力して下さい

Dependents:   SensorManager

Revision:
0:956653b6d3ad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ublox_Nav.cpp	Tue Feb 13 04:21:32 2018 +0000
@@ -0,0 +1,86 @@
+#include "ublox_Nav.h"
+
+
+GPS::GPS(PinName mosi,PinName miso,PinName sck,PinName _cs):_gps(mosi,miso,sck),cs(_cs){
+    cs=1;
+    _gps.frequency(5500000);
+}
+
+bool GPS::updateData(){
+    bool flag=false;
+    
+    cs=0;
+        
+    //読み込みバッファ
+    static unsigned char val[2];
+    
+    val[0]=val[1];
+    val[1]=_gps.write(0xFF);
+    
+    if(val[0]==0xb5&&val[1]==0x62){
+        
+        flag=true;                          //flagをtrueに
+        
+        buf0[0]=val[0];
+        
+        for(int i=1;i<50;i++){
+            
+            //読み込みバッファ更新
+            val[0]=val[1];
+            val[1]=_gps.write(0xFF);
+            
+            if(val[0]==0xb5&&val[1]==0x62){
+                i=0;
+                for(int j=0;j<50;j++) buf2[j]=buf1[j];
+                for(int j=0;j<50;j++) buf1[j]=buf0[j];
+         
+            }
+            
+            buf0[i]=val[0];
+
+        }
+        
+        
+        //GPSモジュールから来たデータを読み取り構造体に代入
+        for(int i=6;i<TIMEUTC_LEN+6;i++){
+            timeData.Raw[i-6]=buf0[i];
+        }
+        
+        
+        for(int i=6;i<VELNED_LEN+6;i++){
+            velData.Raw[i-6]=buf1[i];
+        }
+        
+        
+        for(int i=6;i<POSLLH_LEN+6;i++){
+            posData.Raw[i-6]=buf2[i];
+        }
+        
+    }
+    
+    cs=1;
+    
+    return flag;
+    
+}
+
+void GPS::chkData(obsvdData *obs){
+    
+    obs->Lon=posData.Data.lon;
+    obs->Lat=posData.Data.lat;
+    obs->GHeight=posData.Data.height;
+    
+    obs->VelN=velData.Data.velN;
+    obs->VelE=velData.Data.velE;
+    obs->VelD=velData.Data.velD;
+
+}
+
+void GPS::chkTime(timData* t){
+    t->Year=(int)timeData.Data.year;
+    t->Month=(int)timeData.Data.month;
+    t->Day=(int)timeData.Data.day;
+    t->Hour=(int)timeData.Data.hour+9; //日本標準時に変換
+    t->Min=(int)timeData.Data.min;
+    t->Sec=(int)timeData.Data.sec;
+}