ESPHome 2026.5.1
Loading...
Searching...
No Matches
my9231.h
Go to the documentation of this file.
1#pragma once
2
4#include "esphome/core/hal.h"
6#include <vector>
7
8namespace esphome::my9231 {
9
12 public:
13 class Channel;
14 void set_pin_di(GPIOPin *pin_di) { pin_di_ = pin_di; }
15 void set_pin_dcki(GPIOPin *pin_dcki) { pin_dcki_ = pin_dcki; }
16
17 void set_num_channels(uint16_t num_channels) { this->num_channels_ = num_channels; }
18 void set_num_chips(uint8_t num_chips) { this->num_chips_ = num_chips; }
19 void set_bit_depth(uint8_t bit_depth) { this->bit_depth_ = bit_depth; }
20
22 void setup() override;
23 void dump_config() override;
25 float get_setup_priority() const override { return setup_priority::HARDWARE; }
27 void loop() override;
28
30 public:
31 void set_parent(MY9231OutputComponent *parent) { parent_ = parent; }
32 void set_channel(uint16_t channel) { channel_ = channel; }
33
34 protected:
35 void write_state(float state) override {
36 auto amount = uint16_t(state * this->parent_->get_max_amount_());
37 this->parent_->set_channel_value_(this->channel_, amount);
38 }
39
41 uint16_t channel_;
42 };
43
44 protected:
45 uint16_t get_max_amount_() const { return (uint32_t(1) << this->bit_depth_) - 1; }
46
47 void set_channel_value_(uint16_t channel, uint16_t value);
48 void init_chips_(uint8_t command);
49 void write_word_(uint16_t value, uint8_t bits);
50 void send_di_pulses_(uint8_t count);
51 void send_dcki_pulses_(uint8_t count);
52
55 uint8_t bit_depth_;
56 uint16_t num_channels_;
57 uint8_t num_chips_;
58 std::vector<uint16_t> pwm_amounts_;
59 bool update_{true};
60};
61
62} // namespace esphome::my9231
void write_state(float state) override
Definition my9231.h:35
void set_parent(MY9231OutputComponent *parent)
Definition my9231.h:31
MY9231 float output component.
Definition my9231.h:11
std::vector< uint16_t > pwm_amounts_
Definition my9231.h:58
void set_num_chips(uint8_t num_chips)
Definition my9231.h:18
void setup() override
Setup the MY9231.
Definition my9231.cpp:29
void set_pin_dcki(GPIOPin *pin_dcki)
Definition my9231.h:15
void set_channel_value_(uint16_t channel, uint16_t value)
Definition my9231.cpp:83
void loop() override
Send new values if they were updated.
Definition my9231.cpp:69
void set_pin_di(GPIOPin *pin_di)
Definition my9231.h:14
void set_num_channels(uint16_t num_channels)
Definition my9231.h:17
void send_di_pulses_(uint8_t count)
Definition my9231.cpp:110
float get_setup_priority() const override
HARDWARE setup_priority.
Definition my9231.h:25
void set_bit_depth(uint8_t bit_depth)
Definition my9231.h:19
void write_word_(uint16_t value, uint8_t bits)
Definition my9231.cpp:104
void send_dcki_pulses_(uint8_t count)
Definition my9231.cpp:117
void init_chips_(uint8_t command)
Definition my9231.cpp:91
Base class for all output components that can output a variable level, like PWM.
bool state
Definition fan.h:2
constexpr float HARDWARE
For components that deal with hardware and are very important like GPIO switch.
Definition component.h:41
static void uint32_t