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

Dependencies:   BMP180 MPU6050 mbed

Fork of Sample_BMP180 by CORE

Revision:
4:ae20e73f4924
Parent:
3:217b56515009
Child:
5:a5cf6914e7c4
--- a/main.cpp	Sat Oct 21 16:10:49 2017 +0000
+++ b/main.cpp	Sun Oct 22 04:36:54 2017 +0000
@@ -3,21 +3,23 @@
 #include "MPU6050.h"
 #include "BMP180.h"
 
-#define LAUNCH_JUDGE_ACC_g  -1.0
+#define LAUNCH_JUDGE_ACC_g  3.0
 #define PARA_OPEN_TIME_s    5.0
 #define LEAF_UNLOCK_TIME_s  5.0
 #define LEAF_UNLOCK_ALT_m   300.0
 #define p0                  1013.25f
 
-BMP180      bmp(dp5,dp27);
-MPU6050     mpu(dp5,dp27);
-Timer       para_timer;
-Timer       leaf_timer;
-Ticker      readtimer;
-PwmOut      mg996(dp1);
-PwmOut      sg92(dp2);
-DigitalOut  myled(LED1);
-//Serial      pc(USBTX,USBRX);
+BMP180          bmp(dp5,dp27);
+MPU6050         mpu(dp5,dp27);
+Timer           para_timer;
+Timer           leaf_timer;
+Ticker          readtimer;
+PwmOut          mg996(dp1);
+PwmOut          sg92(dp2);
+DigitalIn       oshirase1(dp11);
+DigitalInOut    oshirase2(dp10);
+DigitalOut      myled(LED1);
+//Serial        pc(USBTX,USBRX);
 
 /*  自作関数    */
 void    _flight();
@@ -30,12 +32,13 @@
 float   _median(float data[], int num);
 
 /*  グローバル変数 */
-int   Alt_cnt;
-float a[3],acc;
-float pressure,temperature,altitude;
-float Alt_buff[10],Acc_buff[10];
-float land_alt;
-float t;
+int     Alt_cnt;
+float   a[3],Acc;
+float   Pressure,Temperature,Altitude;
+float   Alt_buff[10],Acc_buff[10];
+float   Land_Alt;
+bool    Mg996Open = true;
+bool    Sg92Open  = true;
 
 
 int main() {
@@ -46,31 +49,62 @@
     _leaf_lock();
     mpu.setAcceleroRange(0);
     bmp.Initialize(64,BMP180_OSS_ULTRA_LOW_POWER);
-    _flight();
+    oshirase2.input();
+    while(1){
+        if(oshirase1==0 && oshirase2==1){
+            _flight();
+            break;
+        }else if(oshirase1==1 && oshirase2==0){
+            while(1){
+                if(oshirase1==1 && oshirase2==1){
+                    if(Mg996Open){
+                        _close();
+                        Mg996Open = false;
+                    }else{
+                        _open();
+                        Mg996Open = true;
+                    }
+                    break;
+                }else if(oshirase1==0 && oshirase2==0){
+                    if(Sg92Open){
+                        _leaf_lock();
+                        Sg92Open = false;
+                    }else{
+                        _leaf_unlock();
+                        Sg92Open = true;
+                    }
+                    break;
+                }
+            }
+        }
+    }
     while(1);
 }
 
 
 /*  フライトモード用関数  */
 void _flight(){
-    
+    oshirase2.output();
+    oshirase2 = 0;
+
     /*  地上高度取得  */
     for(int i=0;i<10;i++){
         Alt_buff[i] = _getAlt();
     }
-    land_alt = _median(Alt_buff,10);
+    Land_Alt = _median(Alt_buff,10);
 //    for(int i=0;i<10;i++)pc.printf("%f\n\r",Alt_buff[i]);
 
     /*  発射判定    */
     while(1){
         myled = !myled;
         for(int i=0;i<10;i++){
-            acc = _getAcc();
-            Acc_buff[i] = acc;
+            Acc = _getAcc();
+            Acc_buff[i] = Acc;
         }
-        acc = _median(Acc_buff,10);
-        if(acc >= LAUNCH_JUDGE_ACC_g){
+        Acc = _median(Acc_buff,10);
+        if(Acc >= LAUNCH_JUDGE_ACC_g){
             para_timer.start();
+            oshirase2 = 1;
 //            for(int i=0;i<10;i++)pc.printf("%f\n\r",Acc_buff[i]);
             break;
         }
@@ -87,6 +121,7 @@
         if(Alt_cnt > 6 || para_timer.read() >= PARA_OPEN_TIME_s){
             _open();
             leaf_timer.start();
+            oshirase2 = 0;
             para_timer.stop();
 //            for(int i=0;i<10;i++)pc.printf("%f\n\r",Alt_buff[i]);
             break;
@@ -98,8 +133,8 @@
         for(int i=0;i<10;i++){
             Alt_buff[i] = _getAlt();
         }
-        altitude = _median(Alt_buff,10);
-        if(altitude <= LEAF_UNLOCK_ALT_m || leaf_timer.read() >= LEAF_UNLOCK_TIME_s){
+        Altitude = _median(Alt_buff,10);
+        if(Altitude <= LEAF_UNLOCK_ALT_m || leaf_timer.read() >= LEAF_UNLOCK_TIME_s){//TODO:現在の高度から地上高度を引く
             _leaf_unlock();
             leaf_timer.stop();
 //            for(int i=0;i<10;i++)pc.printf("%f\n\r",Alt_buff[i]);
@@ -118,8 +153,8 @@
 
 /*  高度取得関数    */
 float _getAlt(){
-    bmp.ReadData(&temperature,&pressure);
-    return (pow((p0/pressure), (1.0f/5.257f))-1.0f)*(temperature+273.15f)/0.0065f;
+    bmp.ReadData(&Temperature,&Pressure);
+    return (pow((p0/Pressure), (1.0f/5.257f))-1.0f)*(Temperature+273.15f)/0.0065f;
 }