LEDの点滅や、ブザーのOn,Offの周期測定をおこなう。 搬送波の周期は測定できない(10ms周期以上のON,OFF)
Dependencies: AQM0802A DigitalSw mbed
Diff: priodMsurement.cpp
- Revision:
- 2:f22110fb3925
- Parent:
- 1:d4291fd3a94c
- Child:
- 3:2a8fdcc54c95
--- a/priodMsurement.cpp Sat May 20 12:23:42 2017 +0000 +++ b/priodMsurement.cpp Sat May 27 08:20:20 2017 +0000 @@ -2,90 +2,79 @@ #include <AQM0802A.h> #include "priodMsurement.h" +DigitalOut dbgPort (p19); +DigitalOut dbg2Port (p18); + I2C i2c(p28, p27); AQM0802A lcd(i2c); // if 5.0v supply, (i2c, false); -Timer timer; -uint16_t onTime; -uint16_t offTime; -int8_t beforeLevel; // 0:Lo 1:Hi -1:timeOut(non Pluse) +Timer hiTimer; // hi priod timer +Timer loTimer; // low priod timer +Timer aTimer; + +Ticker checkTicker; + +int32_t hiCompleteTime; // 1/1 [ms]/count +int32_t loCompleteTime; + +int8_t beforeLevel = -1; // 0:Lo 1:Hi -1:timeOut(non Pluse) InterruptIn lightIn(p22); DigitalOut monitor(LED4); void priodMsurementMain(void) { - if((timer.read_ms() > Z_nonSignalTime) && (beforeLevel != -1)){ - printf("end \r\n"); - timer.reset(); - beforeLevel = -1; - } -} -void ledOn(void) -{ - monitor = 1; - - switch(beforeLevel) { - case 0: - offTime = timer.read_ms(); - timer.reset(); - - printf(" off = %d\r\n\r\n",offTime); - - lcd.cls(); - lcd.printf("on %d off %d",onTime, offTime); - - break; - case -1: - case 1: - default: - timer.reset(); - printf("start: off to on\r\n"); - break; - - } - beforeLevel = 1; } -void ledOff(void) +void hiEdge(void) { - monitor = 0; + hiTimer.reset(); + if(beforeLevel == 0) { + loCompleteTime = loTimer.read_ms(); + printf("hi = %d, lo = %d\r\n",hiCompleteTime, loCompleteTime); + } + if(beforeLevel == -1) { + printf("start\r\n"); + } + beforeLevel = 1; + monitor = 1; +} - switch(beforeLevel) { - case 1: - onTime = timer.read_ms(); - if(onTime > Z_offNonDetectTime){ - timer.reset(); - printf(" on = %d\r\n",onTime); - /* - lcd.cls(); - lcd.printf("on %d off %d",onTime, offTime); - */ - } - else{ - // noise or dinamic output have a chancel. - } - break; - case -1: - case 0: - default: - timer.reset(); - printf("start: on to off\r\n"); - break; - +void loEdge(void) +{ + loTimer.reset(); + if(beforeLevel == 1) { + hiCompleteTime = hiTimer.read_ms(); } 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) { - timer.start(); + aTimer.start(); + hiTimer.start(); + loTimer.start(); + checkTicker.attach_us(&pulseCheck, 1000); - lightIn.rise(&ledOn); - lightIn.fall(&ledOff); + lightIn.rise(&hiEdge); + lightIn.fall(&loEdge); }