Control Surface main
MIDI Control Surface library for Arduino
Loading...
Searching...
No Matches
MCP23017.hpp
Go to the documentation of this file.
1#pragma once
2
6
8
17template <class WireType>
19 public:
39 pin_t interruptPin = NO_PIN);
40
41 void pinModeBuffered(pin_int_t pin, PinMode_t mode) override;
46
47 void begin() override;
48
49 void updateBufferedOutputs() override;
50 void updateBufferedInputs() override;
53
57 pin_t pinA(pin_int_t p) { return pin(p); }
61 pin_t pinB(pin_int_t p) { return pin(p + 8); }
62
63 private:
64 constexpr static uint8_t I2C_BASE_ADDRESS = 0x20;
65
69
70 private:
71 bool pinModesDirty = true;
73 bool pullupsDirty = true;
75 bool outputsDirty = true;
78
79 private:
81 bool hasInputs() const;
82
84 template <size_t N>
85 void writeI2C(const uint8_t (&values)[N]);
86
95 template <class... Args>
96 void writeI2C(uint8_t addr, Args... values);
97};
98
100
101#include "MCP23017.ipp"
#define END_AH_NAMESPACE
#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.
Definition MCP23017.hpp:18
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.
Definition MCP23017.hpp:61
void updateBufferedOutputs() override
Write the internal state to the physical outputs.
BitArray< 16 > bufferedPullups
Definition MCP23017.hpp:74
pin_t pinA(pin_int_t p)
Get the identifier of the given pin in register A.
Definition MCP23017.hpp:57
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.
pin_t interruptPin
Definition MCP23017.hpp:68
BitArray< 16 > bufferedInputs
Definition MCP23017.hpp:77
void updateBufferedInputs() override
Read the physical state into the input buffers.
void begin() override
Initialize the extended IO element.
WireType * wire
Definition MCP23017.hpp:66
BitArray< 16 > bufferedOutputs
Definition MCP23017.hpp:76
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
Definition MCP23017.hpp:72
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.
uint8_t address
Definition MCP23017.hpp:67
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.