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
Diff: main.cpp
- Revision:
- 16:917a2c03bd7c
- Parent:
- 15:bc013c313ef5
- Child:
- 17:993f2fcc43df
diff -r bc013c313ef5 -r 917a2c03bd7c main.cpp
--- 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);
}
-
}
-