all ok yesMU2
Dependencies: mbed mbedTimer SDFileSystem MU2 GPS
Diff: main.cpp
- Revision:
- 16:917a2c03bd7c
- Parent:
- 15:bc013c313ef5
- Child:
- 17:993f2fcc43df
--- a/main.cpp Sun Aug 25 11:10:27 2019 +0000 +++ b/main.cpp Mon Sep 02 14:15:47 2019 +0000 @@ -1,16 +1,21 @@ #include "mbed.h" #include "MU2.h" +#include "GPS.h" #include "SDFileSystem.h" #include "inletclose.h" #include "mbedTimer.h" -//#include "GPS.h" - -#define FIRETIME 5 //溶断時間を設定 -#define FALLTIME 10 //シェンロン展開してインレットを閉鎖するまでの時間を設定 -#define CLOSETIME 10 //インレット閉鎖機構の稼働時間を設定 +#define WAITTIME 5 //フライトピン抜けてからの待機時間 +#define FIRETIME 5 //溶断時間を設定 +#define FALLTIME 5 //シェンロン展開してインレットを閉鎖するまでの時間を設定 +#define CLOSETIME 60 //インレット閉鎖機構の稼働時間を設定 +#define THRESHOLID 0.45 //感圧のしきい値 +#define INTERVALTIME 300 //インターバルモードの時間 +#define INTERVAL_HIGH 5 //インターバルモードでモーター回す時間 +#define INTERVAL_LOW 20 //インターバルモードでモーター止める時間 -char fname[]="/sd/CanSat/log0826_test10.csv";//ファイル名をここで設定 +char fname[]="/sd/CanSat/log0902test3.csv";//ファイル名をここで設定 +char fname2[]="/sd/CanSat/sensor0902test3.csv";//感圧センサーのログファイル ////////////////フライトピンが抜ける→シェンロン展開→インレット閉鎖→待機 //シーケンス番号//1//////////////////2///////////3///////////4/// @@ -18,13 +23,12 @@ //ただし今回はシーケンス4つなのでそれぞれのシーケンスでそれぞれのLEDが光る MU2 MuPort(p28,p27); -SDFileSystem sd(p5, p6, p7, p8, "sd");//3号機11,12,13,14 -//GPS gps(p13,p14); -Serial gps(p13,p14); //3号機9,10 +SDFileSystem sd(p5, p6, p7, p8, "sd");//3号機11,12,13,14 4号機5,6,7,8 +GPS mygps(p13,p14);//3号機9,10 4号機13,14 Inlet inlet(p26,p15,p16);//モーター出力,感圧センサー1入力,感圧センサー2入力 -DigitalOut FIRE(p25); //溶断 +DigitalOut FIRE(p25); //3号機24 4号機25 DigitalOut myled(LED1); DigitalOut myled2(LED2); @@ -35,10 +39,13 @@ Timer timer_rec;//時間計測 int val; +int val2; char sendMessage[128]; - - - +float ave_sensor; +int timer; +int timer2; +int timer3; +int timer4; /******************************************************************************* メイン関数 @@ -48,7 +55,7 @@ { timer_rec.start(); - wait(0.1);//起動してからちょっと待つ + wait(WAITTIME);//起動してからちょっと待つ inlet.Stop(); FILE* fp= fopen(fname, "a"); if(fp == NULL) { @@ -86,28 +93,24 @@ FIRE=0; myled=0; - wait(3); + /*wait(3); FIRE=1; myled=1; wait(3);//溶断にかかる時間TBD秒 FIRE=0; - myled=0; + myled=0;*/ fprintf(fp, "FireFinish!\r\n"); MuPort.send("Fire Finish!\r\n"); //溶断機構終わり - gps.baud(9600);//9600 - char recvGPS=0; - char getGPS[128]; - int i=0; - int timer=0; /******************************************************************************* シェンロン展開 *******************************************************************************/ + timer=0; val=timer_rec.read(); myTimer.sendMessage(val); @@ -118,92 +121,229 @@ while(1) { myled=0; myled2=1; - //if(gps.readable()) { - recvGPS=gps.getc(); - getGPS[i]=recvGPS; - - if(getGPS[i]=='\n') { - - if((getGPS[5]=='G')&&(getGPS[6]=='A')) { - val=timer_rec.read(); - myTimer.sendMessage(val); - MuPort.send(myTimer.timeMessage); - MuPort.send(getGPS); - - myled=1; + mygps.getGPGGA(); + if(mygps.GPSread) { + myled=1; + val=timer_rec.read(); + myTimer.sendMessage(val); + MuPort.send(myTimer.timeMessage); + MuPort.send(mygps.getGPS); + fprintf(fp, "%s %s\n",myTimer.timeMessage,mygps.getGPS); + timer++; + } - fprintf(fp, "%s %s\n",myTimer.timeMessage,getGPS); - - //wait(1.0); - timer++; - } - - i=0; - } - i++; if(timer>FALLTIME) { //落下開始してからTBD秒後whileを抜ける. fclose(fp); break; } - //} - //fclose(fp); } /******************************************************************************* - インレット閉鎖 + インレット連続閉鎖 *******************************************************************************/ fp= fopen(fname, "a"); + FILE* fp2= fopen(fname2, "a"); val=timer_rec.read(); myTimer.sendMessage(val); - fprintf(fp, "%s InletStart!\r\n",myTimer.timeMessage); + fprintf(fp, "%s ClosingModeStart!\r\n",myTimer.timeMessage); MuPort.send(myTimer.timeMessage); - MuPort.send("Inlet start!\r\n"); + MuPort.send("Closing Mode start!\r\n"); timer=0;//モーター時間で止める用 + timer2=0; while(1) { myled=0; myled2=0; myled3=1; - //if(gps.readable()) { - recvGPS=gps.getc(); - getGPS[i]=recvGPS; - if(getGPS[i]=='\n') { + mygps.getGPGGA(); + if(mygps.GPSread) { + myled2=1; + val=timer_rec.read(); + myTimer.sendMessage(val); + MuPort.send(myTimer.timeMessage); + MuPort.send(mygps.getGPS); + fprintf(fp, "%s %s\n",myTimer.timeMessage,mygps.getGPS); + + } + + inlet.getvalue1(); + inlet.getvalue2(); + ave_sensor=(inlet.value1+inlet.value2)/2; + fprintf(fp2, "%d,sensor1,%f,sensor2,%f,average,%f\n",timer2,inlet.value1,inlet.value2,ave_sensor); + timer2++; + - if((getGPS[5]=='G')&&(getGPS[6]=='A')) { - val=timer_rec.read(); - myTimer.sendMessage(val); - MuPort.send(myTimer.timeMessage); - MuPort.send(getGPS); - myled2=1; - fprintf(fp, "%s %s\n",myTimer.timeMessage,getGPS); + if(ave_sensor>THRESHOLID) { + val=timer_rec.read(); + myTimer.sendMessage(val); + fprintf(fp, "%s Get the rigidity!\r\n",myTimer.timeMessage); + MuPort.send(myTimer.timeMessage); + MuPort.send("Get the rigidity!\r\n"); + + timer=0;//モーター時間で止める用 - //wait(1.0); - timer++; + while(1) { + mygps.getGPGGA(); + if(mygps.GPSread) { + myled2=1; + val=timer_rec.read(); + myTimer.sendMessage(val); + MuPort.send(myTimer.timeMessage); + MuPort.send(mygps.getGPS); + fprintf(fp, "%s %s\n",myTimer.timeMessage,mygps.getGPS); + timer++; + } + + inlet.getvalue1(); + inlet.getvalue2(); + ave_sensor=(inlet.value1+inlet.value2)/2; + fprintf(fp2, "%d,sensor1,%f,sensor2,%f,average,%f\n",timer2,inlet.value1,inlet.value2,ave_sensor); + timer2++; + + if(timer>CLOSETIME) { + break; + } + } - i=0; + inlet.Stop(); + val=timer_rec.read(); + myTimer.sendMessage(val); + fprintf(fp, "%s ClosingModeFinish!\r\n",myTimer.timeMessage); + MuPort.send(myTimer.timeMessage); + MuPort.send("Closing Mode Finish!\r\n"); + fclose(fp); + fclose(fp2); + break; + + } - i++; - if(timer>CLOSETIME) { - inlet.Stop();// + + inlet.Close(1.1);//1より大きい引数にしておけばモーターはずっと回ってる. + + } + + /******************************************************************************* + インレットインターバル閉鎖 + *******************************************************************************/ + + + fp= fopen(fname, "a"); + fp2= fopen(fname2, "a"); + val=timer_rec.read(); + myTimer.sendMessage(val); + fprintf(fp, "%s IntervalModeStart!\r\n",myTimer.timeMessage); + MuPort.send(myTimer.timeMessage); + MuPort.send("Interval Mode start!\r\n"); + // fclose(fp); + + timer=0;//モーター時間で止める用 + timer3=0; + val2=0; + + while(1) { + + myled=0; + myled2=0; + myled3=0; + myled4=1; + + mygps.getGPGGA(); + if(mygps.GPSread) { + myled3=1; val=timer_rec.read(); myTimer.sendMessage(val); - fprintf(fp, "%s InletFinish!\r\n",myTimer.timeMessage); MuPort.send(myTimer.timeMessage); - MuPort.send("Inlet finish!\r\n"); + MuPort.send(mygps.getGPS); + //fp= fopen(fname, "a"); + fprintf(fp, "%s %s\n",myTimer.timeMessage,mygps.getGPS); + //fclose(fp); + timer++; + timer3++; + } + + inlet.getvalue1(); + inlet.getvalue2(); + ave_sensor=(inlet.value1+inlet.value2)/2; + //fp2= fopen(fname2, "a"); + fprintf(fp2, "%d,sensor1,%f,sensor2,%f,average,%f\n",timer2,inlet.value1,inlet.value2,ave_sensor); + //fclose(fp2); + timer2++; + + if(timer3>INTERVAL_HIGH) { + inlet.Stop(); + myled=0; + myled2=0; + myled3=0; + myled4=1; + + timer3=0; + timer4=0; + + while(1) { + mygps.getGPGGA(); + if(mygps.GPSread) { + myled3=1; + val=val2+timer_rec.read(); + myTimer.sendMessage(val); + MuPort.send(myTimer.timeMessage); + MuPort.send(mygps.getGPS); + //fp= fopen(fname, "a"); + fprintf(fp, "%s %s\n",myTimer.timeMessage,mygps.getGPS); + //fclose(fp); + timer++; + timer4++; + } + + inlet.getvalue1(); + inlet.getvalue2(); + ave_sensor=(inlet.value1+inlet.value2)/2; + //fp2= fopen(fname2, "a"); + fprintf(fp2, "%d,sensor1,%f,sensor2,%f,average,%f\n",timer2,inlet.value1,inlet.value2,ave_sensor); + //fclose(fp2); + timer2++; + + if(timer4>INTERVAL_LOW) { + break; + } + + } + + } + + if(val>1800) { + timer_rec.stop(); + timer_rec.reset(); + timer_rec.start(); + val2+=val; + val=0; fclose(fp); + fclose(fp2); + fp= fopen(fname, "a"); + fp2= fopen(fname2, "a"); + } + + + if(timer>INTERVALTIME) { + inlet.Stop(); + val=timer_rec.read(); + myTimer.sendMessage(val); + fprintf(fp, "%s IntervalModeFinish!\r\n",myTimer.timeMessage); + MuPort.send(myTimer.timeMessage); + MuPort.send("Interval Mode finish!\r\n"); + fclose(fp); + fclose(fp2); break; } - //inlet.Close(1.1);//1より大きい引数にしておけばモーターはずっと回ってる. - //} - //fclose(fp); + inlet.Close(1.1);//1より大きい引数にしておけばモーターはずっと回ってる. + } @@ -226,34 +366,29 @@ myled3=0; myled4=1; - //if(gps.readable()) { - recvGPS=gps.getc(); - getGPS[i]=recvGPS; - - if(getGPS[i]=='\n') { + mygps.getGPGGA(); + if(mygps.GPSread) { + myled3=1; + val=val2+timer_rec.read(); + myTimer.sendMessage(val); + MuPort.send(myTimer.timeMessage); + MuPort.send(mygps.getGPS); + fp= fopen(fname, "a"); + fprintf(fp, "%s %s\n",myTimer.timeMessage,mygps.getGPS); + fclose(fp); + //wait(1.0); + } + + if(val>1800) { + timer_rec.stop(); + timer_rec.reset(); + timer_rec.start(); + val2+=val; + val=0; + } - if((getGPS[5]=='G')&&(getGPS[6]=='A')) { - val=timer_rec.read(); - myTimer.sendMessage(val); - MuPort.send(myTimer.timeMessage); - MuPort.send(getGPS); - myled3=1; - fp= fopen(fname, "a"); - fprintf(fp, "%s %s\n",myTimer.timeMessage,getGPS); - fclose(fp); - timer++; - } - - i=0; - } - i++; - //} - - //fclose(fp); } - } -