change2shinsu

Dependencies:   mbed mbedTimer SDFileSystem MU2 GPS

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