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/

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include <math.h>
00003 #include "LPS331_I2C.h"
00004 
00005 //気圧計算用
00006 #define P0 1013.25f //海面気圧(hPa)
00007 #define TEMP 20     //気温(度)
00008 
00009 DigitalOut myled(LED1);
00010 DigitalOut JPlow(p5); // p6ピンでLowを検出させるために使用
00011 DigitalIn JP(p6);     // p5とp6のピンを接続するとログ出力停止
00012 LocalFileSystem local("local"); 
00013 
00014 Serial telem(p13,p14);
00015 
00016 Timer t;
00017 
00018 //地面との相対高度算出用
00019 #define GROUND_AVE_NUM 10
00020 float ground_alti=0;
00021 
00022 LPS331_I2C lps331(p9, p10, LPS331_I2C_SA0_HIGH); // 気圧センサ
00023 
00024 int main() {
00025     int i;
00026     float temp, pres;
00027     JPlow = 0;
00028     JP.mode(PullUp);
00029 
00030     // 気圧センサーの初期化------------------------------------------
00031     lps331.setResolution(LPS331_I2C_PRESSURE_AVG_512, LPS331_I2C_TEMP_AVG_128);
00032     lps331.setDataRate(LPS331_I2C_DATARATE_7HZ); // 7Hz(1秒間に7回更新)
00033     lps331.setActive(true); // 動作開始
00034               
00035     // ファイルにデータの区切り用メッセージを出力 -----------------------
00036     FILE *fp = fopen("/local/data.txt", "a");   // 「追記」でファイルを開く
00037     fprintf(fp,"BBsat start. **********\r\n");  // fprintf()は、ファイルに文字を出力
00038     fclose(fp);
00039 
00040     // テレメトリにデータの区切り用メッセージを出力 ---------------------
00041     telem.printf("BBsat start. **********\r\n");  // テレメトリ用出力
00042 
00043     t.start(); // 起動からの時間を測るために時計をスタート
00044 
00045     // 地面の高度を求める --------------------------------------------
00046     for(i=0;i<GROUND_AVE_NUM;i++) {
00047         pres = lps331.getPressure();    // 気圧
00048         ground_alti += lps331.getAltitude(P0, TEMP, pres);
00049         wait(1/7);
00050     }
00051     ground_alti = ground_alti / GROUND_AVE_NUM;
00052     
00053     // 高度を繰り返し計測する -----------------------------------------
00054     while(1) {
00055         int ms=0;       // リセットからの経過時間(単位:ミリ秒(MilliSecond)
00056         float altitude;               // 高度
00057         pres=lps331.getPressure();    // 気圧
00058         temp=lps331.getTemperature(); // 気温
00059 
00060         // 気圧から高度を求める ---------------------------------------
00061         altitude = lps331.getAltitude(P0, TEMP, pres);
00062         
00063         // 気圧の記録を停止するかをチェック -----------------------------
00064         if(JP==0) {     // JPが0(GND)だったら、
00065             break;      //whileのループを終了
00066         }
00067 
00068         ms = t.read_ms(); //現在時刻を取得
00069 
00070         // ファイルに記録 ---------------------------------------------
00071         FILE *fp = fopen("/local/data.txt", "a");
00072         fprintf(fp,  "%10d,%6.2f,%4.1f %5.1f \r\n", ms, pres, temp, altitude);   // 時刻,気圧,気温,高度を出力
00073         printf(      "%10d,%6.2f,%4.1f,Ground:%5.1f altitude:%5.1f Diff%5.1f \r\n",
00074             ms, pres, temp, ground_alti, altitude, altitude-ground_alti);
00075         fclose(fp);
00076 
00077         // 高度のみテレメトリ出力 ---------------------------------------
00078         telem.printf("%5.1f\n", altitude-ground_alti);   // 高度を出力
00079  
00080         // 動作確認用 LED点滅 -----------------------------------------
00081         wait(0.05);     // 
00082         myled = 1;
00083         wait(0.05);
00084         myled = 0;
00085     }
00086 }