2017.11伊豆大島共同打ち上げ実験の開放用プログラム

Dependencies:   BMP180 MPU6050 mbed

Fork of Sample_BMP180 by CORE

Revision:
6:e0c25c3976ae
Parent:
5:a5cf6914e7c4
Child:
7:4efaca1e9acd
--- a/main.cpp	Sun Oct 22 15:07:19 2017 +0000
+++ b/main.cpp	Sun Oct 29 13:38:47 2017 +0000
@@ -5,6 +5,7 @@
 
 #define LAUNCH_JUDGE_ACC_g  3.0
 #define PARA_OPEN_TIME_s    10.0
+#define PARA_OPEN_CNT       7
 #define PARA_OPEN_FILTER_s  6.0
 #define LEAF_UNLOCK_TIME_s  10.0
 #define LEAF_UNLOCK_ALT_m   300.0
@@ -15,8 +16,8 @@
 Timer           para_timer;
 Timer           leaf_timer;
 Ticker          readtimer;
-PwmOut          mg996(dp18);
-PwmOut          sg92(dp1);
+PwmOut          mg996(dp1);
+PwmOut          sg92(dp18);
 DigitalIn       oshirase1(dp11);
 DigitalInOut    oshirase2(dp10);
 DigitalOut      myled(LED1);
@@ -36,7 +37,7 @@
 int     Alt_cnt;
 float   a[3],Acc;
 float   Pressure,Temperature,Altitude;
-float   Alt_buff[10],Acc_buff[10];
+float   Alt_buff[10],Alt_median_buff[10],Acc_buff[10];
 float   Land_Alt;
 bool    Mg996Open = true;
 bool    Sg92Open  = true;
@@ -46,8 +47,6 @@
 //    pc.printf("Hello!");
     mg996.period_ms(20);
     sg92.period_ms(20);
-    _close();
-    _leaf_lock();
     mpu.setAcceleroRange(0);
     bmp.Initialize(64,BMP180_OSS_ULTRA_LOW_POWER);
     oshirase2.input();
@@ -88,6 +87,8 @@
 void _flight(){
     oshirase2.output();
     oshirase2 = 0;
+    _close();
+    _leaf_lock();
 
     /*  地上高度取得  */
     for(int i=0;i<10;i++){
@@ -115,13 +116,19 @@
     /*  開放判定    */
     while(1){
         Alt_cnt = 0;
-        Alt_buff[0] = _getAlt();
+        for(int i=0;i<10;i++){
+            Alt_buff[i] = _getAlt();
+        }
+        Alt_median_buff[0] = _median(Alt_buff,10);
         for(int i=1;i<10;i++){
-            Alt_buff[i] = _getAlt();
-            if(Alt_buff[i] < Alt_buff[i-1]) Alt_cnt++;
+            for(int j=0;j<10;j++){
+                Alt_buff[j] = _getAlt();
+            }
+            Alt_median_buff[i] = _median(Alt_buff,10);
+            if(Alt_median_buff[i] < Alt_median_buff[i-1]) Alt_cnt++;
         }
         if(para_timer.read() >= PARA_OPEN_FILTER_s){
-            if(Alt_cnt > 6 || para_timer.read() >= PARA_OPEN_TIME_s){
+            if(Alt_cnt >= PARA_OPEN_CNT/* || para_timer.read() >= PARA_OPEN_TIME_s*/){
                 _open();
                 leaf_timer.start();
                 oshirase2 = 0;
@@ -138,8 +145,9 @@
             Alt_buff[i] = _getAlt();
         }
         Altitude = _median(Alt_buff,10);
-        if(Altitude <= LEAF_UNLOCK_ALT_m || leaf_timer.read() >= LEAF_UNLOCK_TIME_s){//TODO:現在の高度から地上高度を引く
+        if(/*Altitude - Land_Alt <= LEAF_UNLOCK_ALT_m ||*/ leaf_timer.read() >= LEAF_UNLOCK_TIME_s){
             _leaf_unlock();
+            oshirase2 = 1;
             leaf_timer.stop();
 //            for(int i=0;i<10;i++)pc.printf("%f\n\r",Alt_buff[i]);
             break;
@@ -149,10 +157,10 @@
 
 
 /*  サーボ用関数  */
-void _close() {mg996.pulsewidth(0.0006);}
-void _open() {mg996.pulsewidth(0.0023);}
-void _leaf_lock() {sg92.pulsewidth(0.0005);}
-void _leaf_unlock() {sg92.pulsewidth(0.0023);}
+void _close() {mg996.pulsewidth(0.0010);}
+void _open() {mg996.pulsewidth(0.0020);}
+void _leaf_lock() {sg92.pulsewidth(0.0010);}
+void _leaf_unlock() {sg92.pulsewidth(0.0020);}
 
 
 /*  高度取得関数    */
@@ -162,7 +170,7 @@
 }
 
 
-/*  加速度取得関数 */
+/*  合成加速度取得関数 */
 float _getAcc(){
     mpu.getAccelero(a);
     return sqrt(pow(a[0]/9.81,2)+pow(a[1]/9.81,2)+pow(a[2]/9.81,2));