change2shinsu
Dependencies: mbed mbedTimer SDFileSystem MU2 GPS
main.cpp
- Committer:
- Nerosho
- Date:
- 2019-08-25
- Revision:
- 15:bc013c313ef5
- Parent:
- 14:a07d2a958617
- Child:
- 16:917a2c03bd7c
File content as of revision 15:bc013c313ef5:
#include "mbed.h" #include "MU2.h" #include "SDFileSystem.h" #include "inletclose.h" #include "mbedTimer.h" //#include "GPS.h" #define FIRETIME 5 //溶断時間を設定 #define FALLTIME 10 //シェンロン展開してインレットを閉鎖するまでの時間を設定 #define CLOSETIME 10 //インレット閉鎖機構の稼働時間を設定 char fname[]="/sd/CanSat/log0826_test10.csv";//ファイル名をここで設定 ////////////////フライトピンが抜ける→シェンロン展開→インレット閉鎖→待機 //シーケンス番号//1//////////////////2///////////3///////////4/// //mbedのLEDが各シーケンス番号を2進数で示す:ex 0011 インレット閉鎖中 //ただし今回はシーケンス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 Inlet inlet(p26,p15,p16);//モーター出力,感圧センサー1入力,感圧センサー2入力 DigitalOut FIRE(p25); //溶断 DigitalOut myled(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); DigitalOut myled4(LED4); mbedTimer myTimer; Timer timer_rec;//時間計測 int val; char sendMessage[128]; /******************************************************************************* メイン関数 *******************************************************************************/ int main() { timer_rec.start(); wait(0.1);//起動してからちょっと待つ inlet.Stop(); FILE* fp= fopen(fname, "a"); if(fp == NULL) { myled=1; myled2=1; myled3=1; myled4=1; fp = fopen(fname, "a"); if(fp != NULL) { myled=0; myled2=0; myled3=0; myled4=0; } } val=timer_rec.read(); myTimer.sendMessage(val); fprintf(fp, "%s CanSatStart!\r\n",myTimer.timeMessage); MuPort.send(myTimer.timeMessage); MuPort.send("CanSat Start!\r\n"); //溶断機構部分 fprintf(fp, "FireStart!\r\n"); MuPort.send("Fire Start!\r\n"); FIRE=1; myled=1; wait(FIRETIME);//溶断にかかる時間TBD秒 FIRE=0; myled=0; wait(3); FIRE=1; myled=1; wait(3);//溶断にかかる時間TBD秒 FIRE=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; /******************************************************************************* シェンロン展開 *******************************************************************************/ val=timer_rec.read(); myTimer.sendMessage(val); fprintf(fp, "%s GPSstart!\r\n",myTimer.timeMessage); MuPort.send(myTimer.timeMessage); MuPort.send("GPS start!\r\n"); 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; 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"); val=timer_rec.read(); myTimer.sendMessage(val); fprintf(fp, "%s InletStart!\r\n",myTimer.timeMessage); MuPort.send(myTimer.timeMessage); MuPort.send("Inlet start!\r\n"); timer=0;//モーター時間で止める用 while(1) { myled=0; myled2=0; myled3=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); myled2=1; fprintf(fp, "%s %s\n",myTimer.timeMessage,getGPS); //wait(1.0); timer++; } i=0; } i++; if(timer>CLOSETIME) { inlet.Stop();// 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"); fclose(fp); break; } //inlet.Close(1.1);//1より大きい引数にしておけばモーターはずっと回ってる. //} //fclose(fp); } /******************************************************************************* 待機モード(何もせずGPS信号を発する) *******************************************************************************/ fp= fopen(fname, "a"); val=timer_rec.read(); myTimer.sendMessage(val); fprintf(fp, "%s StandbyModeStart!\r\n",myTimer.timeMessage); MuPort.send(myTimer.timeMessage); MuPort.send("Standby mode start!\r\n"); fclose(fp); while(1) { myled=0; myled2=0; myled3=0; myled4=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); myled3=1; fp= fopen(fname, "a"); fprintf(fp, "%s %s\n",myTimer.timeMessage,getGPS); fclose(fp); timer++; } i=0; } i++; //} //fclose(fp); } }