ESPHome  2023.11.6
max7219digit.h
Go to the documentation of this file.
1 #pragma once
2 
4 #include "esphome/core/time.h"
5 
8 
9 #include <vector>
10 
11 namespace esphome {
12 namespace max7219digit {
13 
15  ZIGZAG = 0,
17 };
18 
19 enum ScrollMode {
22 };
23 
24 class MAX7219Component;
25 
26 using max7219_writer_t = std::function<void(MAX7219Component &)>;
27 
30  public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
31  spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_1MHZ> {
32  public:
33  void set_writer(max7219_writer_t &&writer) { this->writer_local_ = writer; };
34 
35  void setup() override;
36 
37  void loop() override;
38 
39  void dump_config() override;
40 
41  void update() override;
42 
43  float get_setup_priority() const override;
44 
45  void display();
46 
47  void invert_on_off(bool on_off);
48  void invert_on_off();
49 
50  void turn_on_off(bool on_off);
51 
52  void draw_absolute_pixel_internal(int x, int y, Color color) override;
53  int get_height_internal() override;
54  int get_width_internal() override;
55 
56  void set_intensity(uint8_t intensity) { this->intensity_ = intensity; };
57  void set_num_chips(uint8_t num_chips) { this->num_chips_ = num_chips; };
58  void set_num_chip_lines(uint8_t num_chip_lines) { this->num_chip_lines_ = num_chip_lines; };
59  void set_chip_lines_style(ChipLinesStyle chip_lines_style) { this->chip_lines_style_ = chip_lines_style; };
60  void set_chip_orientation(uint8_t rotate) { this->orientation_ = rotate; };
61  void set_scroll_speed(uint16_t speed) { this->scroll_speed_ = speed; };
62  void set_scroll_dwell(uint16_t dwell) { this->scroll_dwell_ = dwell; };
63  void set_scroll_delay(uint16_t delay) { this->scroll_delay_ = delay; };
64  void set_scroll(bool on_off) { this->scroll_ = on_off; };
66  void set_reverse(bool on_off) { this->reverse_ = on_off; };
67  void set_flip_x(bool flip_x) { this->flip_x_ = flip_x; };
68 
69  void send_char(uint8_t chip, uint8_t data);
70  void send64pixels(uint8_t chip, const uint8_t pixels[8]);
71 
72  void scroll_left();
73  void scroll(bool on_off, ScrollMode mode, uint16_t speed, uint16_t delay, uint16_t dwell);
74  void scroll(bool on_off, ScrollMode mode);
75  void scroll(bool on_off);
76  void intensity(uint8_t intensity);
77 
79  uint8_t printdigitf(uint8_t pos, const char *format, ...) __attribute__((format(printf, 3, 4)));
81  uint8_t printdigitf(const char *format, ...) __attribute__((format(printf, 2, 3)));
82 
84  uint8_t printdigit(uint8_t pos, const char *str);
86  uint8_t printdigit(const char *str);
87 
89  uint8_t strftimedigit(uint8_t pos, const char *format, ESPTime time) __attribute__((format(strftime, 3, 0)));
90 
92  uint8_t strftimedigit(const char *format, ESPTime time) __attribute__((format(strftime, 2, 0)));
93 
95 
96  protected:
97  void send_byte_(uint8_t a_register, uint8_t data);
98  void send_to_all_(uint8_t a_register, uint8_t data);
99  uint8_t orientation_180_();
100 
101  uint8_t intensity_;
102  uint8_t num_chips_;
105  bool scroll_;
106  bool reverse_;
107  bool flip_x_;
108  bool update_{false};
109  uint16_t scroll_speed_;
110  uint16_t scroll_delay_;
111  uint16_t scroll_dwell_;
112  uint16_t old_buffer_size_ = 0;
114  bool invert_ = false;
115  uint8_t orientation_;
116  uint8_t bckgrnd_ = 0x0;
117  std::vector<std::vector<uint8_t>> max_displaybuffer_;
118  uint32_t last_scroll_ = 0;
119  uint16_t stepsleft_;
120  size_t get_buffer_length_();
122 };
123 
124 } // namespace max7219digit
125 } // namespace esphome
void set_writer(max7219_writer_t &&writer)
Definition: max7219digit.h:33
void draw_absolute_pixel_internal(int x, int y, Color color) override
void set_chip_lines_style(ChipLinesStyle chip_lines_style)
Definition: max7219digit.h:59
void send64pixels(uint8_t chip, const uint8_t pixels[8])
uint16_t x
Definition: tt21100.cpp:17
A more user-friendly version of struct tm from time.h.
Definition: time.h:12
void send_to_all_(uint8_t a_register, uint8_t data)
int speed
Definition: fan.h:35
optional< max7219_writer_t > writer_local_
Definition: max7219digit.h:121
void printf(int x, int y, BaseFont *font, Color color, TextAlign align, const char *format,...) __attribute__((format(printf
Evaluate the printf-format format and print the result with the anchor point at [x,y] with font.
Definition: display.cpp:216
This class simplifies creating components that periodically check a state.
Definition: component.h:282
void set_scroll_mode(ScrollMode mode)
Definition: max7219digit.h:65
uint16_t y
Definition: tt21100.cpp:18
uint8_t strftimedigit(uint8_t pos, const char *format, ESPTime time) __attribute__((format(strftime
Evaluate the strftime-format and print the result at the given position.
The SPIDevice is what components using the SPI will create.
Definition: spi.h:384
void send_char(uint8_t chip, uint8_t data)
void set_num_chip_lines(uint8_t num_chip_lines)
Definition: max7219digit.h:58
std::vector< std::vector< uint8_t > > max_displaybuffer_
Definition: max7219digit.h:117
void set_num_chips(uint8_t num_chips)
Definition: max7219digit.h:57
BedjetMode mode
BedJet operating mode.
Definition: bedjet_codec.h:151
float get_setup_priority() const override
std::function< void(MAX7219Component &)> max7219_writer_t
Definition: max7219digit.h:26
uint8_t uint8_t uint8_t printdigit(uint8_t pos, const char *str)
Print str at the given position.
void scroll(bool on_off, ScrollMode mode, uint16_t speed, uint16_t delay, uint16_t dwell)
enum esphome::EntityCategory __attribute__
uint8_t num_chips_
Intensity of the display from 0 to 15 (most)
Definition: max7219digit.h:102
uint8_t printdigitf(uint8_t pos, const char *format,...) __attribute__((format(printf
Evaluate the printf-format and print the result at the given position.
void send_byte_(uint8_t a_register, uint8_t data)
void set_chip_orientation(uint8_t rotate)
Definition: max7219digit.h:60
void set_intensity(uint8_t intensity)
Definition: max7219digit.h:56
uint8_t uint8_t display::DisplayType get_display_type() override
Definition: max7219digit.h:94
void void void void void strftime(int x, int y, BaseFont *font, Color color, TextAlign align, const char *format, ESPTime time) __attribute__((format(strftime
Evaluate the strftime-format format and print the result with the anchor point at [x...
Definition: display.cpp:278
Implementation of SPI Controller mode.
Definition: a01nyub.cpp:7
void IRAM_ATTR HOT delay(uint32_t ms)
Definition: core.cpp:26