Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbedTimer SDFileSystem MU2 GPS
main.cpp
- Committer:
- takepiyo
- Date:
- 2019-08-18
- Revision:
- 13:33939d451801
- Parent:
- 11:a273a8decf90
File content as of revision 13:33939d451801:
#include "mbed.h"
#include "MU2.h"
#include "SDFileSystem.h"
#include "inletclose.h"
//#include "GPS.h"
#define FIRETIME 5 //溶断時間を設定
#define FALLTIME 10 //シェンロン展開してインレットを閉鎖するまでの時間を設定
#define CLOSETIME 10 //インレット閉鎖機構の稼働時間を設定
////////////////フライトピンが抜ける→シェンロン展開→インレット閉鎖→待機
//シーケンス番号//1//////////////////2///////////3///////////4///
//mbedのLEDが各シーケンス番号を2進数で示す:ex 0011 インレット閉鎖中
MU2 MuPort(p28,p27);
SDFileSystem sd(p11, p12, p13, p14, "sd");
//GPS gps(p13,p14);
Serial gps(p9,p10); //tx, rx
Inlet inlet(p26,p17,p15);//モーター出力,感圧センサー1入力,感圧センサー2入力
DigitalOut FIRE(p16); //溶断
DigitalOut myled(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
DigitalOut myled4(LED4);
int main()
{
wait(0.1);//起動してからちょっと待つ
inlet.Stop();
//FILE* fp1= fopen("/sd/cansat/log3.txt", "w");
FILE* fp2= fopen("/sd/cansat/gpsdata0808_3.csv", "w");
/*if(fp1 == NULL || fp2 == NULL)
{
(fp1 == NULL) ? fprintf(stderr, "fname1 open error.\n") : fclose(fp1);
(fp2 == NULL) ? fprintf(stderr, "fname2 open error.\n") : fclose(fp2);
return -1;
}*/
//溶断機構部分
//fprintf(fp1, "CanSat start!\r\n");
//fprintf(fp1, "Fire!!\r\n");
myled=1;//テストようにLED光らせてる
FIRE=1;
wait(FIRETIME);//溶断にかかる時間TBD秒
FIRE=0;
//溶断機構終わり
gps.baud(9600);
char recvGPS=0;
char getGPS[128];
int i=0;
int timer=0;
//fprintf(fp1, "GPS start!\r\n");
while(1)
{
myled=0;
myled2=1;
if(gps.readable())
{
myled4=1;
recvGPS=gps.getc();
getGPS[i]=recvGPS;
wait(1.0);
if(getGPS[i]=='\n')
{
myled4=0;
if((getGPS[5]=='G')&&(getGPS[6]=='A'))
{
MuPort.send(getGPS);
myled=1;
/*if(fp == NULL) {
error("Could not open file for write\n");
}*/
fprintf(fp2, "%s\n",getGPS);
//fclose(fp);
wait(1.0);
timer++;
}
i=0;
}
i++;
if(timer>FALLTIME)//落下開始してからTBD秒後whileを抜ける.
{
break;
}
}
}
timer=0;//モーター時間で止めるよう
while(1)
{
myled2=0;
myled3=1;
if(gps.readable())
{
recvGPS=gps.getc();
getGPS[i]=recvGPS;
if(getGPS[i]=='\n')
{
if((getGPS[5]=='G')&&(getGPS[6]=='A'))
{
MuPort.send(getGPS);
myled2=1;
/*if(fp == NULL) {
error("Could not open file for write\n");
}*/
fprintf(fp2, "%s\n",getGPS);
//fclose(fp);
wait(1.0);
timer++;
}
i=0;
}
i++;
if(timer>CLOSETIME)
{
inlet.Stop();//
break;
}
inlet.Close(1.1);//1より大きい引数にしておけばモーターはずっと回ってる.
}
// wait(1);
//fclose(fp);
}
//何もせずGPS信号を発する
while(1)
{
myled4=1;
myled3=0;
if(gps.readable())
{
recvGPS=gps.getc();
getGPS[i]=recvGPS;
if(getGPS[i]=='\n')
{
if((getGPS[5]=='G')&&(getGPS[6]=='A'))
{
MuPort.send(getGPS);
myled3=1;
/*if(fp == NULL) {
error("Could not open file for write\n");
}*/
fprintf(fp2, "%s\n",getGPS);
//fclose(fp);
wait(0.1);
timer++;
}
i=0;
}
i++;
}
// wait(1);
//fclose(fp);
}
//fclose(fp1);
fclose(fp2);
}