a

Dependencies:   mbed Servo SRF02 LPS25HB_I2C MPU6050 SDFileSystem HEPTA_COM

Revision:
3:10861141fce3
Parent:
2:9bfc2984e322
--- a/main.cpp	Tue Nov 09 12:07:51 2021 +0000
+++ b/main.cpp	Wed Dec 01 07:15:12 2021 +0000
@@ -1,8 +1,9 @@
 //コマンドなしver
-//コマンドだと反応しないため
+//コマンドだと反応しないため→コマンド用のxbeeを必要だと思われる。
+//xbeeが使えない→基盤ミス
 
 #include "mbed.h"
-//#include "SRF02.h"
+#include "SRF02.h"
 #include "SDFileSystem.h"
 #include "Servo.h"
 #include "MPU6050.h"
@@ -10,82 +11,111 @@
 
 DigitalOut myleds[]={LED1,LED2,LED3,LED4};
 
-SDFileSystem sd(p5, p6, p7, p8, "sd"); //SDcard
-//SRF02 sensor(p9,p10,0xE0);           //距離センサ (使わない)
-Servo myservo(p21);                    //モーター
-Serial pc(USBTX,USBRX,9600);           //機体teraterm
-Serial xbee(p13,p14,9600);             //xbee
-MPU6050 mpu(p28,p27);                  //9軸
-I2C i2c(p28,p27);                     //気圧
+
+SDFileSystem sd(p5, p6, p7, p8, "sd");      //SDcard
+SRF02 sensor(p9,p10,0xE0);                  //距離
+Servo myservo(p21);                         //モーター
+Serial pc(USBTX,USBRX,9600);                //機体teraterm
+//Serial xbee(p13,p14,9600);                //xbee(今回使わない)
+MPU6050 mpu(p9,p10);                        //9軸
+I2C i2c(p28,p27);                           //気圧
 LPS ps(i2c);
 
 int accel[3];
 
