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

Committer:
ohtsuka
Date:
Fri Sep 19 12:45:51 2014 +0000
Revision:
13:9bd35e2394f4
Parent:
12:6b5035346d43
LPS331_I2C????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyamfg 0:1a3c5ad01539 1 #include "mbed.h"
ohtsuka 7:8407141d1f70 2 #include <math.h>
nyamfg 0:1a3c5ad01539 3 #include "LPS331_I2C.h"
nyamfg 0:1a3c5ad01539 4
ohtsuka 7:8407141d1f70 5 //気圧計算用
ohtsuka 7:8407141d1f70 6 #define P0 1013.25f //海面気圧(hPa)
ohtsuka 7:8407141d1f70 7 #define TEMP 20 //気温(度)
ohtsuka 7:8407141d1f70 8
ohtsuka 4:4c01d79dd741 9 DigitalOut myled(LED1);
ohtsuka 12:6b5035346d43 10 DigitalOut JPlow(p5); // p6ピンでLowを検出させるために使用
ohtsuka 12:6b5035346d43 11 DigitalIn JP(p6); // p5とp6のピンを接続するとログ出力停止
ohtsuka 3:cb51cc4a041d 12 LocalFileSystem local("local");
ohtsuka 4:4c01d79dd741 13
ohtsuka 8:505d06bba7b1 14 Serial telem(p13,p14);
ohtsuka 8:505d06bba7b1 15
ohtsuka 3:cb51cc4a041d 16 Timer t;
nyamfg 0:1a3c5ad01539 17
ohtsuka 10:40521f3084ba 18 //地面との相対高度算出用
ohtsuka 10:40521f3084ba 19 #define GROUND_AVE_NUM 10
ohtsuka 11:3342540c22d8 20 float ground_alti=0;
ohtsuka 9:3285ed711197 21
ohtsuka 4:4c01d79dd741 22 LPS331_I2C lps331(p9, p10, LPS331_I2C_SA0_HIGH); // 気圧センサ
ohtsuka 4:4c01d79dd741 23
nyamfg 0:1a3c5ad01539 24 int main() {
ohtsuka 10:40521f3084ba 25 int i;
ohtsuka 9:3285ed711197 26 float temp, pres;
ohtsuka 6:496f4e967298 27 JPlow = 0;
ohtsuka 4:4c01d79dd741 28 JP.mode(PullUp);
ohtsuka 4:4c01d79dd741 29
ohtsuka 12:6b5035346d43 30 // 気圧センサーの初期化------------------------------------------
nyamfg 0:1a3c5ad01539 31 lps331.setResolution(LPS331_I2C_PRESSURE_AVG_512, LPS331_I2C_TEMP_AVG_128);
ohtsuka 4:4c01d79dd741 32 lps331.setDataRate(LPS331_I2C_DATARATE_7HZ); // 7Hz(1秒間に7回更新)
ohtsuka 4:4c01d79dd741 33 lps331.setActive(true); // 動作開始
ohtsuka 3:cb51cc4a041d 34
ohtsuka 12:6b5035346d43 35 // ファイルにデータの区切り用メッセージを出力 -----------------------
ohtsuka 4:4c01d79dd741 36 FILE *fp = fopen("/local/data.txt", "a"); // 「追記」でファイルを開く
ohtsuka 4:4c01d79dd741 37 fprintf(fp,"BBsat start. **********\r\n"); // fprintf()は、ファイルに文字を出力
ohtsuka 3:cb51cc4a041d 38 fclose(fp);
nyamfg 0:1a3c5ad01539 39
ohtsuka 12:6b5035346d43 40 // テレメトリにデータの区切り用メッセージを出力 ---------------------
ohtsuka 8:505d06bba7b1 41 telem.printf("BBsat start. **********\r\n"); // テレメトリ用出力
ohtsuka 8:505d06bba7b1 42
ohtsuka 12:6b5035346d43 43 t.start(); // 起動からの時間を測るために時計をスタート
ohtsuka 9:3285ed711197 44
ohtsuka 12:6b5035346d43 45 // 地面の高度を求める --------------------------------------------
ohtsuka 10:40521f3084ba 46 for(i=0;i<GROUND_AVE_NUM;i++) {
ohtsuka 10:40521f3084ba 47 pres = lps331.getPressure(); // 気圧
ohtsuka 11:3342540c22d8 48 ground_alti += lps331.getAltitude(P0, TEMP, pres);
ohtsuka 10:40521f3084ba 49 wait(1/7);
ohtsuka 10:40521f3084ba 50 }
ohtsuka 11:3342540c22d8 51 ground_alti = ground_alti / GROUND_AVE_NUM;
nyamfg 2:70ce034cfcfc 52
ohtsuka 12:6b5035346d43 53 // 高度を繰り返し計測する -----------------------------------------
ohtsuka 4:4c01d79dd741 54 while(1) {
ohtsuka 4:4c01d79dd741 55 int ms=0; // リセットからの経過時間(単位:ミリ秒(MilliSecond)
ohtsuka 12:6b5035346d43 56 float altitude; // 高度
ohtsuka 9:3285ed711197 57 pres=lps331.getPressure(); // 気圧
ohtsuka 9:3285ed711197 58 temp=lps331.getTemperature(); // 気温
ohtsuka 3:cb51cc4a041d 59
ohtsuka 12:6b5035346d43 60 // 気圧から高度を求める ---------------------------------------
ohtsuka 11:3342540c22d8 61 altitude = lps331.getAltitude(P0, TEMP, pres);
ohtsuka 7:8407141d1f70 62
ohtsuka 12:6b5035346d43 63 // 気圧の記録を停止するかをチェック -----------------------------
ohtsuka 4:4c01d79dd741 64 if(JP==0) { // JPが0(GND)だったら、
ohtsuka 4:4c01d79dd741 65 break; //whileのループを終了
ohtsuka 3:cb51cc4a041d 66 }
ohtsuka 3:cb51cc4a041d 67
ohtsuka 4:4c01d79dd741 68 ms = t.read_ms(); //現在時刻を取得
ohtsuka 3:cb51cc4a041d 69
ohtsuka 12:6b5035346d43 70 // ファイルに記録 ---------------------------------------------
ohtsuka 4:4c01d79dd741 71 FILE *fp = fopen("/local/data.txt", "a");
ohtsuka 11:3342540c22d8 72 fprintf(fp, "%10d,%6.2f,%4.1f %5.1f \r\n", ms, pres, temp, altitude); // 時刻,気圧,気温,高度を出力
ohtsuka 12:6b5035346d43 73 printf( "%10d,%6.2f,%4.1f,Ground:%5.1f altitude:%5.1f Diff%5.1f \r\n",
ohtsuka 12:6b5035346d43 74 ms, pres, temp, ground_alti, altitude, altitude-ground_alti);
ohtsuka 3:cb51cc4a041d 75 fclose(fp);
ohtsuka 4:4c01d79dd741 76
ohtsuka 12:6b5035346d43 77 // 高度のみテレメトリ出力 ---------------------------------------
ohtsuka 11:3342540c22d8 78 telem.printf("%5.1f\n", altitude-ground_alti); // 高度を出力
ohtsuka 12:6b5035346d43 79
ohtsuka 12:6b5035346d43 80 // 動作確認用 LED点滅 -----------------------------------------
ohtsuka 12:6b5035346d43 81 wait(0.05); //
ohtsuka 4:4c01d79dd741 82 myled = 1;
ohtsuka 3:cb51cc4a041d 83 wait(0.05);
ohtsuka 4:4c01d79dd741 84 myled = 0;
nyamfg 0:1a3c5ad01539 85 }
nyamfg 0:1a3c5ad01539 86 }