11namespace tinyrobotics {
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
39template <
typename T =
float>
42 ServoMotor(uint8_t id = 0) {
this->setID(id); }
45 void setPin(
int pin) {
this->pin = pin; }
48 if (pin == -1)
return false;
54 void setAngle(int8_t rosAngleDegrees) {
56 if (rosAngleDegrees < minAngle) rosAngleDegrees = minAngle;
57 if (rosAngleDegrees > maxAngle) rosAngleDegrees = maxAngle;
58 int8_t angle = map(rosAngleDegrees, -90, 90, 0, 180);
59 servo.write(constrain(angle, 0, 180));
64 int angle = servo.read();
65 return map(angle, 0, 180, -90, 90);
69
70
71
73 lastValuePercent = constrain(percent, -100.0f, 100.0f);
75 int8_t angle = map(lastValuePercent, -100.0f, 100.0f, minAngle, maxAngle);
80 T getValuePercent()
const override {
return lastValuePercent; }
87 minAngle = max(minAngle, -90);
88 maxAngle = min(maxAngle, 90);
96 bool isPinsSet()
const {
return is_pin_asssigned; }
103 bool is_pin_asssigned =
false;
104 T lastValuePercent = 0.0f;
Abstract base class for all motor driver types.
Definition: IMotor.h:21
High-level wrapper for Arduino Servo control (RC servo motors).
Definition: ServoMotor.h:40
void setPin(int pin)
Definition: ServoMotor.h:45
bool setValuePercent(T percent) override
Definition: ServoMotor.h:72
int8_t getAngle()
Definition: ServoMotor.h:63
void setConstraints(int minAngle, int maxAngle)
Definition: ServoMotor.h:86
void setAngle(int8_t rosAngleDegrees)
Definition: ServoMotor.h:54