File evamAdaptiveSmoothDecor.h¶
File List > src > evamAdaptiveSmoothDecor.h
Go to the documentation of this file
#pragma once
#include <evafAdaptiveAverage.h>
#include "evaStdReaders.h"
namespace evam
{
struct AdaptiveSmoothConfig
{
unsigned short minTimeConstantTicks;
unsigned short maxTimeConstantTicks;
AdaptiveSmoothConfig(unsigned short minTimeConstantTicks,
unsigned short maxTimeConstantTicks)
: minTimeConstantTicks(minTimeConstantTicks),
maxTimeConstantTicks(maxTimeConstantTicks) {}
};
template <class TMotor,
unsigned short tMinTimeConstantTicks = evaf::kDefaultMinTimeConstantTicks,
unsigned short tMaxTimeConstantTicks = evaf::kDefaultMaxTimeConstantTicks>
class AdaptiveSmoothDecor
: public TMotor
{
private:
using Filter = evaf::AdaptiveAverage<eva::ValueReader,
tMinTimeConstantTicks,
tMaxTimeConstantTicks>;
Filter mFilter;
public:
AdaptiveSmoothDecor() : TMotor() {}
template <typename... Args>
AdaptiveSmoothDecor(AdaptiveSmoothConfig config, Args... args)
: TMotor(args...),
mFilter(config.minTimeConstantTicks,
config.maxTimeConstantTicks) {}
void Go(signed short value)
{
mFilter.setValue(constrain(value, -1000, 1000));
TMotor::Go(mFilter.getValue());
}
void SetMinTimeConstantTicks(unsigned short value)
{
mFilter.setMinTimeConstantTicks(value);
}
unsigned short GetMinTimeConstantTicks() const
{
return mFilter.getMinTimeConstantTicks();
}
void SetMaxTimeConstantTicks(unsigned short value)
{
mFilter.setMaxTimeConstantTicks(value);
}
unsigned short GetMaxTimeConstantTicks() const
{
return mFilter.getMaxTimeConstantTicks();
}
};
}