This program is for Cansat made with BreadBoard which have pressure sensor LPS331. This program is based on http://mbed.org/users/nyamfg/code/LPS331_HelloWorld/
main.cpp
- Committer:
- ohtsuka
- Date:
- 2014-09-10
- Revision:
- 10:40521f3084ba
- Parent:
- 9:3285ed711197
- Child:
- 11:3342540c22d8
File content as of revision 10:40521f3084ba:
#include "mbed.h" #include <math.h> #include "LPS331_I2C.h" //気圧計算用 #define P0 1013.25f //海面気圧(hPa) #define TEMP 20 //気温(度) DigitalOut myled(LED1); DigitalOut JPlow(p5); // p6ピンでLowを検出させるために使用。隣同士(p5,p6)のピンをショートさせるとログ出力停止 DigitalIn JP(p6); LocalFileSystem local("local"); Serial telem(p13,p14); Timer t; //地面との相対高度算出用 #define GROUND_AVE_NUM 10 float ground_height=0; LPS331_I2C lps331(p9, p10, LPS331_I2C_SA0_HIGH); // 気圧センサ int main() { int i; float temp, pres; JPlow = 0; JP.mode(PullUp); lps331.setResolution(LPS331_I2C_PRESSURE_AVG_512, LPS331_I2C_TEMP_AVG_128); lps331.setDataRate(LPS331_I2C_DATARATE_7HZ); // 7Hz(1秒間に7回更新) lps331.setActive(true); // 動作開始 FILE *fp = fopen("/local/data.txt", "a"); // 「追記」でファイルを開く fprintf(fp,"BBsat start. **********\r\n"); // fprintf()は、ファイルに文字を出力 fclose(fp); telem.printf("BBsat start. **********\r\n"); // テレメトリ用出力 t.start(); // 地面の高度を求める for(i=0;i<GROUND_AVE_NUM;i++) { pres = lps331.getPressure(); // 気圧 ground_height += lps331.getAltitude(P0, TEMP, pres); wait(1/7); } ground_height = ground_height / GROUND_AVE_NUM; while(1) { int ms=0; // リセットからの経過時間(単位:ミリ秒(MilliSecond) float height; // 高度 pres=lps331.getPressure(); // 気圧 temp=lps331.getTemperature(); // 気温 // 高度算出 height = lps331.getAltitude(P0, TEMP, pres); if(JP==0) { // JPが0(GND)だったら、 break; //whileのループを終了 } ms = t.read_ms(); //現在時刻を取得 FILE *fp = fopen("/local/data.txt", "a"); fprintf(fp, "%10d,%6.2f,%4.1f %5.1f \r\n", ms, pres, temp, height); // 時刻,気圧,気温,高度を出力 printf( "%10d,%6.2f,%4.1f,Ground:%5.1f Height:%5.1f Diff%5.1f \r\n", ms, pres, temp, ground_height, height, height-ground_height); fclose(fp); telem.printf("%5.1f\n", height-ground_height); // 高度を出力 wait(0.05); // LED点滅 myled = 1; wait(0.05); myled = 0; } }