91 lines
1.6 KiB
C++
91 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;
|
|
|
|
void _set_pwm(uint8_t pwm_value);
|
|
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();
|
|
|
|
};
|
|
|
|
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
|