|
@@ -5,22 +5,39 @@
|
|
|
class LED{
|
|
|
unsigned int _pin;
|
|
|
bool _on;
|
|
|
+ unsigned long _fadeDuration, _fadeStart, _fadeEnd;
|
|
|
+
|
|
|
+ float getMultiplier() {
|
|
|
+ unsigned long now = millis();
|
|
|
+ float remainingTime = _fadeEnd > now ? constrain(_fadeEnd - now, 0, _fadeDuration) : 0;
|
|
|
+ float value = remainingTime / (float)_fadeDuration;
|
|
|
+ return _on ? value : 1.0f - value;
|
|
|
+ }
|
|
|
+
|
|
|
+ void resetTimers(){
|
|
|
+ _fadeStart = millis();
|
|
|
+ _fadeEnd = _fadeStart + _fadeDuration;
|
|
|
+ }
|
|
|
|
|
|
public:
|
|
|
- LED(unsigned int pin){
|
|
|
+ LED(unsigned int pin, unsigned long fadeDuration){
|
|
|
_pin = pin;
|
|
|
pinMode(pin, OUTPUT);
|
|
|
+ _fadeDuration = fadeDuration;
|
|
|
}
|
|
|
|
|
|
void on(){
|
|
|
+ resetTimers();
|
|
|
_on = true;
|
|
|
}
|
|
|
|
|
|
void off(){
|
|
|
+ resetTimers();
|
|
|
_on = false;
|
|
|
}
|
|
|
|
|
|
void loop(){
|
|
|
- analogWrite(_pin, PWMRANGE * _on);
|
|
|
+ float multiplier = getMultiplier();
|
|
|
+ analogWrite(_pin, PWMRANGE * multiplier);
|
|
|
}
|
|
|
};
|