ESPHome  2022.8.0
mcp4725.cpp
Go to the documentation of this file.
1 #include "mcp4725.h"
2 #include "esphome/core/log.h"
3 
4 namespace esphome {
5 namespace mcp4725 {
6 
7 static const char *const TAG = "mcp4725";
8 
9 void MCP4725::setup() {
10  ESP_LOGCONFIG(TAG, "Setting up MCP4725 (0x%02X)...", this->address_);
11  auto err = this->write(nullptr, 0);
12  if (err != i2c::ERROR_OK) {
13  this->error_code_ = COMMUNICATION_FAILED;
14  this->mark_failed();
15  return;
16  }
17 }
18 
20  LOG_I2C_DEVICE(this);
21 
22  if (this->error_code_ == COMMUNICATION_FAILED) {
23  ESP_LOGE(TAG, "Communication with MCP4725 failed!");
24  }
25 }
26 
27 // https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog-converter-hookup-guide?_ga=2.176055202.1402343014.1607953301-893095255.1606753886
29  const uint16_t value = (uint16_t) round(state * (pow(2, MCP4725_RES) - 1));
30 
31  this->write_byte_16(64, value << 4);
32 }
33 
34 } // namespace mcp4725
35 } // namespace esphome
void setup() override
Definition: mcp4725.cpp:9
void write_state(float state) override
Definition: mcp4725.cpp:28
ErrorCode write(const uint8_t *data, uint8_t len, bool stop=true)
Definition: i2c.h:56
uint8_t address_
Definition: i2c.h:130
virtual void mark_failed()
Mark this component as failed.
Definition: component.cpp:111
Definition: a4988.cpp:4
bool write_byte_16(uint8_t a_register, uint16_t data)
Definition: i2c.h:127
void dump_config() override
Definition: mcp4725.cpp:19
bool state
Definition: fan.h:34