2017能代宇宙イベント開放用プログラム(kobayashi)

Dependencies:   mbed MS5607 MPU6050

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include <mbed.h>
00002 #include <string.h>
00003 #include えむぴーゆー
00004 #include 卍卍エムエス卍卍
00005 
00006 //主関数
00007 void _log;
00008 void _open;
00009 
00010 //雑関数
00011 float mannaka;
00012 float 
00013 
00014 #define RATE_LOG 100
00015 #define RATE_OPEN 20
00016 
00017 enum FHASE{SETUP=0,LAUNCH=1,RISE=3,DROP1=7,DROP2=15,LAND=16}Fhase; //二進数
00018 
00019 //タイマー系
00020 Ticker tic_log;
00021 Ticker tic_open;
00022 Timer time;
00023 
00024 int main(){
00025  time.start();
00026  tic_open.attach(&_open , 1.0/RATE_LOG);
00027  tic_open.attach(&_log , 1.0/RATE_OPEN);
00028 }
00029 
00030 void _log{
00031     
00032 }
00033 
00034 void _open{
00035     switch(Phase){
00036         case SETUP: if フライトモード解除
00037                     Fhase = LAUNCH;
00038                 break
00039         case LAUNCH:
00040                     配列つくる(X,Y,Z)
00041                     タイマースタート
00042                     加速度とる
00043                     合成する
00044                     if 加速度(合成したもの)==一定の値
00045                     if (時間>=TBD){
00046                         カウント=0
00047                     }
00048                     if (カウント==5){
00049                     Fhase = RISE;
00050                     }
00051                 break
00052         case RISE:
00053                     タイマー    
00054                     高度とる
00055                     _mannaka呼び出す
00056                     if (高度<=頂点){
00057                         カウント++
00058                     }
00059                     if (時間>=TBD){
00060                         カウント=0
00061                     }
00062                     if (カウント==5){
00063                     パラシュート開放
00064                     }
00065                     Fhase = DROP1;
00066                 break
00067         case DROP1:
00068                     タイマー
00069                     高度とる
00070                     _mannaka呼び出す
00071                     if (高度<=リーふぃんぐ高度){
00072                         カウント++
00073                     }
00074                     if (時間>=TBD){
00075                         カウント==0
00076                     }
00077                     if (カウント==5){
00078                         リーふぃんぐ開放
00079                     }
00080                     Fhase = DROP2;
00081                 break
00082         case DROP2:
00083                     if 時間==TBD
00084                     さーぼの電源切る
00085                     Fhase = LAND; 
00086                 break
00087         case LAND:
00088                 break
00089     }
00090 }
00091 
00092 float mannaka(float data[],int num){
00093     float ans;
00094     float *data_copy;
00095     float data_copy = new float [num] //float型の配列を[num]分確保
00096     memcpy(data_copy,data,sizeof(float) *num);
00097     for(int i=0,i<num,i++){
00098         for(int j=0,j<num+1,j++){
00099             if(copy_data[j]>copy_data[j+1]){
00100                 int tmp = copy_data[j];
00101                 copy_data[j] = copy_data[j+1];
00102                 copy_data[j+1] = tmp;
00103             }
00104         }
00105     }
00106     if (num%2=0){
00107         ans = (data_copy[num/2]+data_copy[(num/2)+1])/2;
00108     }else{
00109         ans = data_copy[num/2];
00110     }
00111     delete[] data_copy;
00112     return 0;
00113 }