高高度CanSat Space SWANの投下時に使用したプログラム.(IZU2019)

Dependencies:   Nichrome_lib mbed ads1115_test BNO055_lib ADXL375_i2c ES920LR CCS811_lib SDFileSystem BME280_lib INA226_lib EEPROM_lib GPS_interrupt

Revision:
5:b71a554ab4c4
Parent:
4:b878dce9c247
Child:
6:f2016544b9e4
--- a/main.cpp	Fri Feb 22 12:21:23 2019 +0000
+++ b/main.cpp	Fri Feb 22 13:02:57 2019 +0000
@@ -18,6 +18,12 @@
 設定値
 投下前に必ず確認!!
 *******************************************************************************/
+const float START_CONTROLL_TIME = 1.0f;
+const float START_CONTROLL_ALT = -5.0f;
+
+const float RECOVERY_TIME = 120.0f;
+const float RECOVERY_SPEED = -2.0f;
+
 bool wait_GPS = true;
 bool ok_PC = false;
 
@@ -54,8 +60,7 @@
 
 DigitalIn FlightPin(p15);
 
-Timeout timeout_stop;
-Timeout timeout_sep;
+Timeout timeout_start_controll;
 Timeout timeout_recovery;
 
 Timer time_main;
@@ -73,6 +78,8 @@
 void setup();   //無線あり
 
 void modeChange();  //無線あり
+void changePhase_RECOVERY();
+void startControllAttitude();
 
 void controllAttitude();
 
@@ -115,6 +122,7 @@
 int speed_time_old;
 float alt_buf[10], alt_ave, alt_ave_old, speed, speed_buf[10], speed_ave;
 int alt_count = 0, speed_count = 0;
+float alt_flight_start;
 
 int CO2, TVOCs;
 
@@ -234,32 +242,98 @@
 *******************************************************************************/
 void modeChange(){
     switch(CanSat_phase){
-        case CANSAT_SAFETY:
+        case CANSAT_SAFETY:////////////////////安全モード
         if(!do_first){
+            es920_using = true;
+            es920 << HEADER_START;
+            es920 << 'S';
+            es920.send();
+            es920_using = false;
             
+            do_first = true;
+        }
+        break;
+        
+        case CANSAT_WAIT:////////////////////待機モード
+        if(!do_first){
+            es920_using = true;
+            es920 << HEADER_START;
+            es920 << 'W';
+            es920.send();
+            es920_using = false;
+            
+            do_first = true;
+        }
+        if(flight_pin){
+            CanSat_phase = CANSAT_FLIGHT;
+            do_first = false;
         }
         break;
         
-        case CANSAT_WAIT:
+        case CANSAT_FLIGHT:////////////////////フライトモード
         if(!do_first){
+            es920_using = true;
+            es920 << HEADER_START;
+            es920 << 'F';
+            es920.send();
+            es920_using = false;
             
+            if(save_slow && !save_fast){
+                stopRec();
+                startRecFast();
+            }
+            else if(!save_slow && !save_fast){
+                startRecFast();
+            }
+            
+            time_flight.reset();
+            time_flight.start();
+            
+            alt_flight_start = alt;
+            timeout_start_controll.attach(&startControllAttitude, START_CONTROLL_TIME);
+            
+            timeout_recovery.attach(&changePhase_RECOVERY, RECOVERY_TIME);
+            
+            do_first = true;
         }
-        break;
-        
-        case CANSAT_FLIGHT:
-        if(!do_first){
-            
+        if(alt - alt_flight_start > START_CONTROLL_ALT){
+            startControllAttitude();
+        }
+        if(speed_ave > RECOVERY_SPEED){
+            changePhase_RECOVERY();
         }
         break;
         
         case CANSAT_RECOVERY:
         if(!do_first){
+            es920_using = true;
+            es920 << HEADER_START;
+            es920 << 'R';
+            es920.send();
+            es920_using = false;
             
+            stopRec();
+            startRecSlow();
+            
+            controll_yn = false;
+            
+            Buzzer.fire_on();
+            
+            do_first = true;
         }
         break;
     }
 }
 
+void changePhase_RECOVERY(){
+    CanSat_phase = CANSAT_RECOVERY;
+    do_first = false;
+}
+
+void startControllAttitude(){
+    controll_yn = true;
+}
+
 /*******************************************************************************
 姿勢制御
 *******************************************************************************/