Jednoduchá knihovna pro obsluhu podsvícení LCD displeje, používá jeden PWM pin, zavoláním funkce on(intenzita, zpozdění, rychlost) nastavíme jas podsvícení na požadovanou hodnotu (0-255), a k aktuálnímu času systému se připočte zpoždění po kterém začne podsvícení pozvolna (intervalem v milisekundách) pohasínat až do uplného setmění.
#ifndef Dimmer_H
#define Dimmer_H
class Dimmer {
public:
Dimmer(unsigned short);
void on(unsigned char, unsigned long, unsigned short);
bool available();
bool dimming();
private:
unsigned short pin;
unsigned long time;
unsigned char pwm;
unsigned short duration;
};
#endif
#include "Arduino.h"
#include "Dimmer.h"
Dimmer::Dimmer(unsigned short pin){
Dimmer::pin = pin;
Dimmer::duration = 0;
Dimmer::time = 0;
Dimmer::pwm = 255;
}
void Dimmer::on(unsigned char pwm, unsigned long timeout, unsigned short duration) {
Dimmer::pwm = ~pwm;
Dimmer::duration = duration;
Dimmer::time = millis() + timeout;
analogWrite(pin, ~pwm);
}
bool Dimmer::available() {
unsigned long now = millis();
return (pwm > 0 && time < now);
}
bool Dimmer::dimming() {
unsigned long now = millis();
unsigned char value = map(min(now, time+duration), min(now, time), time+duration, pwm, 255);
if ( value == 255)
pwm = 0;
delay(10);
analogWrite(pin, value);
return (value == 255);
};