ESPHome
2025.12.1
Loading...
Searching...
No Matches
esphome
components
light
light_transformer.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
esphome/core/hal.h
"
4
#include "
esphome/core/helpers.h
"
5
#include "
light_color_values.h
"
6
7
namespace
esphome::light
{
8
10
class
LightTransformer
{
11
public
:
12
virtual
~LightTransformer
() =
default
;
13
14
void
setup
(
const
LightColorValues
&start_values,
const
LightColorValues
&target_values,
uint32_t
length
) {
15
this->
start_time_
=
millis
();
16
this->
length_
=
length
;
17
this->
start_values_
= start_values;
18
this->
target_values_
= target_values;
19
this->
start
();
20
}
21
23
virtual
bool
is_finished
() {
return
this->
get_progress_
() >= 1.0f; }
24
26
virtual
void
start
() {}
27
30
virtual
optional<LightColorValues>
apply
() = 0;
31
33
virtual
void
stop
() {}
34
35
const
LightColorValues
&
get_start_values
()
const
{
return
this->
start_values_
; }
36
37
const
LightColorValues
&
get_target_values
()
const
{
return
this->
target_values_
; }
38
39
protected
:
40
// This looks crazy, but it reduces to 6x^5 - 15x^4 + 10x^3 which is just a smooth sigmoid-like
41
// transition from 0 to 1 on x = [0, 1]
42
static
float
smoothed_progress
(
float
x
) {
return
x *
x
*
x
* (
x
* (
x
* 6.0f - 15.0f) + 10.0f); }
43
45
float
get_progress_
() {
46
uint32_t
now =
esphome::millis
();
47
if
(now < this->
start_time_
)
48
return
0.0f;
49
if
(now >= this->start_time_ + this->
length_
)
50
return
1.0f;
51
52
return
clamp((now - this->start_time_) /
float
(this->
length_
), 0.0f, 1.0f);
53
}
54
55
uint32_t
start_time_
;
56
uint32_t
length_
;
57
LightColorValues
start_values_
;
58
LightColorValues
target_values_
;
59
};
60
61
}
// namespace esphome::light
esphome::light::LightColorValues
This class represents the color state for a light object.
Definition
light_color_values.h:44
esphome::light::LightTransformer
Base class for all light color transformers, such as transitions or flashes.
Definition
light_transformer.h:10
esphome::light::LightTransformer::target_values_
LightColorValues target_values_
Definition
light_transformer.h:58
esphome::light::LightTransformer::get_target_values
const LightColorValues & get_target_values() const
Definition
light_transformer.h:37
esphome::light::LightTransformer::apply
virtual optional< LightColorValues > apply()=0
This will be called while the transformer is active to apply the transition to the light.
esphome::light::LightTransformer::start
virtual void start()
This will be called before the transition is started.
Definition
light_transformer.h:26
esphome::light::LightTransformer::start_time_
uint32_t start_time_
Definition
light_transformer.h:55
esphome::light::LightTransformer::~LightTransformer
virtual ~LightTransformer()=default
esphome::light::LightTransformer::get_progress_
float get_progress_()
The progress of this transition, on a scale of 0 to 1.
Definition
light_transformer.h:45
esphome::light::LightTransformer::setup
void setup(const LightColorValues &start_values, const LightColorValues &target_values, uint32_t length)
Definition
light_transformer.h:14
esphome::light::LightTransformer::length_
uint32_t length_
Definition
light_transformer.h:56
esphome::light::LightTransformer::smoothed_progress
static float smoothed_progress(float x)
Definition
light_transformer.h:42
esphome::light::LightTransformer::start_values_
LightColorValues start_values_
Definition
light_transformer.h:57
esphome::light::LightTransformer::is_finished
virtual bool is_finished()
Indicates whether this transformation is finished.
Definition
light_transformer.h:23
esphome::light::LightTransformer::get_start_values
const LightColorValues & get_start_values() const
Definition
light_transformer.h:35
esphome::light::LightTransformer::stop
virtual void stop()
This will be called after transition is finished.
Definition
light_transformer.h:33
esphome::optional
Definition
optional.h:36
hal.h
helpers.h
light_color_values.h
esphome::light
Definition
addressable_light.cpp:4
esphome::light::uint32_t
uint32_t
Definition
light_call.cpp:603
esphome::millis
uint32_t IRAM_ATTR HOT millis()
Definition
core.cpp:30
length
uint16_t length
Definition
tt21100.cpp:0
x
uint16_t x
Definition
tt21100.cpp:5
Generated by
1.12.0