2#include "FastAccelStepper.h"
3#include "TinyRobotics/utils/Config.h"
5#include "AVRStepperPins.h"
9namespace tinyrobotics {
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77template <
typename T =
float>
80 StepperMotor(uint8_t id = 0) { setID(id); }
81 StepperMotor(uint8_t id, uint16_t stepsPerRevolution,
82 float maxSpeedStepsPerSec, uint16_t accelerationMs) {
85 setAccelerationMs(accelerationMs);
86 setStepsPerRevolution(stepsPerRevolution);
89 void setPins(
int stepPin,
int dirPin,
int enablePin = -1) {
92 pinEnable = enablePin;
98 void setMaxSpeed(
float stepsPerSec) { maxSpeedHz = stepsPerSec; }
110 if (!is_pins_set)
return false;
112 stepper = engine.stepperConnectToPin(pinStep);
114 stepper->setDirectionPin(pinDir);
115 if (pinEnable != -1) stepper->setEnablePin(pinEnable);
116 stepper->setAutoEnable(
true);
118 return stepper !=
nullptr;
125 if (!stepper)
return false;
126 lastValuePercent = constrain(percent, -100.0f, 100.0f);
127 setSpeedPercent(lastValuePercent);
128 if (lastValuePercent >= 0) {
129 stepper->runForward();
131 stepper->runBackward();
136 T getValuePercent()
const override {
137 return lastValuePercent;
166 void end()
override {
172 bool isPinsSet()
const override {
return is_pins_set; }
175 T lastValuePercent = 0.0f;
176 FastAccelStepperEngine engine;
177 FastAccelStepper* stepper =
NULL;
181 bool is_pins_set =
false;
184 float maxSpeedHz = 2000;
186 uint16_t accelerationMs = 2000;
189 uint16_t stepsPerRevolution = 200;
191 void (*callback)(
void*) =
nullptr;
193 void callbackFastAccel(FastAccelStepper* s) {
199 void setSpeedPercent(T percent) {
200 percent = constrain(percent, -100.0f, 100.0f);
201 int speed = map((
int)percent, -100, 100, -maxSpeedHz, maxSpeedHz);
205 int acceleration = (maxSpeedHz * 1000) / accelerationMs;
206 stepper->setAcceleration(acceleration);
209 stepper->setSpeedInHz(abs(speed));
Abstract base class for all motor driver types.
Definition: IMotor.h:21
Stepper motor driver using FastAccelStepper for Arduino.
Definition: StepperMotor.h:78
void setMaxSpeed(float stepsPerSec)
Definition: StepperMotor.h:98
bool setValuePercent(T percent) override
Definition: StepperMotor.h:124
bool begin()
Definition: StepperMotor.h:109
void end() override
Stop the stepper motor.
Definition: StepperMotor.h:166
void setStepsPerRevolution(int steps)
Definition: StepperMotor.h:105
void setAccelerationMs(uint16_t ms)
Set acceleration time in milliseconds to reach max speed (e.g., 2000 ms)
Definition: StepperMotor.h:101