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);
    }


}