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:
Mon Sep 08 07:43:57 2014 +0000
Revision:
9:3285ed711197
Parent:
8:505d06bba7b1
Child:
10:40521f3084ba
???????????????????

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 6:496f4e967298 10 DigitalOut JPlow(p5); // p6ピンでLowを検出させるために使用。隣同士(p5,p6)のピンをショートさせるとログ出力停止
ohtsuka 3:cb51cc4a041d 11 DigitalIn JP(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 9:3285ed711197 18 float ground_height;
ohtsuka 9:3285ed711197 19
ohtsuka 4:4c01d79dd741 20 LPS331_I2C lps331(p9, p10, LPS331_I2C_SA0_HIGH); // 気圧センサ
ohtsuka 4:4c01d79dd741 21
nyamfg 0:1a3c5ad01539 22 int main() {
ohtsuka 9:3285ed711197 23 float temp, pres;
ohtsuka 6:496f4e967298 24 JPlow = 0;
ohtsuka 4:4c01d79dd741 25 JP.mode(PullUp);
ohtsuka 4:4c01d79dd741 26
nyamfg 0:1a3c5ad01539 27 lps331.setResolution(LPS331_I2C_PRESSURE_AVG_512, LPS331_I2C_TEMP_AVG_128);
ohtsuka 4:4c01d79dd741 28 lps331.setDataRate(LPS331_I2C_DATARATE_7HZ); // 7Hz(1秒間に7回更新)
ohtsuka 4:4c01d79dd741 29 lps331.setActive(true); // 動作開始
ohtsuka 3:cb51cc4a041d 30
ohtsuka 4:4c01d79dd741 31 FILE *fp = fopen("/local/data.txt", "a"); // 「追記」でファイルを開く
ohtsuka 4:4c01d79dd741 32 fprintf(fp,"BBsat start. **********\r\n"); // fprintf()は、ファイルに文字を出力
ohtsuka 3:cb51cc4a041d 33 fclose(fp);
nyamfg 0:1a3c5ad01539 34
ohtsuka 8:505d06bba7b1 35 telem.printf("BBsat start. **********\r\n"); // テレメトリ用出力
ohtsuka 8:505d06bba7b1 36
ohtsuka 3:cb51cc4a041d 37 t.start();
ohtsuka 9:3285ed711197 38
ohtsuka 9:3285ed711197 39 pres = lps331.getPressure(); // 気圧
ohtsuka 9:3285ed711197 40 temp = lps331.getTemperature(); //
ohtsuka 9:3285ed711197 41 ground_height = lps331.getAltitude(P0, TEMP, pres);
nyamfg 2:70ce034cfcfc 42
ohtsuka 4:4c01d79dd741 43 while(1) {
ohtsuka 4:4c01d79dd741 44 int ms=0; // リセットからの経過時間(単位:ミリ秒(MilliSecond)
ohtsuka 7:8407141d1f70 45 float height; // 高度
ohtsuka 9:3285ed711197 46 pres=lps331.getPressure(); // 気圧
ohtsuka 9:3285ed711197 47 temp=lps331.getTemperature(); // 気温
ohtsuka 3:cb51cc4a041d 48
ohtsuka 8:505d06bba7b1 49 // 高度算出
ohtsuka 9:3285ed711197 50 height = lps331.getAltitude(P0, TEMP, pres);
ohtsuka 7:8407141d1f70 51
ohtsuka 4:4c01d79dd741 52 if(JP==0) { // JPが0(GND)だったら、
ohtsuka 4:4c01d79dd741 53 break; //whileのループを終了
ohtsuka 3:cb51cc4a041d 54 }
ohtsuka 3:cb51cc4a041d 55
ohtsuka 4:4c01d79dd741 56 ms = t.read_ms(); //現在時刻を取得
ohtsuka 3:cb51cc4a041d 57
ohtsuka 4:4c01d79dd741 58 FILE *fp = fopen("/local/data.txt", "a");
ohtsuka 9:3285ed711197 59 fprintf(fp, "%10d,%6.2f,%4.1f,%5.1f\r\n", ms, pres, temp, height-ground_height); // 時刻,気圧,気温を出力
ohtsuka 3:cb51cc4a041d 60 fclose(fp);
ohtsuka 4:4c01d79dd741 61
ohtsuka 9:3285ed711197 62 telem.printf("%10d,%6.2f,%4.1f,%5.1f\r\n", ms, pres, temp, height-ground_height); // 時刻,気圧,気温を出力
ohtsuka 4:4c01d79dd741 63 wait(0.05); // LED点滅
ohtsuka 4:4c01d79dd741 64 myled = 1;
ohtsuka 3:cb51cc4a041d 65 wait(0.05);
ohtsuka 4:4c01d79dd741 66 myled = 0;
nyamfg 0:1a3c5ad01539 67 }
nyamfg 0:1a3c5ad01539 68 }