diff --git a/esphome/components/esp32_touch/esp32_touch.cpp b/esphome/components/esp32_touch/esp32_touch.cpp index e85d0ef5c2..56bc407e84 100644 --- a/esphome/components/esp32_touch/esp32_touch.cpp +++ b/esphome/components/esp32_touch/esp32_touch.cpp @@ -116,6 +116,7 @@ void ESP32TouchComponent::loop() { touch_pad_read(child->get_touch_pad(), &value); } + child->value_ = value; child->publish_state(value < child->get_threshold()); if (this->setup_mode_) { @@ -128,23 +129,7 @@ void ESP32TouchComponent::loop() { delay(250); } } -void ESP32TouchComponent::register_touch_pad(ESP32TouchBinarySensor *pad) { this->children_.push_back(pad); } -void ESP32TouchComponent::set_setup_mode(bool setup_mode) { this->setup_mode_ = setup_mode; } -bool ESP32TouchComponent::iir_filter_enabled_() const { return this->iir_filter_ > 0; } -void ESP32TouchComponent::set_iir_filter(uint32_t iir_filter) { this->iir_filter_ = iir_filter; } -float ESP32TouchComponent::get_setup_priority() const { return setup_priority::DATA; } -void ESP32TouchComponent::set_sleep_duration(uint16_t sleep_duration) { this->sleep_cycle_ = sleep_duration; } -void ESP32TouchComponent::set_measurement_duration(uint16_t meas_cycle) { this->meas_cycle_ = meas_cycle; } -void ESP32TouchComponent::set_low_voltage_reference(touch_low_volt_t low_voltage_reference) { - this->low_voltage_reference_ = low_voltage_reference; -} -void ESP32TouchComponent::set_high_voltage_reference(touch_high_volt_t high_voltage_reference) { - this->high_voltage_reference_ = high_voltage_reference; -} -void ESP32TouchComponent::set_voltage_attenuation(touch_volt_atten_t voltage_attenuation) { - this->voltage_attenuation_ = voltage_attenuation; -} void ESP32TouchComponent::on_shutdown() { if (this->iir_filter_enabled_()) { touch_pad_filter_stop(); @@ -155,8 +140,6 @@ void ESP32TouchComponent::on_shutdown() { ESP32TouchBinarySensor::ESP32TouchBinarySensor(const std::string &name, touch_pad_t touch_pad, uint16_t threshold) : BinarySensor(name), touch_pad_(touch_pad), threshold_(threshold) {} -touch_pad_t ESP32TouchBinarySensor::get_touch_pad() const { return this->touch_pad_; } -uint16_t ESP32TouchBinarySensor::get_threshold() const { return this->threshold_; } } // namespace esp32_touch } // namespace esphome diff --git a/esphome/components/esp32_touch/esp32_touch.h b/esphome/components/esp32_touch/esp32_touch.h index b68876c33e..7adee23971 100644 --- a/esphome/components/esp32_touch/esp32_touch.h +++ b/esphome/components/esp32_touch/esp32_touch.h @@ -12,32 +12,36 @@ class ESP32TouchBinarySensor; class ESP32TouchComponent : public Component { public: - void register_touch_pad(ESP32TouchBinarySensor *pad); + void register_touch_pad(ESP32TouchBinarySensor *pad) { children_.push_back(pad); } - void set_setup_mode(bool setup_mode); + void set_setup_mode(bool setup_mode) { setup_mode_ = setup_mode; } - void set_iir_filter(uint32_t iir_filter); + void set_iir_filter(uint32_t iir_filter) { iir_filter_ = iir_filter; } - void set_sleep_duration(uint16_t sleep_duration); + void set_sleep_duration(uint16_t sleep_duration) { sleep_cycle_ = sleep_duration; } - void set_measurement_duration(uint16_t meas_cycle); + void set_measurement_duration(uint16_t meas_cycle) { meas_cycle_ = meas_cycle; } - void set_low_voltage_reference(touch_low_volt_t low_voltage_reference); + void set_low_voltage_reference(touch_low_volt_t low_voltage_reference) { + low_voltage_reference_ = low_voltage_reference; + } - void set_high_voltage_reference(touch_high_volt_t high_voltage_reference); + void set_high_voltage_reference(touch_high_volt_t high_voltage_reference) { + high_voltage_reference_ = high_voltage_reference; + } - void set_voltage_attenuation(touch_volt_atten_t voltage_attenuation); + void set_voltage_attenuation(touch_volt_atten_t voltage_attenuation) { voltage_attenuation_ = voltage_attenuation; } void setup() override; void dump_config() override; void loop() override; - float get_setup_priority() const override; + float get_setup_priority() const override { return setup_priority::DATA; } void on_shutdown() override; protected: /// Is the IIR filter enabled? - bool iir_filter_enabled_() const; + bool iir_filter_enabled_() const { return iir_filter_ > 0; } uint16_t sleep_cycle_{}; uint16_t meas_cycle_{65535}; @@ -54,14 +58,17 @@ class ESP32TouchBinarySensor : public binary_sensor::BinarySensor { public: ESP32TouchBinarySensor(const std::string &name, touch_pad_t touch_pad, uint16_t threshold); - touch_pad_t get_touch_pad() const; - uint16_t get_threshold() const; + touch_pad_t get_touch_pad() const { return touch_pad_; } + uint16_t get_threshold() const { return threshold_; } + void set_threshold(uint16_t threshold) { threshold_ = threshold; } + uint16_t get_value() const { return value_; } protected: friend ESP32TouchComponent; touch_pad_t touch_pad_; uint16_t threshold_; + uint16_t value_; }; } // namespace esp32_touch diff --git a/tests/test1.yaml b/tests/test1.yaml index 37fc8fe0e7..62773b68c8 100644 --- a/tests/test1.yaml +++ b/tests/test1.yaml @@ -647,6 +647,7 @@ binary_sensor: name: "ESP32 Touch Pad GPIO27" pin: GPIO27 threshold: 1000 + id: btn_left - platform: nextion page_id: 0 component_id: 2 @@ -1154,6 +1155,16 @@ interval: if (true) return id(page1); else return id(page2); - display.page.show_next: display1 - display.page.show_previous: display1 + - interval: 2s + then: + - lambda: |- + static uint16_t btn_left_state = id(btn_left)->get_value(); + + ESP_LOGD("adaptive touch", "___ Touch Pad '%s' (T%u): val: %u state: %u tres:%u", id(btn_left)->get_name().c_str(), id(btn_left)->get_touch_pad(), id(btn_left)->get_value(), btn_left_state, id(btn_left)->get_threshold()); + + btn_left_state = ((uint32_t) id(btn_left)->get_value() + 63 * (uint32_t)btn_left_state) >> 6; + + id(btn_left)->set_threshold(btn_left_state * 0.9); display: - platform: lcd_gpio