Newer
Older
#if CORE_MOCK
class AccelStepper
{
};
#else
#include <AccelStepper.h>
#endif
class Motor
{
public:
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
using MotorHardware_t = AccelStepper;
Motor (AccelStepper& stepper): stepper(stepper)
{
setSpeedMmPerSec(1);
setAccelMmPerSecPerSec(0.01); // <----- this is not yet configured by user
}
void setPhysical (int stepsPerRevolution, float mmPerRevolution)
{
this->stepsPerRevolution = stepsPerRevolution;
this->mmPerRevolution = mmPerRevolution;
}
void setSpeedMmPerSec (float mmPerSec)
{
Serial.printf("motor: set speed: %g mm/s\n", mmPerSec);
Serial.printf("motor: set speed: %g st/s\n", mmToStep(mmPerSec));
#if !CORE_MOCK
stepper.setMaxSpeed(mmToStep(mmPerSec));
#endif
}
void setAccelMmPerSecPerSec (float mmPerSecPerSec)
{
Serial.printf("motor: set accel: %g mm/s/s\n", mmPerSecPerSec);
Serial.printf("motor: set accel: %g st/s/s\n", mmToStep(mmPerSecPerSec));
_retainAccel = mmPerSecPerSec;
#if !CORE_MOCK
stepper.setAcceleration(mmToStep(mmPerSecPerSec));
#endif
}
float mmToStep (float mm)
{
return mm * stepsPerRevolution / mmPerRevolution;
}
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
int where ()
{
#if CORE_MOCK
return 0;
#else
return stepper.currentPosition();
#endif
}
void moveToMm (float mm)
{
Serial.printf("motor: move to: %g mm\n", mm);
moveToStep(mmToStep(mm));
}
void moveToStep (int step)
{
Serial.printf("motor: move to: %d step\n", step);
Serial.printf("motor: currently at: %ld step\n", stepper.currentPosition());
#if !CORE_MOCK
cli();
setAccelMmPerSecPerSec(_retainAccel);
stepper.moveTo(step);
sei();
#endif
}
void stop ()
{
#if !CORE_MOCK
cli();
stepper.stop();
sei();
#endif
}
void reset()
{
#if !CORE_MOCK
stop();
cli();
stepper.setCurrentPosition(0);
sei();
#endif
}
void stayHere ()
{
#if !CORE_MOCK
cli();
stepper.setAcceleration(1e20);
stepper.moveTo(stepper.currentPosition()); // change target to here
setAccelMmPerSecPerSec(_retainAccel);
sei();
#endif
}
protected:
int stepsPerRevolution = 1;
float mmPerRevolution = 1;
float _retainAccel = -1;
AccelStepper& stepper;
};