all ok noMU2

Dependencies:   mbed mbedTimer SDFileSystem MU2 GPS

main.cpp

Committer:
Nerosho
Date:
2019-08-20
Revision:
14:a07d2a958617
Parent:
11:a273a8decf90
Child:
15:bc013c313ef5

File content as of revision 14:a07d2a958617:

#include "mbed.h"
#include "MU2.h"
#include "SDFileSystem.h"
#include "inletclose.h"
//#include "GPS.h"

#define FIRETIME 5 //溶断時間を設定
#define FALLTIME 90 //シェンロン展開してインレットを閉鎖するまでの時間を設定
#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(p24);    //溶断

DigitalOut myled(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
DigitalOut myled4(LED4);


/*******************************************************************************
メイン関数
*******************************************************************************/

int main()
{
    wait(10);//起動してからちょっと待つ
    inlet.Stop();
    //FILE* fp1= fopen("/sd/cansat/log3.txt", "w");
    FILE* fp= fopen("/sd/cansat/log0820_1.csv", "w");
        if(fp == NULL) {
        
        myled=1;
        myled2=1;
        myled3=1;
        myled4=1;

        fp = fopen("/sd/cansat/log0820_1.csv", "w");
        wait(0.5);
         myled=0;
        myled2=0;
        myled3=0;
        myled4=0;
        
    }
    

    fprintf(fp, "CanSatStart!\r\n");
    MuPort.send("CanSat Start!\r\n");

    /*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(fp, "FireStart!\r\n");
    MuPort.send("Fire Start!\r\n");
    myled=1;//テストようにLED光らせてる

    FIRE=1;
    wait(FIRETIME);//溶断にかかる時間TBD秒
    FIRE=0;
    wait(10);
    FIRE=1;
    wait(3);//溶断にかかる時間TBD秒
    FIRE=0;

    fprintf(fp, "FireFinish!\r\n");
    MuPort.send("Fire Finish!\r\n");

//溶断機構終わり

    gps.baud(9600);
    char recvGPS=0;
    char getGPS[128];
    int i=0;
    int timer=0;

    /*******************************************************************************
        シェンロン展開
    *******************************************************************************/

    fprintf(fp, "GPSstart!\r\n");
    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')) {

                    MuPort.send(getGPS);
                    myled=1;
                    /*if(fp == NULL) {
                        error("Could not open file for write\n");
                    }*/

                    fprintf(fp, "%s\n",getGPS);
                    //fclose(fp);

                    wait(1.0);
                    timer++;
                }

                i=0;
            }
            i++;
            if(timer>FALLTIME) { //落下開始してからTBD秒後whileを抜ける.
                break;
            }
        }

        // wait(1);
        //fclose(fp);
    }


    /*******************************************************************************
    インレット閉鎖
    *******************************************************************************/

    fprintf(fp, "InletStart!\r\n");
    MuPort.send("Inlet start!\r\n");

    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(fp, "%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信号を発する)
    *******************************************************************************/

    fprintf(fp, "StandbyModeStart!\r\n");
    MuPort.send("Standby mode start!\r\n");


    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(fp, "%s\n",getGPS);
                    //fclose(fp);
                    wait(0.1);
                    timer++;
                }

                i=0;
            }
            i++;
        }

        // wait(1);
        //fclose(fp);
    }


    //fclose(fp1);
    fclose(fp);

}