1
0
mirror of https://github.com/esphome/esphome.git synced 2025-04-15 23:30:28 +01:00
esphome/esphome/components/mcp4461/output/mcp4461_output.cpp
Oliver Kleinecke a6b7fd5a69
Update mcp4461_output.cpp
Add verbose logging to increase/decrease
2025-02-16 14:53:02 +01:00

58 lines
1.8 KiB
C++

#include "mcp4461_output.h"
#include <cmath>
#include "esphome/core/helpers.h"
#include "esphome/core/log.h"
namespace esphome {
namespace mcp4461 {
static const char *const TAG = "mcp4461.output";
// floats from other components (like light etc.) are passed as "percentage floats"
// this function converts them to the 0 - 256 range used by the MCP4461
void Mcp4461Wiper::write_state(float state) {
if (this->parent_->set_wiper_level_(this->wiper_, static_cast<uint16_t>(std::roundf(state * 256)))) {
this->state_ = state;
}
}
float Mcp4461Wiper::read_state() {
return (static_cast<float>(this->parent_->get_wiper_level_(this->wiper_)) / 256.0);
}
float Mcp4461Wiper::update_state() {
this->state_ = this->read_state();
return this->state_;
}
void Mcp4461Wiper::set_state(bool state) {
if (state) { this->turn_on(); }
else { this->turn_off(); }
}
void Mcp4461Wiper::turn_on() { this->parent_->enable_wiper_(this->wiper_); }
void Mcp4461Wiper::turn_off() { this->parent_->disable_wiper_(this->wiper_); }
void Mcp4461Wiper::increase_wiper() {
if (this->parent_->increase_wiper_(this->wiper_)) {
this->state_ = this->update_state();
ESP_LOGV(TAG, "Increased wiper %d to %" PRIu16 "", this->wiper_, static_cast<uint16_t>(this->state_ * 256));
}
}
void Mcp4461Wiper::decrease_wiper() {
if (this->parent_->decrease_wiper_(this->wiper_)) {
this->state_ = this->update_state();
ESP_LOGV(TAG, "Decreased wiper %d to %" PRIu16 "", this->wiper_, static_cast<uint16_t>(this->state_ * 256));
}
}
void Mcp4461Wiper::enable_terminal(char terminal) { this->parent_->enable_terminal_(this->wiper_, terminal); }
void Mcp4461Wiper::disable_terminal(char terminal) { this->parent_->disable_terminal_(this->wiper_, terminal); }
} // namespace mcp4461
} // namespace esphome