-Timer t;
+Timer t;                                    //時間は表示する
 
 int main() {
     t.start();
-    xbee.printf("SDcard start\r\n");
+    //xbee.printf("SDcard start\r\n");
     pc.printf("SDcard start\r\n");
-    mkdir("/sd/mydir", 0777);  //filename
-    FILE *fp = fopen("/sd/mydir/sdtest.txt", "w"); //open
+    mkdir("/sd/mydir", 0777);                               //filename
+    FILE *fp = fopen("/sd/mydir/sdtest.txt", "w");          //open
     
     if (!ps.init()){
         pc.printf("Failed to autodetect pressure sensor!\r\n");
         while (1);
         }
         ps.enableDefault();
-        for(int num =0;num<1000;num++){         //回数(数値を変える必要ある)
+        
+        while(1){                                                           //dが**cm以下になった場合、for文に移る
             myleds[1] = 1; 
             wait(0.01);
-            L:     //移動場所
-            //気圧センサー(SDcardとteratermに表示する)
-            float pressure = ps.readPressureMillibars();
-            float altitude = ps.pressureToAltitudeMeters(pressure)-65;     //補正値必須
-            float temperature = ps.readTemperatureC();
+            
+            //気圧センサー(ここでは表示しない)
+            //float pressure = ps.readPressureMillibars();
+            //float altitude = ps.pressureToAltitudeMeters(pressure)-65;     //補正値必須
+            //float temperature = ps.readTemperatureC();
             //pc.printf("p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C\r\n",pressure,altitude,temperature);
             
-            //距離SRF02(表示しない)
-            //int d = sensor.getDistanceCm();
-            //pc.printf("Distance = %d cm\r\n",d);
-            //加速度MPU9250(表示する)
-            
-            mpu.readAccelData(accel);//加速度の値をaccel[3]に代入
-            int x = accel[0]-123;//x軸方向の加速度
-            int y = accel[1]+60;//y軸方向の加速度
-            int z = accel[2]+1110 ;//z軸方向の加速度
-            float X = x*0.000597964111328125;
-            float Y = y*0.000597964111328125;
-            float Z = z*0.000597964111328125;
-            double a = X*X+Y*Y+Z*Z-95.982071137936;
-            //pc.printf("%.2f %.2f %.2f %.2f\r\n",X,Y,Z,a);//速度と変位を表示
-            
+            //距離SRF02(使う)
+            int d = sensor.getDistanceCm();
+            pc.printf("Distance = %d cm\r\n",d);
             
-            wait(0.01);
-            pc.printf("number %f t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f\r\n",num,t.read(),pressure,altitude,temperature,X,Y,Z,a);
-            xbee.printf("number %f t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f\r\n",num,t.read(),pressure,altitude,temperature,X,Y,Z,a);
+            //加速度MPU9250(ここでは表示しない)
+            //mpu.readAccelData(accel);                                          //加速度の値をaccel[3]に代入
+            //int x = accel[0]-123;                                              //x軸方向の加速度
+            //int y = accel[1]+60;                                               //y軸方向の加速度
+            //int z = accel[2]+1110 ;                                            //z軸方向の加速度
+            //float X = x*0.000597964111328125;
+            //float Y = y*0.000597964111328125;
+            //float Z = z*0.000597964111328125;
+            //double a = X*X+Y*Y+Z*Z-95.982071137936;
+            //pc.printf("%.2f %.2f %.2f %.2f\r\n",X,Y,Z,a);                     //速度と変位を表示
             
-            if( 15<altitude && altitude< 20){   //標高(数値変える必要あり)
-            pc.printf("motor");
-            xbee.printf("motor");
-            for(int motor =0; motor <100; motor++) {
-             myservo = motor/100.0;
-             wait(0.01);
-             goto L;        //Lに移動
-             }
-             }
-             myleds[1]=0;
-             wait(0.01);
-             if(fp == NULL) {  //データが無い場合
+            if(fp == NULL) {                                                    //データが無い場合
              error("Could not open file for write\r\n");
              }
-             //fprintf(fp, "distance %d",d);  //距離保存(保存しない)
-             //fprintf(fp,"%.2f %.2f %.2f %.2f\r\n",X,Y,Z,a); //加速度保存
-             //fprintf(fp,"p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C\r\n",pressure,altitude,temperature);  //気圧保存
-             fprintf(fp,"%f,%0.4f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,\r\n",num,t.read(),pressure,altitude,temperature,X,Y,Z,a);
-             }
-             fclose(fp);  //保存終了
-             xbee.printf("SDcard OK");
-             pc.printf("SDcard OK");
-             t.stop();
-             }
\ No newline at end of file
+            fprintf(fp, "%d\r\n",d);                                            //距離保存
+            myleds[1] = 0;
+            wait(0.01);
+            
+            //表示させる文
+            //pc.printf("t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f %d\r\n",t.read(),pressure,altitude,temperature,X,Y,Z,a,d);
+            //xbee.printf("number %f t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f\r\n",t.read(),pressure,altitude,temperature,X,Y,Z,a);
+            
+            if(d <= 30){
+             //モータを動かす(スポンジ展開)
+             for(int motor =0; motor <100; motor++) {
+                 myservo = motor/100.0;
+                 wait(0.01);
+                 }
+                 for(int num =0;num<1000;num++){                                                                 //1000回行う(コマンドができないため)
+                    myleds[2] = 1;
+                    wait(0.01);
+                    //気圧センサー(表示する)
+                    float pressure = ps.readPressureMillibars();
+                    float altitude = ps.pressureToAltitudeMeters(pressure);                                      //補正値必須
+                    float temperature = ps.readTemperatureC();
+                    //pc.printf("p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C\r\n",pressure,altitude,temperature);
+                    
+                    //加速度MPU9250(表示する)
+                    mpu.readAccelData(accel);                                                                       //加速度の値をaccel[3]に代入
+                    int x = accel[0]-123;                                                                           //x軸方向の加速度
+                    int y = accel[1]+60;                                                                            //y軸方向の加速度
+                    int z = accel[2]+1110 ;                                                                         //z軸方向の加速度
+                    float X = x*0.000597964111328125;
+                    float Y = y*0.000597964111328125;
+                    float Z = z*0.000597964111328125;
+                    double a = X*X+Y*Y+Z*Z-95.982071137936;
+                    //pc.printf("%.2f %.2f %.2f %.2f\r\n",X,Y,Z,a);
+                    
+                    pc.printf("t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f\r\n",t.read(),pressure,altitude,temperature,X,Y,Z,a);
+                    
+                    if(fp == NULL) {                                                                                 //データが無い場合
+                    error("Could not open file for write\r\n");
+                    }
+                    fprintf(fp,"%0.4f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f\r\n",t.read(),pressure,altitude,temperature,X,Y,Z,a);      //SDカードに保存
+                    //xbee.printf("number %f t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f\r\n",t.read(),pressure,altitude,temperature,X,Y,Z,a);
+                    myleds[2] = 0;
+                    wait(0.01);
+                    }
+                    
+                    //回数分行ったら、SDカードを保存終了
+                    fclose(fp);                                             //保存終了
+                    //xbee.printf("SDcard OK");
+                    pc.printf("SDcard OK");
+                    t.stop();
+                    }
+                    }
+                    }
\ No newline at end of file