mirror of
https://github.com/esphome/esphome.git
synced 2025-03-19 09:08:16 +00:00
Add backlight handling for lcd_pcf8574
Switch the backlight on or off by calling id(mydisplay).backlight() or id(mydisplay).no_backlight() in lamda functions (assuming mydisplay is the custom id for the LCD).
This commit is contained in:
parent
1ce257c721
commit
34e25d19b1
@ -6,9 +6,13 @@ namespace lcd_pcf8574 {
|
|||||||
|
|
||||||
static const char *TAG = "lcd_pcf8574";
|
static const char *TAG = "lcd_pcf8574";
|
||||||
|
|
||||||
|
static const uint8_t LCD_DISPLAY_BACKLIGHT_ON = 0x08;
|
||||||
|
static const uint8_t LCD_DISPLAY_BACKLIGHT_OFF = 0x00;
|
||||||
|
|
||||||
void PCF8574LCDDisplay::setup() {
|
void PCF8574LCDDisplay::setup() {
|
||||||
ESP_LOGCONFIG(TAG, "Setting up PCF8574 LCD Display...");
|
ESP_LOGCONFIG(TAG, "Setting up PCF8574 LCD Display...");
|
||||||
if (!this->write_bytes(0x08, nullptr, 0)) {
|
this->backlight_value_ = LCD_DISPLAY_BACKLIGHT_ON;
|
||||||
|
if (!this->write_bytes(this->backlight_value_, nullptr, 0)) {
|
||||||
this->mark_failed();
|
this->mark_failed();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -29,7 +33,7 @@ void PCF8574LCDDisplay::write_n_bits(uint8_t value, uint8_t n) {
|
|||||||
// Ugly fix: in the super setup() with n == 4 value needs to be shifted left
|
// Ugly fix: in the super setup() with n == 4 value needs to be shifted left
|
||||||
value <<= 4;
|
value <<= 4;
|
||||||
}
|
}
|
||||||
uint8_t data = value | 0x08; // Enable backlight
|
uint8_t data = value | this->backlight_value_; // Set backlight state
|
||||||
this->write_bytes(data, nullptr, 0);
|
this->write_bytes(data, nullptr, 0);
|
||||||
// Pulse ENABLE
|
// Pulse ENABLE
|
||||||
this->write_bytes(data | 0x04, nullptr, 0);
|
this->write_bytes(data | 0x04, nullptr, 0);
|
||||||
@ -41,6 +45,14 @@ void PCF8574LCDDisplay::send(uint8_t value, bool rs) {
|
|||||||
this->write_n_bits((value & 0xF0) | rs, 0);
|
this->write_n_bits((value & 0xF0) | rs, 0);
|
||||||
this->write_n_bits(((value << 4) & 0xF0) | rs, 0);
|
this->write_n_bits(((value << 4) & 0xF0) | rs, 0);
|
||||||
}
|
}
|
||||||
|
void PCF8574LCDDisplay::backlight() {
|
||||||
|
this->backlight_value_ = LCD_DISPLAY_BACKLIGHT_ON;
|
||||||
|
this->write_bytes(this->backlight_value_, nullptr, 0);
|
||||||
|
}
|
||||||
|
void PCF8574LCDDisplay::no_backlight() {
|
||||||
|
this->backlight_value_ = LCD_DISPLAY_BACKLIGHT_OFF;
|
||||||
|
this->write_bytes(this->backlight_value_, nullptr, 0);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace lcd_pcf8574
|
} // namespace lcd_pcf8574
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
@ -11,11 +11,16 @@ class PCF8574LCDDisplay : public lcd_base::LCDDisplay, public i2c::I2CDevice {
|
|||||||
public:
|
public:
|
||||||
void setup() override;
|
void setup() override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
void backlight();
|
||||||
|
void no_backlight();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool is_four_bit_mode() override { return true; }
|
bool is_four_bit_mode() override { return true; }
|
||||||
void write_n_bits(uint8_t value, uint8_t n) override;
|
void write_n_bits(uint8_t value, uint8_t n) override;
|
||||||
void send(uint8_t value, bool rs) override;
|
void send(uint8_t value, bool rs) override;
|
||||||
|
|
||||||
|
// Stores the current state of the backlight.
|
||||||
|
uint8_t backlight_value_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace lcd_pcf8574
|
} // namespace lcd_pcf8574
|
||||||
|
Loading…
x
Reference in New Issue
Block a user