Configuration
Configuration System¶
EVA Motors provides flexible configuration through dedicated config structures. Each decorator and motor wrapper includes its own config structure that can be used either at compile-time (template parameters) or runtime (config objects).
Two Ways to Configure¶
1. Template parameters (compile-time) – for fixed configurations:
// Using template parameters
using Motor = CurveDecor<
DirectionalMotor<
TA6586Driver<9, 10>,
-1000, -200, 200, 1000 // DirectionalMotor template params
>,
-3 // CurveDecor template param: bend = -3
>;
2. Config structures (runtime) – for dynamic configuration:
// Using config structures
CurveDecor<DirectionalMotor<TA6586Driver<>>> motorr = {
CurveConfig{ -3 },
DirectionalConfig{ -1000, -200, 200, 1000 },
TA6586Config{ 9, 10 }
};
Config Structure Initialization¶
All config structures use consistent parameter names matching their fields:
// Adaptive smoothing
AdaptiveSmoothConfig smoothConfig(10, 150); // minTimeConstantMs, maxTimeConstantMs
// Curve (S-curve) behavior
CurveConfig curveConfig(-3); // bend (-10..10)
// Directional motor range
DirectionalConfig dirConfig(-1000, -200, 200, 1000); // maxBackward, minBackward, minForward, maxForward
// Forward-only motor
ForwardConfig forwardConfig(150, 1000); // minValue, maxValue
// Inertia simulation
InertiaConfig inertiaConfig(10); // inertiaMass
// Kick-start
KickConfig kickConfig(25, 900); // duration, power
// Linear actuator
LinearActuatorConfig linearConfig(0, 1000); // minValue, maxValue
// Median filter
MedianConfig medianConfig(5); // windowSize
// Steering actuator
SteeringConfig steeringConfig(-1000, 0, 1000); // leftPos, centerPos, rightPos
// PWM driver
PwmConfig pwmConfig(9); // pin
// Servo driver
ServoConfig servoConfig(9, 1000, 1500, 2000); // pin, minPulse, middlePulse, maxPulse
// TA6586 driver
TA6586Config ta6586Config(9, 10); // forwardPin, backwardPin
// TB6612 driver
TB6612Config tb6612Config(5, 6, 7); // pinSpeed, pinMode1, pinMode2
Runtime Parameter Changes¶
All configurable parameters can be changed at runtime using SetXxx() / GetXxx() methods:
InertiaDecor<ForwardMotor<PwmDriver<9>>> motor;
// Change inertia mass at runtime
motor.SetInertiaMass(20);
unsigned short mass = motor.GetInertiaMass(); // returns 20
// Change direction range at runtime
motor.SetMaxForward(800);
motor.SetMinForward(100);
Complete Example: Dynamic Configuration¶
#include <evaTac.h>
#include <evamAdaptiveSmoothDecor.h>
using namespace evam;
// Type definition without compile-time parameters
using SmoothMotor = AdaptiveSmoothDecor<DirectionalMotor<TA6586Driver<>>>;
void setup() {
// Create config structures with desired values
AdaptiveSmoothConfig smoothConfig(15, 200); // custom time constants
DirectionalConfig dirConfig(-1000, -150, 150, 1000);
TA6586Config driverConfig(9, 10);
// Initialize motor with runtime config
static SmoothMotor motor(smoothConfig, dirConfig, driverConfig);
// Adjust parameters on the fly
motor.SetMinForward(180);
motor.SetMaxTimeConstantMs(250);
motor.Go(500);
}
void loop() {
eva::tac();
}