2017能代宇宙イベント開放用プログラム(kobayashi)
Dependencies: mbed MS5607 MPU6050
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 }
Generated on Fri Jul 15 2022 02:23:48 by 1.7.2