86 #ifndef ERRIEZ_MCP23017_H_ 87 #define ERRIEZ_MCP23017_H_ 93 #define MCP23017_I2C_ADDRESS 0x20 96 #define MCP23017_REG_IODIR 0x00 97 #define MCP23017_REG_IPOL 0x02 98 #define MCP23017_REG_GPINTEN 0x04 99 #define MCP23017_REG_DEFVAL 0x06 100 #define MCP23017_REG_INTCON 0x08 101 #define MCP23017_REG_IOCON 0x0A 102 #define MCP23017_REG_GPPU 0x0C 103 #define MCP23017_REG_INTF 0x0E 104 #define MCP23017_REG_INTCAP 0x10 105 #define MCP23017_REG_GPIO 0x12 106 #define MCP23017_REG_OLAT 0x14 108 #define MCP23017_NUM_REGS 0x16 109 #define MCP23017_NUM_PINS 16 112 #define MCP23017_MASK_ALL_PINS 0xFFFF 113 #define MCP23017_MASK_REG_A 0x1E 117 #define IOCON_MIRROR 6 118 #define IOCON_SEQOP 5 119 #define IOCON_DISSLW 4 121 #define IOCON_INTPOL 1 123 #define REG_IOCON_VALUE \ 126 (1<<IOCON_MIRROR) | \ 128 (0<<IOCON_DISSLW) | \ 139 TwoWire *twoWire = &Wire);
142 bool begin(
bool reset=
true);
145 void pinMode(uint8_t pin, uint8_t mode);
158 void pinWrite(uint8_t pin,
bool level);
165 void portMask(uint16_t maskSet, uint16_t maskClear);
211 uint16_t _gpioPullup;
212 uint16_t _portStateLast;
215 #endif // ERRIEZ_MCP23017_H_ bool pinRead(uint8_t pin)
Read state of a single pin (input and output pins)
void digitalWrite(uint8_t pin, uint8_t level)
Set state of a single pin.
void portMask(uint16_t maskSet, uint16_t maskClear)
Clear and set pin states.
void setPortDirection(uint16_t outputPins)
Set PORT direction all pins.
void pinMode(uint8_t pin, uint8_t mode)
Set direction of a single pin.
uint16_t portState
Port state since last portRead() call.
uint16_t pinsChanged
Pins change on interrupt enabled pins since last intPinChanged() call.
void pinToggle(uint8_t pin)
Toggle state of a single pin (only for output pins)
void dumpRegisters(HardwareSerial *serial)
Print I2C registers on serial port.
uint16_t getPortInterruptMask()
Get interrupt mask all pins.
void setInterruptPolarityINTA(bool activeHigh)
Set interrupt polarity INTA.
void registerWrite(uint8_t reg, uint16_t value)
MCP23017 I2C write register.
void portWrite(uint16_t value)
Set all pin states.
#define MCP23017_I2C_ADDRESS
Default MCP23017 I2C address.
uint16_t portRead()
Read PORT of all pins (input and output pins)
void setPortPullup(uint16_t pullupPins)
Set PORT pullup all pins.
uint16_t pinsFalling
Falling edge on interrupt enabled pins since last intPinChanged() call.
void pinWrite(uint8_t pin, bool level)
Set pin state.
bool begin(bool reset=true)
Initialize MCP23017.
uint16_t pinsRising
Rising edge on interrupt eanbled pins since last intPinChanged() call.
uint16_t getPortPullup()
Get PORT pullup all pins.
uint16_t registerRead(uint8_t reg)
MCP23017 I2C read register.
bool interruptINTA()
MCP23017 INTA pin changed.
void setPortInterruptDisable(uint16_t pins)
Disable interrupt on pins.
void setPortInterruptEnable(uint16_t pins)
Enable interrupt change on pins.
void portToggle(uint16_t value)
Toggle pin states (output pins only)
uint8_t getI2CStatus()
Return status of the last I2C write, returned by Wire endTransfer()
int digitalRead(uint8_t pin)
Get state of a single pin.
ErriezMCP23017(uint8_t i2cAddress=MCP23017_I2C_ADDRESS, TwoWire *twoWire=&Wire)
ErriezMCP23017 Constructor.
uint16_t getPortDirection()
Get PORT direction all pins.
Erriez MCP23017 I2C IO-Expander class.