Can toggle digital output at the specified time intervals
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); } }