Can toggle digital output at the specified time intervals
Blinker.cpp@0:ed332628f798, 2017-01-07 (annotated)
- Committer:
- jurgis
- Date:
- Sat Jan 07 16:00:30 2017 +0000
- Revision:
- 0:ed332628f798
Blinker library initial commit
Who changed what in which revision?
User | Revision | Line number | New 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 | } |