6namespace tinyrobotics {
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
44template <
typename T =
float>
47 GenericMotor() =
default;
48 GenericMotor(uint8_t id,
void* driver =
nullptr) {
50 this->driver = driver;
54 bool begin()
override {
55 if (valueCB ==
nullptr) {
60 if (beginCB) result = beginCB(*
this);
66 value = constrain(percent, -100.0f, 100.0f);
68 valueCB(percent, *
this);
79 map(angle, -90.0f, 90.0f, -100.0f, 100.0f);
86 return map(value, -100.0f, 100.0f, -90.0f,
99 this->valueCB = valueCB;
104 this->beginCB = beginCB;
113 template <
typename DriverT>
115 assert(driver !=
nullptr);
116 return *
static_cast<DriverT*>(driver);
120 bool isPinsSet()
const override {
return true; }
127 void* driver =
nullptr;
136 motor.setValuePercent(
142 TRLogger.error(
"'%s' is not supported for GenericMotor", method);
Motor abstraction for integrating external/custom motor drivers using callbacks.
Definition: GenericMotor.h:45
void setAngle(T angle)
For Servo: Set angle in degrees (-90 to 90) by mapping it to percentage.
Definition: GenericMotor.h:77
void setPins(int, int, int na=-1)
Not supported.
Definition: GenericMotor.h:124
void setPin(int pin)
Not supported.
Definition: GenericMotor.h:122
bool setValuePercent(T percent) override
Set value as percentage (-100 to 100)
Definition: GenericMotor.h:65
void setBeginCallback(bool(*beginCB)(GenericMotor &motor))
Optional callback to define begin behavior.
Definition: GenericMotor.h:103
void setValueCallback(void(*valueCB)(T value, GenericMotor &motor))
Mandatory callback to define speed/angle control behavior.
Definition: GenericMotor.h:98
void notSupported(const char *method)
Log an error for unsupported methods.
Definition: GenericMotor.h:141
void end() override
Stop the motor using the optional end callback.
Definition: GenericMotor.h:91
static void defaultEnd(GenericMotor &motor)
Default logic for end processing: just stop the motor!
Definition: GenericMotor.h:135
bool isPinsSet() const override
Not supported.
Definition: GenericMotor.h:120
T getAngle()
For Servo: Get angle in degrees by mapping percentage back to angle.
Definition: GenericMotor.h:85
bool begin() override
Start the motor using the optional begin callback.
Definition: GenericMotor.h:54
void setEndCallback(void(*endCB)(GenericMotor &motor))
Optional callback to define end behavior.
Definition: GenericMotor.h:108
T getValuePercent() const override
Get current value percentage.
Definition: GenericMotor.h:74
DriverT & getDriver()
Provides the user motor object.
Definition: GenericMotor.h:114
Abstract base class for all motor driver types.
Definition: IMotor.h:21