7namespace tinyrobotics {
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
35template <
typename T =
float>
39
40
44
45
46 void setPins(
int pin1,
int pin2,
int pwmFreq = 20000) {
49 this->pwmFreq = pwmFreq;
55 pinMode(pinIn1, OUTPUT);
56 pinMode(pinIn2, OUTPUT);
58#ifdef SUPPORTS_ANALOG_WRITE_FREQ
59 if (pwmFreq > 0) analogWriteFreq(pinIn1, pwmFreq);
60 if (pwmFreq > 0) analogWriteFreq(pinIn2, pwmFreq);
70 minSpeed = std::max(minSpeed, -255);
71 maxSpeed = std::min(maxSpeed, 255);
75 void setReverse(
bool reverse) { is_reverse = reverse; }
78
79
80
83 lastValuePercent = constrain(percent, -100, 100);
84 int pwmValue = map(lastValuePercent,(T) -100, (T) 100, minSpeed, maxSpeed);
89 T getValuePercent()
const override {
return lastValuePercent; }
92 void end()
override { stop(); }
96 return pinIn1 != -1 && pinIn2 != -1;
105 bool is_reverse =
false;
106 T lastValuePercent = 0.0f;
109 digitalWrite(pinIn1, LOW);
110 digitalWrite(pinIn2, LOW);
115
117 speed = constrain(speed, minSpeed, maxSpeed);
118 if (is_reverse) speed = -speed;
120 analogWrite(pinIn1, speed);
121 digitalWrite(pinIn2, LOW);
122 }
else if (speed < 0) {
123 digitalWrite(pinIn1, LOW);
124 analogWrite(pinIn2, -speed);
125 }
else if (speed == 0) {
High-level H-Bridge motor driver class for bidirectional DC motor control.
Definition: BrushedMotor.h:36
void setConstraints(T minSpeed, T maxSpeed)
Definition: BrushedMotor.h:69
bool setValuePercent(T percent) override
Definition: BrushedMotor.h:82
void setReverse(bool reverse)
Invert the direction logic.
Definition: BrushedMotor.h:75
void setPins(int pin1, int pin2, int pwmFreq=20000)
Set the pins for the HBridge after construction.
Definition: BrushedMotor.h:46
void end() override
Definition: BrushedMotor.h:92
BrushedMotor(uint8_t id=0)
Empty constructor for late pin assignment.
Definition: BrushedMotor.h:41
bool isPinsSet() const
Check if the control pins have been set (i.e., not -1).
Definition: BrushedMotor.h:95
void setSpeedValue(float speed)
Definition: BrushedMotor.h:116
Abstract base class for all motor driver types.
Definition: IMotor.h:21