Can toggle digital output at the specified time intervals
Diff: Blinker.cpp
- Revision:
- 0:ed332628f798
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Blinker.cpp Sat Jan 07 16:00:30 2017 +0000 @@ -0,0 +1,66 @@ +/** + * @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); + } +}