2017.11伊豆大島共同打ち上げ実験の開放用プログラム
Dependencies: BMP180 MPU6050 mbed
Fork of 2017_11_1114 by
Diff: main.cpp
- 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; }