ESPHome 2025.9.0-dev
Loading...
Searching...
No Matches
servo.h
Go to the documentation of this file.
1#pragma once
2
8
9namespace esphome {
10namespace servo {
11
12extern uint32_t global_servo_id; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
13
14class Servo : public Component {
15 public:
16 void set_output(output::FloatOutput *output) { output_ = output; }
17 void loop() override;
18 void write(float value);
19 void internal_write(float value);
20 void detach();
21 void setup() override;
22 void dump_config() override;
23 void set_min_level(float min_level) { min_level_ = min_level; }
24 void set_idle_level(float idle_level) { idle_level_ = idle_level; }
25 void set_max_level(float max_level) { max_level_ = max_level; }
26 void set_restore(bool restore) { restore_ = restore; }
27 void set_auto_detach_time(uint32_t auto_detach_time) { auto_detach_time_ = auto_detach_time; }
28 void set_transition_length(uint32_t transition_length) { transition_length_ = transition_length; }
29
30 bool has_reached_target() { return this->current_value_ == this->target_value_; }
31
32 protected:
33 void save_level_(float v);
34
36 float min_level_ = 0.0300f;
37 float idle_level_ = 0.0750f;
38 float max_level_ = 0.1200f;
39 bool restore_{false};
40 uint32_t auto_detach_time_ = 0;
41 uint32_t transition_length_ = 0;
43 uint8_t state_;
44 float target_value_ = 0;
45 float source_value_ = 0;
46 float current_value_ = 0;
47 uint32_t start_millis_ = 0;
53};
54
55template<typename... Ts> class ServoWriteAction : public Action<Ts...> {
56 public:
57 ServoWriteAction(Servo *servo) : servo_(servo) {}
58 TEMPLATABLE_VALUE(float, value)
59
60 void play(Ts... x) override { this->servo_->write(this->value_.value(x...)); }
61
62 protected:
64};
65
66template<typename... Ts> class ServoDetachAction : public Action<Ts...> {
67 public:
68 ServoDetachAction(Servo *servo) : servo_(servo) {}
69
70 void play(Ts... x) override { this->servo_->detach(); }
71
72 protected:
74};
75
76} // namespace servo
77} // namespace esphome
virtual void play(Ts... x)=0
Base class for all output components that can output a variable level, like PWM.
ServoDetachAction(Servo *servo)
Definition servo.h:68
void play(Ts... x) override
Definition servo.h:70
uint32_t start_millis_
Definition servo.h:47
void set_idle_level(float idle_level)
Definition servo.h:24
void loop() override
Definition servo.cpp:41
uint32_t transition_length_
Definition servo.h:41
void set_restore(bool restore)
Definition servo.h:26
void write(float value)
Definition servo.cpp:73
uint32_t auto_detach_time_
Definition servo.h:40
void set_max_level(float max_level)
Definition servo.h:25
void setup() override
Definition servo.cpp:25
void dump_config() override
Definition servo.cpp:13
void set_transition_length(uint32_t transition_length)
Definition servo.h:28
void set_min_level(float min_level)
Definition servo.h:23
output::FloatOutput * output_
Definition servo.h:35
bool has_reached_target()
Definition servo.h:30
void set_auto_detach_time(uint32_t auto_detach_time)
Definition servo.h:27
void internal_write(float value)
Definition servo.cpp:87
ESPPreferenceObject rtc_
Definition servo.h:42
void save_level_(float v)
Definition servo.cpp:104
void set_output(output::FloatOutput *output)
Definition servo.h:16
ServoWriteAction(Servo *servo)
Definition servo.h:57
TEMPLATABLE_VALUE(float, value) void play(Ts... x) override
Definition servo.h:58
uint32_t global_servo_id
Definition servo.cpp:11
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
uint16_t x
Definition tt21100.cpp:5