ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
tm1651.h
Go to the documentation of this file.
1#pragma once
2
5#include "esphome/core/hal.h"
6
7namespace esphome::tm1651 {
8
14
15class TM1651Display : public Component {
16 public:
17 void set_clk_pin(InternalGPIOPin *pin) { clk_pin_ = pin; }
18 void set_dio_pin(InternalGPIOPin *pin) { dio_pin_ = pin; }
19
20 void setup() override;
21 void dump_config() override;
22
23 void set_brightness(uint8_t new_brightness);
24 void set_brightness(TM1651Brightness new_brightness) { this->set_brightness(static_cast<uint8_t>(new_brightness)); }
25
26 void set_level(uint8_t new_level);
27 void set_level_percent(uint8_t percentage);
28
29 void turn_off();
30 void turn_on();
31
32 protected:
33 uint8_t calculate_level_(uint8_t percentage);
34 void display_level_();
35
36 uint8_t remap_brightness_(uint8_t new_brightness);
37 void update_brightness_(uint8_t on_off_control);
38
39 // low level functions
40 bool write_byte_(uint8_t data);
41
42 void half_cycle_clock_low_(bool data_bit);
45
46 void start_();
47 void stop_();
48
49 void delineate_transmission_(bool dio_state);
50
53
54 bool display_on_{true};
55 uint8_t brightness_{};
56 uint8_t level_{0};
57};
58
59template<typename... Ts> class SetBrightnessAction : public Action<Ts...>, public Parented<TM1651Display> {
60 public:
61 TEMPLATABLE_VALUE(uint8_t, brightness)
62
63 void play(const Ts &...x) override {
64 auto brightness = this->brightness_.value(x...);
65 this->parent_->set_brightness(brightness);
66 }
67};
68
69template<typename... Ts> class SetLevelAction : public Action<Ts...>, public Parented<TM1651Display> {
70 public:
71 TEMPLATABLE_VALUE(uint8_t, level)
72
73 void play(const Ts &...x) override {
74 auto level = this->level_.value(x...);
75 this->parent_->set_level(level);
76 }
77};
78
79template<typename... Ts> class SetLevelPercentAction : public Action<Ts...>, public Parented<TM1651Display> {
80 public:
81 TEMPLATABLE_VALUE(uint8_t, level_percent)
82
83 void play(const Ts &...x) override {
84 auto level_percent = this->level_percent_.value(x...);
85 this->parent_->set_level_percent(level_percent);
86 }
87};
88
89template<typename... Ts> class TurnOnAction : public Action<Ts...>, public Parented<TM1651Display> {
90 public:
91 void play(const Ts &...x) override { this->parent_->turn_on(); }
92};
93
94template<typename... Ts> class TurnOffAction : public Action<Ts...>, public Parented<TM1651Display> {
95 public:
96 void play(const Ts &...x) override { this->parent_->turn_off(); }
97};
98
99} // namespace esphome::tm1651
virtual void play(const Ts &...x)=0
Helper class to easily give an object a parent of type T.
Definition helpers.h:1861
TEMPLATABLE_VALUE(uint8_t, brightness) void play(const Ts &...x) override
Definition tm1651.h:61
TEMPLATABLE_VALUE(uint8_t, level) void play(const Ts &...x) override
Definition tm1651.h:71
TEMPLATABLE_VALUE(uint8_t, level_percent) void play(const Ts &...x) override
Definition tm1651.h:81
void set_brightness(TM1651Brightness new_brightness)
Definition tm1651.h:24
InternalGPIOPin * clk_pin_
Definition tm1651.h:51
void update_brightness_(uint8_t on_off_control)
Definition tm1651.cpp:174
void set_level_percent(uint8_t percentage)
Definition tm1651.cpp:123
void set_brightness(uint8_t new_brightness)
Definition tm1651.cpp:107
void set_clk_pin(InternalGPIOPin *pin)
Definition tm1651.h:17
void delineate_transmission_(bool dio_state)
Definition tm1651.cpp:244
uint8_t calculate_level_(uint8_t percentage)
Definition tm1651.cpp:144
void set_dio_pin(InternalGPIOPin *pin)
Definition tm1651.h:18
bool write_byte_(uint8_t data)
Definition tm1651.cpp:182
uint8_t remap_brightness_(uint8_t new_brightness)
Definition tm1651.cpp:164
void half_cycle_clock_low_(bool data_bit)
Definition tm1651.cpp:195
InternalGPIOPin * dio_pin_
Definition tm1651.h:52
void set_level(uint8_t new_level)
Definition tm1651.cpp:114
void dump_config() override
Definition tm1651.cpp:101
void play(const Ts &...x) override
Definition tm1651.h:96
void play(const Ts &...x) override
Definition tm1651.h:91
uint16_t x
Definition tt21100.cpp:5