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

Dependencies:   AQM0802A DigitalSw mbed

testLed.cpp

Committer:
suupen
Date:
2017-06-08
Revision:
5:f137bb7eeda6
Parent:
3:2a8fdcc54c95

File content as of revision 5:f137bb7eeda6:

#include "mbed.h"
#include "testLed.h"

void tick(void);
Ticker ticker;
DigitalOut myled3(LED3);
DigitalOut dbgLedPort(p25);

DigitalOut testLed(LED1);

Timer timerTestLed;
bool brinkRequest = false;



void testLedInitalize(void)
{
    timerTestLed.start();
    timerTestLed.reset();
    brinkRequest = false;

    ticker.attach_us(&tick, 1000);
}

uint8_t brinkPosition = 0;  // brinkPattern[][ここ]
uint16_t brinkPriod = 0;    // 点滅時間 1/1 ([ms]/count)
bool testLedLevel = false;  // false:Off true:On
uint32_t brinkPattern[][2] = {
    {1,100},
    {0,100},

    {1,200},
    {0,200},

    {1,300},
    {0,300},

    {1,400},
    {0,400},

    {1,500},
    {0,500},

    {1,100},
    {0,200},

 


    {2,0}       // end
};

void tick(void)
{
    dbgLedPort = !dbgLedPort;
    myled3 = !myled3;
    if(testLedLevel == true) {
        testLed = !testLed;
    } else {
        testLed = 0;
    }
}



bool testLedMain(bool request)
{
    if(brinkRequest == false) {
        if(request == true) {
            brinkRequest = true;
            brinkPosition = 0;
            testLedLevel = brinkPattern[brinkPosition][0];
            brinkPriod = brinkPattern[brinkPosition][1];

            timerTestLed.reset();
        } else {
            // nothing
        }
    } else {
        if(timerTestLed.read_ms() > brinkPriod) {
            brinkPosition++;
            if(brinkPattern[brinkPosition][0] == 2) {
                testLedLevel = 0;
                brinkRequest = false;
            } else {
                testLedLevel = brinkPattern[brinkPosition][0];
                brinkPriod = brinkPattern[brinkPosition][1];
                timerTestLed.reset();

            }
        }
    }
    return (brinkRequest);
}