LEDの点滅や、ブザーのOn,Offの周期測定をおこなう。 搬送波の周期は測定できない(10ms周期以上のON,OFF)
Dependencies: AQM0802A DigitalSw mbed
Diff: priodMsurement.cpp
- Revision:
- 1:d4291fd3a94c
- Parent:
- 0:c5384fa0fc28
- Child:
- 2:f22110fb3925
diff -r c5384fa0fc28 -r d4291fd3a94c priodMsurement.cpp --- a/priodMsurement.cpp Sat May 20 01:33:48 2017 +0000 +++ b/priodMsurement.cpp Sat May 20 12:23:42 2017 +0000 @@ -0,0 +1,91 @@ +#include "mbed.h" +#include <AQM0802A.h> +#include "priodMsurement.h" + +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) + +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) +{ + monitor = 0; + + 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; + + } + beforeLevel = 0; + + + +} + +void priodMsurementInitalize(void) +{ + timer.start(); + + lightIn.rise(&ledOn); + lightIn.fall(&ledOff); +}