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);
}