LEDの点滅や、ブザーのOn,Offの周期測定をおこなう。 搬送波の周期は測定できない(10ms周期以上のON,OFF)
Dependencies: AQM0802A DigitalSw mbed
priodMsurement.cpp
- Committer:
- suupen
- Date:
- 2017-06-08
- Revision:
- 5:f137bb7eeda6
- Parent:
- 4:001603e48dc8
File content as of revision 5:f137bb7eeda6:
#include "mbed.h" #include "priodMsurement.h" Timer hiTimer; // hi priod timer Timer loTimer; // low priod timer Timer aTimer; Ticker checkTicker; int32_t hiCompleteTime; // 1/1 [ms]/count int32_t loCompleteTime; int32_t D_surement[50][2]; // LCD表示用測定値保管 int8_t P_surement = 0; // D_surement[ここ][] のポインタ #define Z_nonSurement (-1) // D_surementの最終位置(不定値) bool F_start = false; // 測定開始要求 false:なし true:あり void priodMsurementRequest(void) { F_start = true; } int8_t beforeLevel = -1; // 0:Lo 1:Hi -1:timeOut(non Pluse) #define Z_initialSurement (-1)// surementPut()への初期化指示 #define Z_hiSurement (0) // surementPut()へのON時間記憶指示 #define Z_loSurement (1) // surementPut()へのOFF時間記憶指示 void surementPut(int8_t hilo, int32_t surement) { if(hilo == Z_initialSurement) { P_surement = 0; D_surement[P_surement][Z_hiSurement] = (int32_t)Z_initialSurement; D_surement[P_surement][Z_loSurement] = (int32_t)Z_initialSurement; } else { D_surement[P_surement][hilo] = surement; D_surement[P_surement + 1][hilo] = (int32_t)Z_initialSurement; if(hilo == Z_loSurement) { P_surement++; } } } InterruptIn lightIn(p18); DigitalOut monitor(LED4); bool surementData(int8_t *p, int32_t *hiPriod, int32_t *loPriod) { bool ans = beforeLevel == -1 ? true : false; if(ans == false) { *p = P_surement; } *hiPriod = D_surement[*p][Z_hiSurement]; *loPriod = D_surement[*p][Z_loSurement]; return (ans); } void priodMsurementMain(void) { } void hiEdge(void) { hiTimer.reset(); if(beforeLevel == 0) { loCompleteTime = loTimer.read_ms(); surementPut(Z_loSurement, loCompleteTime); beforeLevel = 1; printf("hi = %d, lo = %d\r\n",hiCompleteTime, loCompleteTime); } // if(beforeLevel == -1) { if((beforeLevel == -1) && (F_start == true)) { printf("start\r\n"); surementPut(Z_initialSurement, (int32_t)Z_initialSurement); beforeLevel = 1; F_start = false; } monitor = 1; } void loEdge(void) { loTimer.reset(); if(beforeLevel == 1) { hiCompleteTime = hiTimer.read_ms(); surementPut(Z_hiSurement, hiCompleteTime); beforeLevel = 0; } monitor = 0; } void pulseCheck(void) { int32_t lo = loTimer.read_ms(); int32_t hi = hiTimer.read_ms(); if((lo > Z_nonSignalTime) && (beforeLevel == 0)) { // pulse end beforeLevel = -1; printf("hi = %d, lo = --\r\n",hiCompleteTime); printf("end\r\n"); } } void priodMsurementInitalize(void) { aTimer.start(); hiTimer.start(); loTimer.start(); checkTicker.attach_us(&pulseCheck, 1000); lightIn.rise(&hiEdge); lightIn.fall(&loEdge); }