17template <
class WireType>
39 pin_t interruptPin = NO_PIN);
64 constexpr static uint8_t I2C_BASE_ADDRESS = 0x20;
71 bool pinModesDirty =
true;
73 bool pullupsDirty =
true;
75 bool outputsDirty =
true;
95 template <
class...
Args>
101#include "MCP23017.ipp"
#define BEGIN_AH_NAMESPACE
AH::function_traits< decltype(::digitalWrite)>::argument_t< 1 > PinStatus_t
AH::function_traits< decltype(::pinMode)>::argument_t< 1 > PinMode_t
Class for MCP23017 I²C I/O expanders.
MCP23017(WireType &wire, uint8_t addressOffset=0, pin_t interruptPin=NO_PIN)
Constructor.
void updateBufferedPinModes()
Send the new pin modes to the chip after calling pinModeBuffered.
pin_t pinB(pin_int_t p)
Get the identifier of the given pin in register B.
void updateBufferedOutputs() override
Write the internal state to the physical outputs.
BitArray< 16 > bufferedPullups
pin_t pinA(pin_int_t p)
Get the identifier of the given pin in register A.
PinStatus_t digitalReadBuffered(pin_int_t pin) override
Read the state of the given pin from the software buffer.
void digitalWriteBuffered(pin_int_t pin, PinStatus_t status) override
Set the output of a given pin in the software buffer.
BitArray< 16 > bufferedInputs
void updateBufferedInputs() override
Read the physical state into the input buffers.
void begin() override
Initialize the extended IO element.
BitArray< 16 > bufferedOutputs
void analogWriteBuffered(pin_int_t, analog_t) override
Write an analog (or PWM) value to the software buffer given pin.
bool hasInputs() const
Check if any of the pins are configured as inputs.
void writeI2C(uint8_t addr, Args... values)
Write any data to the MCP23017.
BitArray< 16 > bufferedPinModes
analog_t analogReadBuffered(pin_int_t pin) override
Read the analog value of the given pin from the software buffer.
void pinModeBuffered(pin_int_t pin, PinMode_t mode) override
Set the mode of a given pin in the software buffer.
void writeI2C(const uint8_t(&values)[N])
Write any data to the MCP23017.
A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bu...
A class for ExtendedIOElements with a fixed size.
uint16_t analog_t
The type returned from analogRead and similar functions.
uint_fast16_t pin_int_t
Integer type used internally to store the index of (extended) GPIO pins.
Type for storing pin numbers of Extended Input/Output elements.