ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
stepper.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace esphome::stepper {
7
8#define LOG_STEPPER(this) \
9 ESP_LOGCONFIG(TAG, \
10 " Acceleration: %.0f steps/s^2\n" \
11 " Deceleration: %.0f steps/s^2\n" \
12 " Max Speed: %.0f steps/s", \
13 this->acceleration_, this->deceleration_, this->max_speed_);
14
15class Stepper {
16 public:
17 void set_target(int32_t steps) { this->target_position = steps; }
18 void report_position(int32_t steps) { this->current_position = steps; }
19 void set_acceleration(float acceleration) { this->acceleration_ = acceleration; }
20 void set_deceleration(float deceleration) { this->deceleration_ = deceleration; }
21 void set_max_speed(float max_speed) { this->max_speed_ = max_speed; }
22 virtual void on_update_speed() {}
23 bool has_reached_target() { return this->current_position == this->target_position; }
24
25 int32_t current_position{0};
26 int32_t target_position{0};
27
28 protected:
29 void calculate_speed_(uint32_t now);
30 int32_t should_step_();
31
32 float acceleration_{1e6f};
33 float deceleration_{1e6f};
34 float current_speed_{0.0f};
35 float max_speed_{1e6f};
38};
39
40template<typename... Ts> class SetTargetAction : public Action<Ts...> {
41 public:
42 explicit SetTargetAction(Stepper *parent) : parent_(parent) {}
43
44 TEMPLATABLE_VALUE(int32_t, target)
45
46 void play(const Ts &...x) override { this->parent_->set_target(this->target_.value(x...)); }
47
48 protected:
50};
51
52template<typename... Ts> class ReportPositionAction : public Action<Ts...> {
53 public:
54 explicit ReportPositionAction(Stepper *parent) : parent_(parent) {}
55
57
58 void play(const Ts &...x) override { this->parent_->report_position(this->position_.value(x...)); }
59
60 protected:
62};
63
64template<typename... Ts> class SetSpeedAction : public Action<Ts...> {
65 public:
66 explicit SetSpeedAction(Stepper *parent) : parent_(parent) {}
67
68 TEMPLATABLE_VALUE(float, speed);
69
70 void play(const Ts &...x) override {
71 float speed = this->speed_.value(x...);
72 this->parent_->set_max_speed(speed);
73 this->parent_->on_update_speed();
74 }
75
76 protected:
78};
79
80template<typename... Ts> class SetAccelerationAction : public Action<Ts...> {
81 public:
82 explicit SetAccelerationAction(Stepper *parent) : parent_(parent) {}
83
84 TEMPLATABLE_VALUE(float, acceleration);
85
86 void play(const Ts &...x) override {
87 float acceleration = this->acceleration_.value(x...);
88 this->parent_->set_acceleration(acceleration);
89 }
90
91 protected:
93};
94
95template<typename... Ts> class SetDecelerationAction : public Action<Ts...> {
96 public:
97 explicit SetDecelerationAction(Stepper *parent) : parent_(parent) {}
98
99 TEMPLATABLE_VALUE(float, deceleration);
100
101 void play(const Ts &...x) override {
102 float deceleration = this->deceleration_.value(x...);
103 this->parent_->set_deceleration(deceleration);
104 }
105
106 protected:
108};
109
110} // namespace esphome::stepper
virtual void play(const Ts &...x)=0
ReportPositionAction(Stepper *parent)
Definition stepper.h:54
TEMPLATABLE_VALUE(int32_t, position) void play(const Ts &...x) override
Definition stepper.h:56
void play(const Ts &...x) override
Definition stepper.h:86
void play(const Ts &...x) override
Definition stepper.h:101
void play(const Ts &...x) override
Definition stepper.h:70
SetSpeedAction(Stepper *parent)
Definition stepper.h:66
TEMPLATABLE_VALUE(int32_t, target) void play(const Ts &...x) override
Definition stepper.h:44
SetTargetAction(Stepper *parent)
Definition stepper.h:42
void set_max_speed(float max_speed)
Definition stepper.h:21
virtual void on_update_speed()
Definition stepper.h:22
void set_acceleration(float acceleration)
Definition stepper.h:19
void report_position(int32_t steps)
Definition stepper.h:18
void set_target(int32_t steps)
Definition stepper.h:17
void set_deceleration(float deceleration)
Definition stepper.h:20
void calculate_speed_(uint32_t now)
Definition stepper.cpp:9
float position
Definition cover.h:0
int speed
Definition fan.h:3
static void uint32_t
uint16_t x
Definition tt21100.cpp:5