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@12:6b5035346d43, 2014-09-19 (annotated)
- Committer:
- ohtsuka
- Date:
- Fri Sep 19 11:28:40 2014 +0000
- Revision:
- 12:6b5035346d43
- Parent:
- 11:3342540c22d8
??????????????
Who changed what in which revision?
User | Revision | Line number | New 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 | } |