imu/gnss logger ver1.1
Dependencies: mbed MPU9250_SPI MG354PDH0 SDFileSystem
Diff: main.cpp
- 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();