adventsfenster/include/train.h

92 lines
1.6 KiB
C++

#ifndef __train_H__
#define __train_H__
#include <Arduino.h>
class train
{
private:
const uint8_t _MAX_FADE_STEP = 255;
const uint8_t _MIN_FADE_STEP = 0;
static const unsigned long _FADE_DELAY_MS = 50;
size_t _pwmpin;
size_t _pwmchannel;
uint8_t _fade_step;
unsigned long _last_faded_ms;
unsigned long _delay_ms;
bool _fade(bool fade_up);
public:
train(size_t pwmpin , size_t pwmchannel,unsigned long delay_ms = _FADE_DELAY_MS);
~train();
void stop();
bool fade_on();
bool fade_off();
void set_pwm(uint8_t pwm_value);
};
train::train(size_t pwmpin, size_t pwmchannel, unsigned long delay_ms)
{
_pwmpin = pwmpin;
_pwmchannel = pwmchannel;
_fade_step = 0;
_last_faded_ms = 0;
_delay_ms = delay_ms;
ledcSetup(pwmchannel, 100, 8);
ledcAttachPin(_pwmpin, pwmchannel);
}
train::~train()
{
}
void train::set_pwm(uint8_t pwm_value) {
ledcWrite(_pwmchannel, pwm_value);
}
void train::stop() {
set_pwm(0);
}
bool train::_fade(bool fade_up)
{
if(millis() - _last_faded_ms > _delay_ms)
{
_last_faded_ms = millis();
if(true == fade_up)
{
if(_MAX_FADE_STEP > _fade_step)
_fade_step++;
else
return false;
}
else
{
if(_MIN_FADE_STEP < _fade_step)
_fade_step--;
else
return false;
}
}
return true;
}
bool train::fade_on()
{
return _fade(true);
}
bool train::fade_off()
{
return _fade(false);
}
#endif