imu/gnss logger ver1.1

Dependencies:   mbed MPU9250_SPI MG354PDH0 SDFileSystem

Revision:
2:9216162a9e17
Parent:
1:8757d12d193b
Child:
3:d564c0a27ba7
--- a/main.cpp	Wed Apr 28 06:59:04 2021 +0000
+++ b/main.cpp	Sat May 15 08:14:50 2021 +0000
@@ -2,18 +2,21 @@
 //GNSS logger with ublox-NEO7M 
 //MPU board:  mbed LPC1768
 //GNSS module: ublox-NEO7M
-//2021/04/26  A.Toda
+//2021/04/28  A.Toda
 //========================================================
 #include "mbed.h"
 #include "SDFileSystem.h"
+#include "MG354PDH0.h"
 //=========================================================
 //Port Setting
 Serial pc(USBTX, USBRX); // tx, rx
+Serial   epson_imu(p28, p27);                  // IMU通信用シリアルポート
 SPI spi(p11, p12, p13);  // mosi, miso, sclk
+
 DigitalOut CS(p15);      // NEO-7MのCSピン
 DigitalIn log_switch(p16);      // 
 
-//SDFileSystem sd(PA_7, PA_6, PA_5, PA_4, "sd");
+MG354PDH0        imu(&epson_imu);                     // IMU
 SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sclk, cs
 
 //ファイルポインタ
@@ -21,6 +24,11 @@
 FILE *im;
 
 //=========================================================
+//IMUの変数
+float gyro_val[3];//角速度の値
+float acc_val[3];//加速度の値
+
+//=========================================================
 //受信したメッセージから抽出したい情報
 float latitude,longitude,height_float;  //緯度、経度、高度
 int gps_Fix; // GPSの測位状態この値が3ならば3D Fix状態である
@@ -36,7 +44,8 @@
 
 //=========================================================
 //処理時間
-int processed_time,processed_time_before,processed_time_after,measurement_time_g;
+int processed_time,processed_time_before,processed_time_after;
+float measurement_time_g;
 
 //=========================================================
 //Ticker
@@ -293,6 +302,22 @@
     }else if(log_switch==0){
         logging_status=0;
     }else{}
+
+    gyro_val[0]=imu.read_angular_rate_x();//X軸周りの角速度の算出
+    gyro_val[1]=imu.read_angular_rate_y();//Y軸周りの角速度の算出
+    gyro_val[2]=imu.read_angular_rate_z();//Z軸周りの角速度の算出
+        
+    acc_val[0]=imu.read_acceleration_x();//X軸の加速度の算出
+    acc_val[1]=imu.read_acceleration_y();//Y軸の加速度の算出
+    acc_val[2]=imu.read_acceleration_z();//Z軸の加速度の算出
+    
+    //計測時間の取得
+    measurement_time_g = processing_timer.read();
+    
+    if(logging_status==1){
+        fprintf(im,"%f,%f,%f,%f,%f,%f,%f\r\n",measurement_time_g,gyro_val[0],gyro_val[1],gyro_val[2],acc_val[0],acc_val[1],acc_val[2]);
+        pc.printf("IL\r\n");//imu logging
+    }else if(logging_status==0){}
     
 }
 
@@ -305,27 +330,16 @@
     processGPS();
     processGPS();
     
-    measurement_time_g = processing_timer.read_us();
-    //pc.printf("%d\r\n",measurement_time_g);// captureing prossing time
-        
+    //計測時間の取得
+    measurement_time_g = processing_timer.read();
+    
     if(logging_status==1){
-        fprintf(fp, "%d,%f,%f,%f,%f,%f,%f\r\n",measurement_time_g,latitude,longitude,height_float,velN_float,velE_float,velD_float);
+        fprintf(fp, "%f,%f,%f,%f,%f,%f,%f\r\n",measurement_time_g,latitude,longitude,height_float,velN_float,velE_float,velD_float);
     }else if(logging_status==0){}
             
     //位置と速度情報を読み取った場合
     if((flag_posllh==1)&&(flag_velned==1)){
-        /*Teratermでロギングする用の表示*/
-        //pc.printf("%f,%f,%f,%f,%f,%f\r\n",latitude,longitude,height_float,velN_float,velE_float,velD_float);
-        /*計測ではなくデバッグ用の表示*/
-        //pc.printf("latitude=%f,longitude=%f,height=%f\r\n",latitude,longitude,height_float);
-        //pc.printf("velN=%f,velE=%f,velD=%f\r\n",velN_float,velE_float,velD_float);
         
-        
-        /*processGPSの処理時間の表示*/
-        //pc.printf("processed_time_before(us)=%d\r\n",(processed_time_before));
-        //pc.printf("processed_time_after(us)=%d\r\n",(processed_time_after));
-        //pc.printf("processed_time(us)=%d\r\n",processed_time);    
-            
         /*フラグを0に戻す*/
         flag_posllh=0;
         flag_velned=0;
@@ -340,14 +354,23 @@
 /*--------------------------------------------*/
 int main() {
     
+    //power on wait 800ms form IMU
+    wait(1.0);
+    
+    //IMU initialize
+    imu.power_on_sequence1();//IMUが動作可能かどうかの確認
+    imu.power_on_sequence2();//IMUが動作可能かどうかの確認
+    imu.UART_CTRL_write();//IMUのボーレートを480600,手動モードへ移行
+    imu.move_to_sampling_mode();//サンプリングモードへの移行
+    
     //UART initialization
-    pc.baud(460800); //115.2 kbps
+    pc.baud(460800); //460.8 kbps
     
     spi.frequency(5500000);
     
     mkdir("/sd/mydir",0777);//SDファイル作成
-    fp = fopen("/sd/mydir/gps.txt", "a");//最初のSDopen時間かかるのでwhile外で行う
-    //im = fopen("/sd/mydir/imu.txt", "a");
+    fp = fopen("/sd/mydir/gps.csv", "a");//最初のSDopen時間かかるのでwhile外で行う
+    im = fopen("/sd/mydir/imu.csv", "a");
     
     if(fp == NULL) {
        error("Could not open file for write\n");
@@ -378,6 +401,7 @@
         
         if(logging_status==0){
             fclose(fp);
+            fclose(im);
             pc.printf("FC\r\n");
             timer2.detach();
             timer1.detach();