LEDの点滅や、ブザーのOn,Offの周期測定をおこなう。 搬送波の周期は測定できない(10ms周期以上のON,OFF)
Dependencies: AQM0802A DigitalSw mbed
priodMsurement.cpp
- Committer:
- suupen
- Date:
- 2017-05-20
- Revision:
- 1:d4291fd3a94c
- Parent:
- 0:c5384fa0fc28
- Child:
- 2:f22110fb3925
File content as of revision 1:d4291fd3a94c:
#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); }