LEDの点滅や、ブザーのOn,Offの周期測定をおこなう。 搬送波の周期は測定できない(10ms周期以上のON,OFF)

Dependencies:   AQM0802A DigitalSw mbed

priodMsurement.cpp

Committer:
suupen
Date:
2017-05-27
Revision:
2:f22110fb3925
Parent:
1:d4291fd3a94c
Child:
3:2a8fdcc54c95

File content as of revision 2:f22110fb3925:

#include "mbed.h"
#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 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)
{


}

void hiEdge(void)
{
    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;
}

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)
{
    aTimer.start();
    hiTimer.start();
    loTimer.start();
    checkTicker.attach_us(&pulseCheck, 1000);

    lightIn.rise(&hiEdge);
    lightIn.fall(&loEdge);
}