LEDの点滅や、ブザーのOn,Offの周期測定をおこなう。 搬送波の周期は測定できない(10ms周期以上のON,OFF)
Dependencies: AQM0802A DigitalSw mbed
Revision 2:f22110fb3925, committed 2017-05-27
- Comitter:
- suupen
- Date:
- Sat May 27 08:20:20 2017 +0000
- Parent:
- 1:d4291fd3a94c
- Child:
- 3:2a8fdcc54c95
- Commit message:
- LED????????
Changed in this revision
--- 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); }
--- a/priodMsurement.h Sat May 20 12:23:42 2017 +0000 +++ b/priodMsurement.h Sat May 27 08:20:20 2017 +0000 @@ -1,8 +1,7 @@ #ifndef PRIODMSUREMENT_H #define PRIODMSUREMENT_H -#define Z_nonSignalTime (5000) // (1/1 [ms]/count) -#define Z_offNonDetectTime (10) // (1/1 [ms]/count) +#define Z_nonSignalTime (1000) // (1/1 [ms]/count) /** Initalize */
--- a/testLed.cpp Sat May 20 12:23:42 2017 +0000 +++ b/testLed.cpp Sat May 27 08:20:20 2017 +0000 @@ -28,45 +28,22 @@ {1,100}, {0,100}, - {1,500}, - {0,500}, - - {1,100}, - {0,100}, + {1,200}, + {0,200}, - {1,500}, - {0,500}, + {1,300}, + {0,300}, - {1,100}, - {0,100}, + {1,400}, + {0,400}, {1,500}, {0,500}, {1,100}, - {0,100}, - - {1,100}, - {0,100}, - - {1,100}, - {0,500}, - - {1,100}, - {0,500}, + {0,200}, - {1,100}, - {0,500}, - - {1,100}, - {0,500}, - - {1,100}, - {0,500}, - - {1,500}, - {0,500}, - + {2,0} // end