diff --git a/esphome/components/mcp4461/output/mcp4461_output.cpp b/esphome/components/mcp4461/output/mcp4461_output.cpp index 4bb74a3f93..4b314e2bd7 100644 --- a/esphome/components/mcp4461/output/mcp4461_output.cpp +++ b/esphome/components/mcp4461/output/mcp4461_output.cpp @@ -12,6 +12,13 @@ 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 (!std::isfinite(state)) { + return; + } + state = clamp(state, 0.0f, 1.0f); + if (this->is_inverted()) { + state = 1.0f - state; + } if (this->parent_->set_wiper_level_(this->wiper_, static_cast(std::roundf(state * 256)))) { this->state_ = state; }