36 explicit MCP23017(uint8_t address = 0x20,
37 TwoWire *wire = &Wire,
40 if (!mcp_.begin(pullUp)) {
41 SUPLA_LOG_ERROR(
"Unable to find MCP23017 at address: 0x%x", address);
43 SUPLA_LOG_DEBUG(
"MCP23017 is connected at address: 0x%x", address);
48 if (mcp_.isConnected()) {
53 void customPinMode(
int channelNumber, uint8_t pin, uint8_t mode)
override {
54 if (mcp_.isConnected()) {
55 mcp_.pinMode1(pin, mode);
59 void customDigitalWrite(
int channelNumber, uint8_t pin,
60 uint8_t val)
override {
61 if (mcp_.isConnected()) {
62 mcp_.write1(pin, val);
65 "[MCP23017] not connected, cannot write to pin %d", pin);
69 int customDigitalRead(
int channelNumber, uint8_t pin)
override {
73 return (gpioState_ >> pin) & 0x01;
76 unsigned int customPulseIn(
int channelNumber, uint8_t pin, uint8_t value,
77 uint64_t timeoutMicro)
override {
81 void customAnalogWrite(
int channelNumber, uint8_t pin,
int val)
override {}
83 int customAnalogRead(
int channelNumber, uint8_t pin)
override {
91 void read16FromMCP() {
92 if (mcp_.isConnected()) {
93 uint16_t data = mcp_.read16();
94 gpioState_ = (data >> 8) | (data << 8);
100 uint16_t gpioState_ = 0;