Can toggle digital output at the specified time intervals

Dependents:   TEST_with_daniel

Blinker.cpp

Committer:
jurgis
Date:
2017-01-07
Revision:
0:ed332628f798

File content as of revision 0:ed332628f798:

/** 
 * @file    Blinker.cpp
 * @brief   Digital pin blinking library
 * @author  Jurgis Jurksta
 * @version 1.0.0
 * @see     
 *
 * Copyright (c) 2017, Jurgis Jurksta
 */

#include "Blinker.h"

namespace jj
{
    Blinker::Blinker(DigitalOut& pin, Timer& timer)
        : _pin(pin), _timer(timer)
    {
        _blink = false;
    }
    
    
    void Blinker::update()
    {
        // do not proceed if blinking is not allowed
        if (_blink == false)
            return;

        bool pinIsOn = _pin == 1;
        int toggleTimeMs = pinIsOn ? _onTimeMs : _offTimeMs;

        if (_timer.read_ms() - _lastToggleTimeMs >= toggleTimeMs)
        {
            _lastToggleTimeMs = _timer.read_ms();
            _pin = !_pin;
        }
    }


    void Blinker::on()
    {
        _blink = true;
        _pin = 1;
    }
    
    
    void Blinker::off()
    {
        _blink = false;
        _pin = 0;
    }


    void Blinker::blink(int onTimeMs, int offTimeMs)
    {
        _blink = true;
        _onTimeMs = onTimeMs;
        _offTimeMs = offTimeMs;
        _lastToggleTimeMs = _timer.read_ms();
    }


    void Blinker::blink(int timeMs)
    {
        blink(timeMs, timeMs);
    }
}