ESPHome 2026.5.0b1
Loading...
Searching...
No Matches
ttp229_bsf.h
Go to the documentation of this file.
1#pragma once
2
4#include "esphome/core/hal.h"
6
7#include <vector>
8
9namespace esphome::ttp229_bsf {
10
12 public:
13 void set_channel(uint8_t channel) { channel_ = channel; }
14 void process(uint16_t data) { this->publish_state(data & (1 << this->channel_)); }
15
16 protected:
17 uint8_t channel_;
18};
19
21 public:
22 void set_sdo_pin(GPIOPin *sdo_pin) { sdo_pin_ = sdo_pin; }
23 void set_scl_pin(GPIOPin *scl_pin) { scl_pin_ = scl_pin; }
24 void register_channel(TTP229BSFChannel *channel) { this->channels_.push_back(channel); }
25 void setup() override;
26 void dump_config() override;
27 void loop() override {
28 // check datavalid if sdo is high
29 if (!this->sdo_pin_->digital_read()) {
30 return;
31 }
32 uint16_t touched = 0;
33 for (uint8_t i = 0; i < 16; i++) {
34 this->scl_pin_->digital_write(false);
35 delayMicroseconds(2); // 500KHz
36 bool bitval = !this->sdo_pin_->digital_read();
37 this->scl_pin_->digital_write(true);
38 delayMicroseconds(2); // 500KHz
39
40 touched |= uint16_t(bitval) << i;
41 }
42 for (auto *channel : this->channels_) {
43 channel->process(touched);
44 }
45 }
46
47 protected:
50 std::vector<TTP229BSFChannel *> channels_{};
51};
52
53} // namespace esphome::ttp229_bsf
virtual void digital_write(bool value)=0
virtual bool digital_read()=0
Base class for all binary_sensor-type classes.
void publish_state(bool new_state)
Publish a new state to the front-end.
void set_channel(uint8_t channel)
Definition ttp229_bsf.h:13
void set_sdo_pin(GPIOPin *sdo_pin)
Definition ttp229_bsf.h:22
void set_scl_pin(GPIOPin *scl_pin)
Definition ttp229_bsf.h:23
void register_channel(TTP229BSFChannel *channel)
Definition ttp229_bsf.h:24
std::vector< TTP229BSFChannel * > channels_
Definition ttp229_bsf.h:50
void IRAM_ATTR HOT delayMicroseconds(uint32_t us)
Definition hal.cpp:48