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
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 }
Generated on Wed Jul 20 2022 14:02:53 by 1.7.2