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:
- 18:05d5de29511d
- Parent:
- 17:993f2fcc43df
- Child:
- 19:75067f4d49b6
diff -r 993f2fcc43df -r 05d5de29511d main.cpp
--- a/main.cpp Tue Sep 03 11:46:42 2019 +0000
+++ b/main.cpp Tue Sep 03 20:34:51 2019 +0000
@@ -5,17 +5,18 @@
#include "inletclose.h"
#include "mbedTimer.h"
-#define WAITTIME 5 //フライトピン抜けてからの待機時間
-#define FIRETIME 0 //溶断時間を設定
-#define FALLTIME 5 //シェンロン展開してインレットを閉鎖するまでの時間を設定
-#define CLOSETIME 60 //しきい値超えてからのインレット閉鎖機構の稼働時間を設定
-#define THRESHOLID 0.45 //感圧のしきい値
-#define INTERVALTIME 300 //インターバルモードの時間
-#define INTERVAL_HIGH 5 //インターバルモードでモーター回す時間
-#define INTERVAL_LOW 20 //インターバルモードでモーター止める時間
+#define WAITTIME 60 //フライトピン抜けてからの待機時間 60
+#define FIRETIME 5 //溶断時間を設定 5
+#define FALLTIME 420 //シェンロン展開してインレットを閉鎖するまでの時間を設定 420
+#define THRESHOLID 0.45 //感圧のしきい値 0.45
+#define SAMPLENUMBER 5 //しきい値判定に用いるサンプル数 5
+#define CLOSETIME 60 //しきい値超えてからのインレット閉鎖機構の稼働時間を設定 60
+#define INTERVALTIME 1800 //インターバルモードの時間 1800
+#define INTERVAL_HIGH 5 //インターバルモードでモーター回す時間 5
+#define INTERVAL_LOW 20 //インターバルモードでモーター止める時間 20
-char fname[]="/sd/CanSat/log0902test3.csv";//ファイル名をここで設定
-char fname2[]="/sd/CanSat/sensor0902test3.csv";//感圧センサーのログファイル
+char fname[]="/sd/CanSat/log0904EtoE2.csv";//ファイル名をここで設定
+char fname2[]="/sd/CanSat/sensor0904EtoE2.csv";//感圧センサーのログファイル
////////////////フライトピンが抜ける→シェンロン展開→インレット閉鎖→待機
//シーケンス番号//1//////////////////2///////////3///////////4///
@@ -40,6 +41,8 @@
int val;
int val2;
+int val3;
+int count;
char sendMessage[128];
char sensorMessage[128];
float ave_sensor;
@@ -56,7 +59,7 @@
{
timer_rec.start();
- wait(WAITTIME);//起動してからちょっと待つ
+ wait(5);//起動してからちょっと待つ
inlet.Stop();
FILE* fp= fopen(fname, "a");
if(fp == NULL) {
@@ -82,6 +85,52 @@
MuPort.send(myTimer.timeMessage);
MuPort.send("CanSat Start!\r\n");
+ /*******************************************************************************
+ 溶断まで待機
+ *******************************************************************************/
+ timer=0;
+ val2=0;
+ val3=0;
+
+ val=timer_rec.read();
+ val3=val+val2;
+ myTimer.sendMessage(val3);
+ fprintf(fp, "%s GPSstart!\r\n",myTimer.timeMessage);
+ MuPort.send(myTimer.timeMessage);
+ MuPort.send("GPS start!\r\n");
+
+ while(1) {
+ myled=0;
+ myled2=1;
+
+ mygps.getGPGGA();
+ if(mygps.GPSread) {
+ myled=1;
+ val=timer_rec.read();
+ val3=val+val2;
+ myTimer.sendMessage(val3);
+ MuPort.send(myTimer.timeMessage);
+ MuPort.send(mygps.getGPS);
+ fprintf(fp, "%s %s\n",myTimer.timeMessage,mygps.getGPS);
+ timer++;
+ }
+
+ if(timer>=WAITTIME) { //落下開始してからTBD秒後whileを抜ける.
+ fclose(fp);
+ break;
+ }
+
+ if(val>=1800) {
+ //timer_rec.stop();
+ timer_rec.reset();
+ //timer_rec.start();
+ val2+=val;
+ val=0;
+
+ }
+
+ }
+
//溶断機構部分
@@ -109,16 +158,10 @@
/*******************************************************************************
- シェンロン展開
+ シェンロン展開
*******************************************************************************/
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;
@@ -127,18 +170,28 @@
if(mygps.GPSread) {
myled=1;
val=timer_rec.read();
- myTimer.sendMessage(val);
+ val3=val+val2;
+ myTimer.sendMessage(val3);
MuPort.send(myTimer.timeMessage);
MuPort.send(mygps.getGPS);
fprintf(fp, "%s %s\n",myTimer.timeMessage,mygps.getGPS);
timer++;
}
- if(timer>FALLTIME) { //落下開始してからTBD秒後whileを抜ける.
+ if(timer>=FALLTIME) { //落下開始してからTBD秒後whileを抜ける.
fclose(fp);
break;
}
+ if(val>=1800) {
+ //timer_rec.stop();
+ timer_rec.reset();
+ //timer_rec.start();
+ val2+=val;
+ val=0;
+
+ }
+
}
@@ -149,13 +202,15 @@
fp= fopen(fname, "a");
FILE* fp2= fopen(fname2, "a");
val=timer_rec.read();
- myTimer.sendMessage(val);
+ val3=val+val2;
+ myTimer.sendMessage(val3);
fprintf(fp, "%s ClosingModeStart!\r\n",myTimer.timeMessage);
MuPort.send(myTimer.timeMessage);
MuPort.send("Closing Mode start!\r\n");
timer=0;//モーター時間で止める用
timer2=0;
+ count=0;
while(1) {
myled=0;
@@ -164,16 +219,22 @@
mygps.getGPGGA();
+ val=timer_rec.read();
+ val3=val+val2;
+ myTimer.sendMessage(val3);
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);
+ //fp2= fopen(fname2, "a");
+ fprintf(fp2, "%s,%d,sensor1,%f,sensor2,%f,average,%f\n",myTimer.timeMessage,timer2,inlet.value1,inlet.value2,ave_sensor);
+ //fclose(fp2);
timer2++;
if(mygps.GPSread) {
myled2=1;
val=timer_rec.read();
- myTimer.sendMessage(val);
+ val3=val+val2;
+ myTimer.sendMessage(val3);
MuPort.send(myTimer.timeMessage);
MuPort.send(mygps.getGPS);
snprintf(sensorMessage, 128, "%f", ave_sensor);
@@ -182,10 +243,14 @@
}
+ if(ave_sensor>THRESHOLID) {
+ count++;
+ }
- if(ave_sensor>THRESHOLID) {
+ if(count>=SAMPLENUMBER) {
val=timer_rec.read();
- myTimer.sendMessage(val);
+ val3=val+val2;
+ myTimer.sendMessage(val3);
fprintf(fp, "%s Get the rigidity!\r\n",myTimer.timeMessage);
MuPort.send(myTimer.timeMessage);
MuPort.send("Get the rigidity!\r\n");
@@ -195,16 +260,22 @@
while(1) {
mygps.getGPGGA();
+ val=timer_rec.read();
+ val3=val+val2;
+ myTimer.sendMessage(val3);
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);
+ //fp2= fopen(fname2, "a");
+ fprintf(fp2, "%s,%d,sensor1,%f,sensor2,%f,average,%f\n",myTimer.timeMessage,timer2,inlet.value1,inlet.value2,ave_sensor);
+ //fclose(fp2);
timer2++;
if(mygps.GPSread) {
myled2=1;
val=timer_rec.read();
- myTimer.sendMessage(val);
+ val3=val+val2;
+ myTimer.sendMessage(val3);
MuPort.send(myTimer.timeMessage);
MuPort.send(mygps.getGPS);
snprintf(sensorMessage, 128, "%f", ave_sensor);
@@ -214,7 +285,7 @@
}
- if(timer>CLOSETIME) {
+ if(timer>=CLOSETIME) {
break;
}
@@ -222,7 +293,8 @@
inlet.Stop();
val=timer_rec.read();
- myTimer.sendMessage(val);
+ val3=val+val2;
+ myTimer.sendMessage(val3);
fprintf(fp, "%s ClosingModeFinish!\r\n",myTimer.timeMessage);
MuPort.send(myTimer.timeMessage);
MuPort.send("Closing Mode Finish!\r\n");
@@ -232,6 +304,15 @@
}
+ if(val>=1800) {
+ //timer_rec.stop();
+ timer_rec.reset();
+ //timer_rec.start();
+ val2+=val;
+ val=0;
+
+ }
+
inlet.Close(1.1);//1より大きい引数にしておけばモーターはずっと回ってる.
}
@@ -240,19 +321,19 @@
インレットインターバル閉鎖
*******************************************************************************/
-
- //fp= fopen(fname, "a");
- //fp2= fopen(fname2, "a");
+ fp= fopen(fname, "a");
+ fp2= fopen(fname2, "a");
val=timer_rec.read();
- myTimer.sendMessage(val);
+ val3=val+val2;
+ myTimer.sendMessage(val3);
fprintf(fp, "%s IntervalModeStart!\r\n",myTimer.timeMessage);
MuPort.send(myTimer.timeMessage);
MuPort.send("Interval Mode start!\r\n");
- //fclose(fp);
+ fclose(fp);
timer=0;//モーター時間で止める用
timer3=0;
- val2=0;
+
while(1) {
@@ -263,21 +344,25 @@
mygps.getGPGGA();
+ val=timer_rec.read();
+ val3=val+val2;
+ myTimer.sendMessage(val3);
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);
+ fprintf(fp2, "%s,%d,sensor1,%f,sensor2,%f,average,%f\n",myTimer.timeMessage,timer2,inlet.value1,inlet.value2,ave_sensor);
//fclose(fp2);
timer2++;
if(mygps.GPSread) {
myled3=1;
val=timer_rec.read();
- myTimer.sendMessage(val);
+ val3=val+val2;
+ myTimer.sendMessage(val3);
MuPort.send(myTimer.timeMessage);
MuPort.send(mygps.getGPS);
- snprintf(sensorMessage, 128, "%f", ave_sensor);
+ snprintf(sensorMessage, 128, "%f\n", ave_sensor);
MuPort.send(sensorMessage);
fp= fopen(fname, "a");
fprintf(fp, "%s %s\n",myTimer.timeMessage,mygps.getGPS);
@@ -290,7 +375,7 @@
- if(timer3>INTERVAL_HIGH) {
+ if(timer3>=INTERVAL_HIGH) {
inlet.Stop();
myled=0;
myled2=0;
@@ -303,21 +388,25 @@
while(1) {
mygps.getGPGGA();
+ val=timer_rec.read();
+ val3=val+val2;
+ myTimer.sendMessage(val3);
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);
+ fprintf(fp2, "%s,%d,sensor1,%f,sensor2,%f,average,%f\n",myTimer.timeMessage,timer2,inlet.value1,inlet.value2,ave_sensor);
//fclose(fp2);
timer2++;
if(mygps.GPSread) {
myled3=1;
- val=val2+timer_rec.read();
- myTimer.sendMessage(val);
+ val=timer_rec.read();
+ val3=val+val2;
+ myTimer.sendMessage(val3);
MuPort.send(myTimer.timeMessage);
MuPort.send(mygps.getGPS);
- snprintf(sensorMessage, 128, "%f", ave_sensor);
+ snprintf(sensorMessage, 128, "%f\n", ave_sensor);
MuPort.send(sensorMessage);
fp= fopen(fname, "a");
fprintf(fp, "%s %s\n",myTimer.timeMessage,mygps.getGPS);
@@ -329,7 +418,7 @@
}
- if(timer4>INTERVAL_LOW) {
+ if(timer4>=INTERVAL_LOW) {
break;
}
@@ -337,23 +426,21 @@
}
- if(val>1800) {
+ 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) {
+ if(timer>=INTERVALTIME) {
inlet.Stop();
val=timer_rec.read();
- myTimer.sendMessage(val);
+ val3=val+val2;
+ myTimer.sendMessage(val3);
fprintf(fp, "%s IntervalModeFinish!\r\n",myTimer.timeMessage);
MuPort.send(myTimer.timeMessage);
MuPort.send("Interval Mode finish!\r\n");
@@ -373,7 +460,8 @@
fp= fopen(fname, "a");
val=timer_rec.read();
- myTimer.sendMessage(val);
+ val3=val+val2;
+ myTimer.sendMessage(val3);
fprintf(fp, "%s StandbyModeStart!\r\n",myTimer.timeMessage);
MuPort.send(myTimer.timeMessage);
MuPort.send("Standby mode start!\r\n");
@@ -389,8 +477,9 @@
mygps.getGPGGA();
if(mygps.GPSread) {
myled3=1;
- val=val2+timer_rec.read();
- myTimer.sendMessage(val);
+ val=timer_rec.read();
+ val3=val+val2;
+ myTimer.sendMessage(val3);
MuPort.send(myTimer.timeMessage);
MuPort.send(mygps.getGPS);
fp= fopen(fname, "a");
@@ -399,7 +488,7 @@
//wait(1.0);
}
- if(val>1800) {
+ if(val>=1800) {
//timer_rec.stop();
timer_rec.reset();
//timer_rec.start();