PicoLC Arduino Library
Arduino library for PicoLC hardware
Loading...
Searching...
No Matches
PicoLCLED.cpp
1#include <cmath>
2#include <cstdint>
3#include <algorithm>
4
5#include "../PicoLC.h"
6
7PicoLCLED::PicoLCLED() {
8}
9
10void PicoLCLED::patternMode(PatternMode mode) { _patternMode = mode; }
11PatternMode PicoLCLED::patternMode() const { return _patternMode; }
12
13uint16_t PicoLCLED::update(uint32_t currentMillis) {
14 uint16_t wireState = 0;
15
16 if( _patternMode == PatternMode::Pulse ) {
17 if( _state ) {
18 _pulseStart = currentMillis;
19 _state = false;
20 }
21 if( _pulseStart > 0 && currentMillis < _pulseStart + _pulseLength ) {
22 wireState = 1;
23 } else {
24 _pulseStart = 0;
25 }
26 }
27 if( _state ) {
28 if( _patternMode == PatternMode::Blink ) {
29 if( _blinkStart == 0 ) {
30 _blinkStart = currentMillis;
31 }
32 _blinkStart += ((currentMillis - _blinkStart) / _blinkPeriod) * _blinkPeriod;
33 if( currentMillis - _blinkStart < _blinkOnTime ) {
34 wireState = 1;
35 }
36 } else {
37 wireState = 1;
38 }
39 }
40 return wireState | (_brightness << 1);
41 /*
42 if( !wireState ) {
43 digitalWrite(_channel, LOW);
44 return 0;
45 }
46 if( _brightness < PicoLCLED::PWM_MAX ) {
47 analogWrite(_channel, wireState ? _brightness : 0);
48 } else {
49 digitalWrite(_channel, wireState ? HIGH : LOW);
50 }
51 return 1;
52 */
53}
54
55bool PicoLCLED::read() const {
56 if( _patternMode == PatternMode::Pulse ) {
57 return _pulseStart > 0;
58 }
59 return _state;
60}
61
62bool PicoLCLED::write(bool state) {
63 if( _patternMode == PatternMode::Pulse && _pulseLength > 0 && !state ) {
64 _pulseStart = 0;
65 }
66 _state = state;
67 return _state;
68}
69
71 if( _patternMode == PatternMode::Pulse && _pulseLength > 0 && !_state ) {
72 write(false);
73 } else {
74 write(!_state);
75 }
76}
77
78void PicoLCLED::pulseLength(uint32_t ms) { _pulseLength = ms; }
79uint32_t PicoLCLED::pulseLength() const { return _pulseLength; }
80void PicoLCLED::blinkPeriod(uint32_t ms) { _blinkPeriod = ms; }
81uint32_t PicoLCLED::blinkPeriod() const { return _blinkPeriod; }
82void PicoLCLED::blinkOnTime(uint32_t ms) { _blinkOnTime = ms; }
83uint32_t PicoLCLED::blinkOnTime() const { return _blinkOnTime; }
84
86 const uint32_t value = std::min<uint16_t>(brightness, 1000);
87
88 _brightness = static_cast<uint16_t>((value * value * 1000UL + 5000UL) / 10000UL);
89}
90uint16_t PicoLCLED::brightness() const {
91 uint16_t duty = std::min<uint16_t>(_brightness, 1000);
92 return static_cast<uint16_t>(std::sqrt(duty / 1000.0F) * 1000.0F);
93}
uint32_t blinkOnTime() const
Returns the active time within each Blink-mode cycle.
Definition PicoLCLED.cpp:83
uint32_t blinkPeriod() const
Returns the complete Blink-mode cycle period.
Definition PicoLCLED.cpp:81
uint32_t pulseLength() const
Returns the configured Pulse-mode duration.
Definition PicoLCLED.cpp:79
bool read() const
Returns the current logical LED state.
Definition PicoLCLED.cpp:55
void brightness(uint16_t brightness)
Sets the perceived LED brightness.
Definition PicoLCLED.cpp:85
uint16_t brightness() const
Returns the configured perceived LED brightness.
Definition PicoLCLED.cpp:90
bool write(bool state)
Applies a logical command to the LED.
Definition PicoLCLED.cpp:62
PatternMode patternMode() const
Returns the configured timed LED behavior.
Definition PicoLCLED.cpp:11
void toggle()
Toggles the LED state or active pulse.
Definition PicoLCLED.cpp:70