1
0
mirror of https://github.com/esphome/esphome.git synced 2025-10-06 20:03:46 +01:00

[mpr121] remove delay (#10963)

Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
This commit is contained in:
mrtoy-me
2025-10-03 23:06:16 +10:00
committed by GitHub
parent ba0532cda7
commit 89c3340ef6
2 changed files with 39 additions and 38 deletions

View File

@@ -13,45 +13,46 @@ static const char *const TAG = "mpr121";
void MPR121Component::setup() { void MPR121Component::setup() {
// soft reset device // soft reset device
this->write_byte(MPR121_SOFTRESET, 0x63); this->write_byte(MPR121_SOFTRESET, 0x63);
delay(100); // NOLINT this->set_timeout(100, [this]() {
if (!this->write_byte(MPR121_ECR, 0x0)) { if (!this->write_byte(MPR121_ECR, 0x0)) {
this->error_code_ = COMMUNICATION_FAILED; this->error_code_ = COMMUNICATION_FAILED;
this->mark_failed(); this->mark_failed();
return; return;
} }
// set touch sensitivity for all 12 channels
for (auto *channel : this->channels_) {
channel->setup();
}
this->write_byte(MPR121_MHDR, 0x01);
this->write_byte(MPR121_NHDR, 0x01);
this->write_byte(MPR121_NCLR, 0x0E);
this->write_byte(MPR121_FDLR, 0x00);
// set touch sensitivity for all 12 channels this->write_byte(MPR121_MHDF, 0x01);
for (auto *channel : this->channels_) { this->write_byte(MPR121_NHDF, 0x05);
channel->setup(); this->write_byte(MPR121_NCLF, 0x01);
} this->write_byte(MPR121_FDLF, 0x00);
this->write_byte(MPR121_MHDR, 0x01);
this->write_byte(MPR121_NHDR, 0x01);
this->write_byte(MPR121_NCLR, 0x0E);
this->write_byte(MPR121_FDLR, 0x00);
this->write_byte(MPR121_MHDF, 0x01); this->write_byte(MPR121_NHDT, 0x00);
this->write_byte(MPR121_NHDF, 0x05); this->write_byte(MPR121_NCLT, 0x00);
this->write_byte(MPR121_NCLF, 0x01); this->write_byte(MPR121_FDLT, 0x00);
this->write_byte(MPR121_FDLF, 0x00);
this->write_byte(MPR121_NHDT, 0x00); this->write_byte(MPR121_DEBOUNCE, 0);
this->write_byte(MPR121_NCLT, 0x00); // default, 16uA charge current
this->write_byte(MPR121_FDLT, 0x00); this->write_byte(MPR121_CONFIG1, 0x10);
// 0.5uS encoding, 1ms period
this->write_byte(MPR121_CONFIG2, 0x20);
this->write_byte(MPR121_DEBOUNCE, 0); // Write the Electrode Configuration Register
// default, 16uA charge current // * Highest 2 bits is "Calibration Lock", which we set to a value corresponding to 5 bits.
this->write_byte(MPR121_CONFIG1, 0x10); // * The 2 bits below is "Proximity Enable" and are left at 0.
// 0.5uS encoding, 1ms period // * The 4 least significant bits control how many electrodes are enabled. Electrodes are enabled
this->write_byte(MPR121_CONFIG2, 0x20); // as a range, starting at 0 up to the highest channel index used.
this->write_byte(MPR121_ECR, 0x80 | (this->max_touch_channel_ + 1));
// Write the Electrode Configuration Register this->flush_gpio_();
// * Highest 2 bits is "Calibration Lock", which we set to a value corresponding to 5 bits. this->setup_complete_ = true;
// * The 2 bits below is "Proximity Enable" and are left at 0. });
// * The 4 least significant bits control how many electrodes are enabled. Electrodes are enabled
// as a range, starting at 0 up to the highest channel index used.
this->write_byte(MPR121_ECR, 0x80 | (this->max_touch_channel_ + 1));
this->flush_gpio_();
} }
void MPR121Component::set_touch_debounce(uint8_t debounce) { void MPR121Component::set_touch_debounce(uint8_t debounce) {
@@ -73,15 +74,15 @@ void MPR121Component::dump_config() {
case COMMUNICATION_FAILED: case COMMUNICATION_FAILED:
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL); ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
break; break;
case WRONG_CHIP_STATE:
ESP_LOGE(TAG, "MPR121 has wrong default value for CONFIG2?");
break;
case NONE: case NONE:
default: default:
break; break;
} }
} }
void MPR121Component::loop() { void MPR121Component::loop() {
if (!this->setup_complete_)
return;
uint16_t val = 0; uint16_t val = 0;
this->read_byte_16(MPR121_TOUCHSTATUS_L, &val); this->read_byte_16(MPR121_TOUCHSTATUS_L, &val);

View File

@@ -80,6 +80,7 @@ class MPR121Component : public Component, public i2c::I2CDevice {
void pin_mode(uint8_t ionum, gpio::Flags flags); void pin_mode(uint8_t ionum, gpio::Flags flags);
protected: protected:
bool setup_complete_{false};
std::vector<MPR121Channel *> channels_{}; std::vector<MPR121Channel *> channels_{};
uint8_t debounce_{0}; uint8_t debounce_{0};
uint8_t touch_threshold_{}; uint8_t touch_threshold_{};
@@ -88,7 +89,6 @@ class MPR121Component : public Component, public i2c::I2CDevice {
enum ErrorCode { enum ErrorCode {
NONE = 0, NONE = 0,
COMMUNICATION_FAILED, COMMUNICATION_FAILED,
WRONG_CHIP_STATE,
} error_code_{NONE}; } error_code_{NONE};
bool flush_gpio_(); bool flush_gpio_();