ルンパッパ

Dependencies:   mbed BMP180

Revision:
3:3a62c5ccfddb
Parent:
2:20304b3cea67
Child:
4:443e82b039ba
--- a/main.cpp	Thu Dec 17 13:32:46 2020 +0000
+++ b/main.cpp	Fri Dec 18 11:43:47 2020 +0000
@@ -10,7 +10,8 @@
 
 Serial pc(SERIAL_TX,SERIAL_RX,921600);//通信
 Serial xbee(D1,D0);//Xbeeのピン
-DigitalOut FET(D9);//FETのピン
+DigitalOut FET1(D9);//FETのピン
+DigitalOut FET2(D8);
 DigitalIn flight(D6);  //フライトピンのピン    
 DigitalOut SW(D7);//フライトピンの電圧降下ピン 
 TB6612 motor(D7,D9,D11);//モータードライバーのピン
@@ -18,8 +19,9 @@
 
 
   int main(){
-    float x8;
-    FET=0;
+    float avalt,x8;
+    FET1=0;
+    FET2=0;
     SW=1;
     flight==1;//フライトピンがついている
 
@@ -36,6 +38,8 @@
         else{
 
         SW = 0;
+        FET2=1;
+        wait(25);
         xbee.printf("やったぞおおおおおおおおお!\n");
   
     break;
@@ -45,6 +49,7 @@
     BMP180 bmp180(PIN_SDA,PIN_SCL);
     float pressure,temperature,altitude;//気圧,気温,高度
     int n;
+    int t=0;
     xbee.printf("\rstart!\n\r");//気圧センサースタート
     bmp180.Initialize(27,BMP180_OSS_ULTRA_HIGH_RESOLUTION);//27は府大の海抜高度
     xbee.printf("initialization complete!\n\r");//初期化完了
@@ -52,17 +57,22 @@
     while(1){
         if(bmp180.ReadData(&temperature,&pressure)){
           float x4,x5,x6,x7,a,b;
-            a = pressure;
+          float sum=0,altitude[11];
+            for(int p=1;p<11;p++){
+                a = pressure;
             b = temperature;
             x4 = 1019.11 / a; //海面気圧を気圧でわる
             x5 = powf(x4, 0.1902225); //5.257ぶんの1
             x6 = 273.15 + b; //絶対温度
             x7 = (x5 - 1) * x6;
             x8 = x7 / 0.0065;
-            altitude = x8;
+            altitude[p] = x8;
+            sum=sum+altitude[p];
+            }
+            avalt=sum/10;
             
             
-            xbee.printf("Altitude(m)\t:%.3f\n\r",altitude);
+            xbee.printf("Altitude(m)\t:%.3f\n\r",avalt);
             xbee.printf("--------------------------------\n\r");
             wait(3);
             break;
@@ -77,7 +87,10 @@
             if(bmp180.ReadData(&temperature,&pressure)){
                 float y4,y5,y6,y7,y8,c,d;
                 float speed;
-                
+                float s=0;
+                float alti[11];
+                float average_alti;
+                for(int q=1;q<11;q++){
                 c = pressure;
                 d = temperature;
                 y4 = 1019.11 / c; //海面気圧を気圧でわる
@@ -85,28 +98,33 @@
                 y6 = 273.15 + d;
                 y7 = (y5 - 1) * y6;
                 y8 = y7 / 0.0065;
-                altitude = y8;
-                speed = (x8 - y8)/(float)(3+n);//値が取得でた場合は,3秒間の速さをだし,値が取得できなかった場合は3+n秒(nは値が取得できなかった回数)の速さをだす
+                alti[q]= y8;
+                s=s+alti[q];
+                }
+                average_alti=s/10;
+                speed = (avalt - average_alti)/(float)(3+n);//値が取得でた場合は,3秒間の速さをだし,値が取得できなかった場合は3+n秒(nは値が取得できなかった回数)の速さをだす
                 
-                xbee.printf("Altitude(m)\t:%.3f\n\r",altitude);
+                xbee.printf("Altitude(m)\t:%.3f\n\r",average_alti);
                 xbee.printf("Speed(m/s)\t:%.3f\n\r",speed);
-                xbee.printf("--------------------------------\n\r");
+                xbee.printf("-------------------------------\n\r");
                 x8 = y8;
                 n=0;
                 wait(3);
-                if(speed<=0){
-                    break;
+                if(speed<=0.5){
+                    t++;
                     }
-            }else{
-                    xbee.printf("NO DATA\n\r");
+            }else{xbee.printf("NO DATA\n\r");
                     ++n;
                     wait(1);
                     }
+                    if(t=3){
+                        break;
+                        }
            }
-           /*speedが0以下になったらFETに20秒電流を流してその後電流を止める*/         
-    FET=1;
-wait(20);
-FET=0;
+           /*speedが3回0.5m/sになったらFETに20秒電流を流してその後電流を止める*/         
+    FET1=1;
+wait(10);
+FET1=0;
 motor = 100; 
 double a;
     double b;
@@ -119,17 +137,19 @@
             /*a,bを緯度経度の初期値で初期化*/
             a=gps.latitude;
             b=gps.longitude;
-            xbee.printf("(%lf,%lf)\r\n",gps.latitude,gps.longitude);//緯度と経度を表示
+           /* xbee.printf("(%lf,%lf)\r\n",gps.latitude,gps.longitude);//緯度と経度を表示
             xbee.printf("--------------------------------\n\r");
-                      break;
+            xbee.printf("ドジャース");
+                      break;*/
         }else{
             xbee.printf("Fault_No_Data\r\n");
+            xbee.printf("メノクラゲ");
          wait(1);
         }
         }  
          while(1){
          if(gps.getgps()){
-             xbee.printf("(%lf,%lf)\n\r",gps.latitude,gps.longitude);//緯度と経度を表示
+             //xbee.printf("(%lf,%lf)\n\r",gps.latitude,gps.longitude);//緯度と経度を表示
             xbee.printf("--------------------------------\n\r");
              
     /*ここから距離の計算*/