Adafruit MCP23017 Library
Adafruit_MCP23XXX.h
Go to the documentation of this file.
1 
5 #ifndef __ADAFRUIT_MCP23XXX_H__
6 #define __ADAFRUIT_MCP23XXX_H__
7 
8 #include <Adafruit_BusIO_Register.h>
9 #include <Adafruit_I2CDevice.h>
10 #include <Adafruit_SPIDevice.h>
11 #include <Arduino.h>
12 
13 // registers
14 #define MCP23XXX_IODIR 0x00
15 #define MCP23XXX_IPOL 0x01
16 #define MCP23XXX_GPINTEN 0x02
17 #define MCP23XXX_DEFVAL \
18  0x03
19 #define MCP23XXX_INTCON 0x04
20 #define MCP23XXX_IOCON 0x05
21 #define MCP23XXX_GPPU 0x06
22 #define MCP23XXX_INTF 0x07
23 #define MCP23XXX_INTCAP 0x08
24 #define MCP23XXX_GPIO 0x09
25 #define MCP23XXX_OLAT 0x0A
26 
27 #define MCP23XXX_ADDR 0x20
28 #define MCP23XXX_SPIREG \
29  ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE
30 
31 #define MCP_PORT(pin) ((pin < 8) ? 0 : 1)
32 
33 #define MCP23XXX_INT_ERR 255
34 
35 /**************************************************************************/
39 /**************************************************************************/
41 public:
42  // init
43  bool begin_I2C(uint8_t i2c_addr = MCP23XXX_ADDR, TwoWire *wire = &Wire);
44  bool begin_SPI(uint8_t cs_pin, SPIClass *theSPI = &SPI,
45  uint8_t _hw_addr = 0x00);
46  bool begin_SPI(int8_t cs_pin, int8_t sck_pin, int8_t miso_pin,
47  int8_t mosi_pin, uint8_t _hw_addr = 0x00);
48 
49  // main Arduino API methods
50  void pinMode(uint8_t pin, uint8_t mode);
51  uint8_t digitalRead(uint8_t pin);
52  void digitalWrite(uint8_t pin, uint8_t value);
53 
54  // bulk access
55  uint8_t readGPIO(uint8_t port = 0);
56  void writeGPIO(uint8_t value, uint8_t port = 0);
57 
58  // interrupts
59  void setupInterrupts(bool mirroring, bool openDrain, uint8_t polarity);
60  void setupInterruptPin(uint8_t pin, uint8_t mode = CHANGE);
61  void disableInterruptPin(uint8_t pin);
62  void clearInterrupts();
63  uint8_t getLastInterruptPin();
64  uint16_t getCapturedInterrupt();
65 
66 protected:
67  Adafruit_I2CDevice *i2c_dev = nullptr;
68  Adafruit_SPIDevice *spi_dev = nullptr;
69  uint8_t pinCount;
70  uint8_t hw_addr;
71  uint16_t getRegister(uint8_t baseAddress, uint8_t port = 0);
72 
73 private:
74  uint8_t buffer[4];
75 };
76 
77 #endif
void digitalWrite(uint8_t pin, uint8_t value)
Write a HIGH or a LOW value to a digital pin.
Definition: Adafruit_MCP23XXX.cpp:116
void writeGPIO(uint8_t value, uint8_t port=0)
Bulk write all pins on a port.
Definition: Adafruit_MCP23XXX.cpp:144
uint16_t getCapturedInterrupt()
Get pin states captured at time of interrupt.
Definition: Adafruit_MCP23XXX.cpp:261
uint8_t pinCount
Total number of GPIO pins.
Definition: Adafruit_MCP23XXX.h:69
void pinMode(uint8_t pin, uint8_t mode)
Configures the specified pin to behave either as an input or an output.
Definition: Adafruit_MCP23XXX.cpp:82
Base class for all MCP23XXX variants.
Definition: Adafruit_MCP23XXX.h:40
Adafruit_SPIDevice * spi_dev
Pointer to SPI bus interface.
Definition: Adafruit_MCP23XXX.h:68
void disableInterruptPin(uint8_t pin)
Disable interrupt for given pin.
Definition: Adafruit_MCP23XXX.cpp:200
void setupInterrupts(bool mirroring, bool openDrain, uint8_t polarity)
Configure the interrupt system.
Definition: Adafruit_MCP23XXX.cpp:158
uint8_t getLastInterruptPin()
Gets the pin that caused the latest interrupt, from INTF, without clearing any interrupt flags...
Definition: Adafruit_MCP23XXX.cpp:227
bool begin_SPI(uint8_t cs_pin, SPIClass *theSPI=&SPI, uint8_t _hw_addr=0x00)
Initialize MCP using hardware SPI.
Definition: Adafruit_MCP23XXX.cpp:47
uint8_t digitalRead(uint8_t pin)
Reads the value from a specified digital pin, either HIGH or LOW.
Definition: Adafruit_MCP23XXX.cpp:101
uint8_t readGPIO(uint8_t port=0)
Bulk read all pins on a port.
Definition: Adafruit_MCP23XXX.cpp:131
void setupInterruptPin(uint8_t pin, uint8_t mode=CHANGE)
Enable interrupt and set mode for given pin.
Definition: Adafruit_MCP23XXX.cpp:178
void clearInterrupts()
Clear interrupts. NOTE:If using DEFVAL, INT clears only if interrupt condition does not exist...
Definition: Adafruit_MCP23XXX.cpp:214
#define MCP23XXX_ADDR
Default I2C Address.
Definition: Adafruit_MCP23XXX.h:27
uint16_t getRegister(uint8_t baseAddress, uint8_t port=0)
helper to get register address
Definition: Adafruit_MCP23XXX.cpp:290
bool begin_I2C(uint8_t i2c_addr=MCP23XXX_ADDR, TwoWire *wire=&Wire)
Initialize MCP using I2C.
Definition: Adafruit_MCP23XXX.cpp:33
uint8_t hw_addr
HW address matching A2/A1/A0 pins.
Definition: Adafruit_MCP23XXX.h:70
Adafruit_I2CDevice * i2c_dev
Pointer to I2C bus interface.
Definition: Adafruit_MCP23XXX.h:67