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