Can toggle digital output at the specified time intervals

Dependents:   TEST_with_daniel

Committer:
jurgis
Date:
Sat Jan 07 16:00:30 2017 +0000
Revision:
0:ed332628f798
Blinker library initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jurgis 0:ed332628f798 1 /**
jurgis 0:ed332628f798 2 * @file Blinker.cpp
jurgis 0:ed332628f798 3 * @brief Digital pin blinking library
jurgis 0:ed332628f798 4 * @author Jurgis Jurksta
jurgis 0:ed332628f798 5 * @version 1.0.0
jurgis 0:ed332628f798 6 * @see
jurgis 0:ed332628f798 7 *
jurgis 0:ed332628f798 8 * Copyright (c) 2017, Jurgis Jurksta
jurgis 0:ed332628f798 9 */
jurgis 0:ed332628f798 10
jurgis 0:ed332628f798 11 #include "Blinker.h"
jurgis 0:ed332628f798 12
jurgis 0:ed332628f798 13 namespace jj
jurgis 0:ed332628f798 14 {
jurgis 0:ed332628f798 15 Blinker::Blinker(DigitalOut& pin, Timer& timer)
jurgis 0:ed332628f798 16 : _pin(pin), _timer(timer)
jurgis 0:ed332628f798 17 {
jurgis 0:ed332628f798 18 _blink = false;
jurgis 0:ed332628f798 19 }
jurgis 0:ed332628f798 20
jurgis 0:ed332628f798 21
jurgis 0:ed332628f798 22 void Blinker::update()
jurgis 0:ed332628f798 23 {
jurgis 0:ed332628f798 24 // do not proceed if blinking is not allowed
jurgis 0:ed332628f798 25 if (_blink == false)
jurgis 0:ed332628f798 26 return;
jurgis 0:ed332628f798 27
jurgis 0:ed332628f798 28 bool pinIsOn = _pin == 1;
jurgis 0:ed332628f798 29 int toggleTimeMs = pinIsOn ? _onTimeMs : _offTimeMs;
jurgis 0:ed332628f798 30
jurgis 0:ed332628f798 31 if (_timer.read_ms() - _lastToggleTimeMs >= toggleTimeMs)
jurgis 0:ed332628f798 32 {
jurgis 0:ed332628f798 33 _lastToggleTimeMs = _timer.read_ms();
jurgis 0:ed332628f798 34 _pin = !_pin;
jurgis 0:ed332628f798 35 }
jurgis 0:ed332628f798 36 }
jurgis 0:ed332628f798 37
jurgis 0:ed332628f798 38
jurgis 0:ed332628f798 39 void Blinker::on()
jurgis 0:ed332628f798 40 {
jurgis 0:ed332628f798 41 _blink = true;
jurgis 0:ed332628f798 42 _pin = 1;
jurgis 0:ed332628f798 43 }
jurgis 0:ed332628f798 44
jurgis 0:ed332628f798 45
jurgis 0:ed332628f798 46 void Blinker::off()
jurgis 0:ed332628f798 47 {
jurgis 0:ed332628f798 48 _blink = false;
jurgis 0:ed332628f798 49 _pin = 0;
jurgis 0:ed332628f798 50 }
jurgis 0:ed332628f798 51
jurgis 0:ed332628f798 52
jurgis 0:ed332628f798 53 void Blinker::blink(int onTimeMs, int offTimeMs)
jurgis 0:ed332628f798 54 {
jurgis 0:ed332628f798 55 _blink = true;
jurgis 0:ed332628f798 56 _onTimeMs = onTimeMs;
jurgis 0:ed332628f798 57 _offTimeMs = offTimeMs;
jurgis 0:ed332628f798 58 _lastToggleTimeMs = _timer.read_ms();
jurgis 0:ed332628f798 59 }
jurgis 0:ed332628f798 60
jurgis 0:ed332628f798 61
jurgis 0:ed332628f798 62 void Blinker::blink(int timeMs)
jurgis 0:ed332628f798 63 {
jurgis 0:ed332628f798 64 blink(timeMs, timeMs);
jurgis 0:ed332628f798 65 }
jurgis 0:ed332628f798 66 }