PQ-013 Felix-Luminousの押し出し機構用電装のプログラム おまけで気圧センサのログが取れる
Dependencies: SDFileSystem mbed pqLPS22HB_lib
Revision 0:56dd063c82e9, committed 2018-11-14
- Comitter:
- Sigma884
- Date:
- Wed Nov 14 09:42:04 2018 +0000
- Commit message:
- PQ-013 Felix-Luminous????????????????; ????????????????
Changed in this revision
diff -r 000000000000 -r 56dd063c82e9 SDFileSystem.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Wed Nov 14 09:42:04 2018 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/teams/PQ_Hybrid_Electrical_Equipment_Team/code/SDFileSystem/#909690808559
diff -r 000000000000 -r 56dd063c82e9 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Nov 14 09:42:04 2018 +0000 @@ -0,0 +1,252 @@ +#include "mbed.h" +#include "pqLPS22HB_lib.h" +#include "SDFileSystem.h" +#include "math.h" + +const float DETECT_ALT = 100.0f; +const float PUSH_TIME = 5.0f; + +/******************************************************************************* +コンストラクタ +*******************************************************************************/ +Serial pc(USBTX, USBRX, 115200); +I2C i2c_bus(D4, D5); +SDFileSystem sd(D11, D12, D13, D10, "sd"); +const char file_name[64] = "/sd/Hybrid_IZU201811_STMBBM_v4.csv"; + +pqLPS22HB_lib LPS33HW(pqLPS22HB_lib::AD0_LOW, i2c_bus); + +//InterruptIn pushFlight(A0); +DigitalIn pushFlight(A0); +DigitalOut led1(D3); +DigitalOut push(A1); + +Timeout timeout_stop; +Ticker tick_push; +Timer time_main; + +/******************************************************************************* +関数のプロトタイプ宣言 +*******************************************************************************/ +void setup(); + +void readSensor(); +void detectSeparate(); + +void printData(); +void readPC(); + +void flightOn(); +void pushChange(); +void stopAll(); + +void startRec(); +void stopRec(); +void recData(); + +/******************************************************************************* +変数の宣言 +*******************************************************************************/ +FILE *fp; +bool save = false; +int write_c = 0; + +float pres33, temp33, alt33, pres33_0, temp33_0; +bool pt33_0_set = false; + +bool detect = false; +bool pushing = false; +bool flight = false; + +int time_read, time_reset = 0; +int time_min, time_sec, time_ms; + +/******************************************************************************* +メイン関数 +*******************************************************************************/ +int main() { + setup(); + + pc.attach(&readPC, Serial::RxIrq); + + pushFlight.mode(PullUp); + //pushFlight.rise(&flightOn); + + time_main.reset(); + time_main.start(); + startRec(); + + while(1) { + readSensor(); + printData(); + recData(); + detectSeparate(); + } +} + +/******************************************************************************* +セットアップ(最初に1回実行) +*******************************************************************************/ +void setup(){ + wait(1.0f); + char setup_string[512]; + + pc.printf("\r\n**************************************************\r\n"); + pc.printf("Setting Start!!\r\n"); + strcat(setup_string, "\r\n\nSetting Start!!\r\n"); + + ///////////////////////////////////////////LPS33HW + LPS33HW.begin(50); + if(LPS33HW.whoAmI() == 0){ + pc.printf("LPS33HW : OK!!\r\n"); + strcat(setup_string, "LPS33HW : OK!!\r\n"); + } + else{ + pc.printf("LPS33HW : NG...\r\n"); + strcat(setup_string, "LPS33HW : NG...\r\n"); + } + + led1 = 0; + push = 0; + + pc.printf("Setting Finished!!\r\n"); + strcat(setup_string, "Setting Finished!!\r\n"); + + fp = fopen(file_name, "a"); + fprintf(fp, setup_string); + fclose(fp); + setup_string[0] = NULL; + + wait(1.0f); +} + +/******************************************************************************* +センサー読み取り +*******************************************************************************/ +void readSensor(){ + pres33 = LPS33HW.getPres(); + temp33 = LPS33HW.getTemp(); + alt33 = LPS33HW.getAlt(pres33_0, temp33_0); + if(!pt33_0_set && pres33 > 900){ + pres33_0 = pres33; + temp33_0 = temp33; + pt33_0_set = true; + } + + time_read = time_main.read_ms(); + if(time_read >= 30*60*1000){ + time_main.reset(); + time_reset ++; + } + time_min = time_reset * 30 + floor((double)time_read / (60 * 1000)); + time_sec = time_read % (60 * 1000); + time_sec = floor((double)time_sec / 1000); + time_ms = time_read % 1000; + + flight = pushFlight; +} + +/******************************************************************************* +押し出し作動条件 + alt33 > DETECT_ALT + pushFlight == HIGH +*******************************************************************************/ +void detectSeparate(){ + if(!detect && alt33 > DETECT_ALT && flight){ + flightOn(); + } +} + +/******************************************************************************* +データの表示 +*******************************************************************************/ +void printData(){ + pc.printf("Time : %d:%02d.%03d ", time_min, time_sec, time_ms); + pc.printf("LPS33HW : %.4f[hPa], %.2f[degC], %.2f[m] ", pres33, temp33, alt33); + pc.printf("Save : %d, Flight : %d, Detect : %d, Push : %d\r\n", save, flight, detect, pushing); +} + +/******************************************************************************* +PCからの読み取り +*******************************************************************************/ +void readPC(){ + char c = pc.getc(); + pc.printf("Input : %c\r\n", c); + wait(0.25f); + + switch(c){ + case 'r': + pres33_0 = pres33; + temp33_0 = temp33; + break; + } +} + +/******************************************************************************* +フライトピン +*******************************************************************************/ +void flightOn(){ + if(!detect){ + pc.printf("Flight ON!!!!\r\n"); + tick_push.attach(&pushChange, 0.5f); + timeout_stop.attach(&stopAll, PUSH_TIME); + led1 = 1; + detect = true; + } +} + +void pushChange(){ + if(push == 0){ + push = 1; + pushing = true; + } + else{ + push = 0; + pushing = false; + } +} + +void stopAll(){ + tick_push.detach(); + push = 0; + pushing = false; + + stopRec(); + time_main.stop(); +} + +/******************************************************************************* +記録開始 +*******************************************************************************/ +void startRec(){ + fp = fopen(file_name, "a"); + fprintf(fp, "time,pres[hPa],temp[degC],alt[m],detect,push,flight\r\n"); + save = true; +} + +/******************************************************************************* +記録終了 +*******************************************************************************/ +void stopRec(){ + save = false; + fprintf(fp, "\r\n\n"); + fclose(fp); +} + +/******************************************************************************* +データを記録 +*******************************************************************************/ +void recData(){ + if(save){ + fprintf(fp, "%d:%02d.%03d,", time_min, time_sec, time_ms); + fprintf(fp, "%.4f,%.2f,%.2f,", pres33, temp33, alt33); + fprintf(fp, "%d,%d,%d\r\n", detect, pushing, flight); + + write_c ++; + if(write_c > 1000){ + fclose(fp); + fp = fopen(file_name, "a"); + write_c = 0; + } + } +}
diff -r 000000000000 -r 56dd063c82e9 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Nov 14 09:42:04 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/ad3be0349dc5 \ No newline at end of file
diff -r 000000000000 -r 56dd063c82e9 pqLPS22HB_lib.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pqLPS22HB_lib.lib Wed Nov 14 09:42:04 2018 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/teams/PQ_Hybrid_Electrical_Equipment_Team/code/pqLPS22HB_lib/#96d154c590f4