GY-63_MS5611/libraries/MCP23008/README.md

162 lines
5.8 KiB
Markdown
Raw Normal View History

2022-01-10 06:51:36 -05:00
[![Arduino CI](https://github.com/RobTillaart/MCP23008/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
[![Arduino-lint](https://github.com/RobTillaart/MCP23008/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/MCP23008/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/MCP23008/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/MCP23008/actions/workflows/jsoncheck.yml)
2023-09-23 14:13:03 -04:00
[![GitHub issues](https://img.shields.io/github/issues/RobTillaart/MCP23008.svg)](https://github.com/RobTillaart/MCP23008/issues)
2022-01-10 06:51:36 -05:00
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/MCP23008/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/MCP23008.svg?maxAge=3600)](https://github.com/RobTillaart/MCP23008/releases)
2023-09-23 14:13:03 -04:00
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/MCP23008.svg)](https://registry.platformio.org/libraries/robtillaart/MCP23008)
2022-01-10 06:51:36 -05:00
# MCP23008
Arduino library for MCP23008 8 channel I2C port expander.
## Description
This library gives easy control over the 8 pins of a (I2C) MCP23008 chip.
This IC is strongly related tot the MCP23017 I2C port expander - https://github.com/RobTillaart/MCP23017_RT
Programming Interface is kept the same as much as possible.
2022-09-28 04:44:58 -04:00
Since 0.1.1 the **digitalWrite(pin, value)** is optimized.
If a pin is not changed it will not be written again to save time.
2022-01-10 06:51:36 -05:00
2023-12-24 08:12:39 -05:00
#### 0.3.0 Breaking change
The version 0.3.0 has breaking changes in the interface.
The rationale is that the programming environment of the **Arduino ESP32 S3**
board uses a remapping by means of the include file **io_pin_remap.h**.
This file remaps the pins of several core Arduino functions.
The remapping is implemented by #define macros and these implement "hard" text
replacements without considering context.
The effect is that methods from this class (and several others) which have the same
name as those Arduino core functions will be remapped into something not working.
The following library functions have been renamed:
| old name | new name | notes |
|:-----------------|:-------------|:--------|
| analogRead() | read() |
| analogWrite() | write() |
| pinMode() | pinMode1() |
| digitalRead() | read1() |
| digitalWrite() | write1() |
2023-12-10 08:28:53 -05:00
#### 0.2.0 Breaking change
Version 0.2.0 introduced a breaking change.
You cannot set the pins in **begin()** any more.
This reduces the dependency of processor dependent Wire implementations.
The user has to call **Wire.begin()** and can optionally set the Wire pins
before calling **begin()**.
2023-02-04 08:40:35 -05:00
#### Related
16 bit port expanders
- https://github.com/RobTillaart/MCP23017_RT
- https://github.com/RobTillaart/MCP23S17
- https://github.com/RobTillaart/PCF8575
2023-12-10 08:28:53 -05:00
- https://github.com/RobTillaart/TCA9555
2023-02-04 08:40:35 -05:00
8 bit port expanders
- https://github.com/RobTillaart/MCP23008
- https://github.com/RobTillaart/MCP23S08
- https://github.com/RobTillaart/PCF8574
2022-01-10 06:51:36 -05:00
## Interface
2023-02-04 08:40:35 -05:00
```cpp
#include "MCP23008.h"
```
2022-01-10 06:51:36 -05:00
### Constructor
- **MCP23008(uint8_t address, TwoWire \*wire = &Wire)** constructor, with default Wire interface.
Can be overruled with Wire0..WireN.
2024-03-05 05:26:47 -05:00
- **bool begin(bool pullup = true)** initializes library, returns true if successful.
Default sets the pins to INPUT PULLUP.
Returns false if not connected or a register could not be set.
2022-01-10 06:51:36 -05:00
- **bool isConnected()** returns true if connected, false otherwise.
2023-12-10 08:28:53 -05:00
- **uint8_t getAddress()** returns address set in the constructor.
2022-01-10 06:51:36 -05:00
### Single pin interface
2023-12-24 08:12:39 -05:00
- **bool pinMode1(uint8_t pin, uint8_t mode)** pin = 0..7, mode = INPUT, OUTPUT.
2023-03-16 07:02:41 -04:00
0xFF is all pins are input, 0x1F are 5 inputs and 3 outputs.
Returns true if successful.
2023-12-24 08:12:39 -05:00
- **bool write1(uint8_t pin, uint8_t value)** pin = 0..7, value = LOW(0) HIGH (!0). Returns true if successful.
- **uint8_t read1(uint8_t pin)** pin = 0..7, returns LOW or HIGH, might set the lastError();
2022-09-28 04:44:58 -04:00
- **bool setPolarity(uint8_t pin, bool reversed)** pin = 0..7, set reversed flag. Returns true if successful.
- **bool getPolarity(uint8_t pin, bool &reversed)** pin = 0..7, reads reversed flag. Returns true if successful.
- **bool setPullup(uint8_t pin, bool pullup)** pin = 0..7, set pull-up flag. Returns true if successful.
- **bool getPullup(uint8_t pin, bool &pullup)** pin = 0..7, reads pull-up flag. Returns true if successful.
2022-01-10 06:51:36 -05:00
### 8 pins interface
2022-09-28 04:44:58 -04:00
- **bool pinMode8(uint8_t value)** value = 0..255. Returns true if successful.
- **bool write8(uint8_t value)** value = 0..255. Returns true if successful.
2022-01-10 06:51:36 -05:00
- **uint8_t read8()** reads 8 pins into one byte.
2022-09-28 04:44:58 -04:00
- **bool setPolarity8(uint8_t mask)** sets polarity for 8 channels at once. Returns true if successful.
- **bool getPolarity8(uint8_t &mask)** reads polarity of 8 channels at once. Returns true if successful.
- **bool setPullup8(uint8_t mask)** sets pull-up for 8 channels at once. Returns true if successful.
- **bool getPullup8(uint8_t &mask)** reads pull-up for 8 channels at once. Returns true if successful.
2022-01-10 06:51:36 -05:00
### Error codes
2022-09-28 04:44:58 -04:00
If one of the above functions return false, there might be an error.
2022-01-10 06:51:36 -05:00
- **int lastError()** Above functions set an error flag that can be read with this function.
Reading it will reset the flag to **MCP23008_OK**.
2022-11-17 10:12:58 -05:00
| DESCRIPTION | VALUE |
|:-----------------------|:-------:|
| MCP23008_OK | 0x00 |
| MCP23008_PIN_ERROR | 0x81 |
| MCP23008_I2C_ERROR | 0x82 |
| MCP23008_VALUE_ERROR | 0x83 |
| MCP23008_PORT_ERROR | 0x84 |
2022-01-10 06:51:36 -05:00
## Operation
See examples.
## Future
2023-09-23 14:13:03 -04:00
#### Must
- improve documentation
#### Should
2022-01-10 06:51:36 -05:00
- keep in sync with MCP23017
2023-09-23 14:13:03 -04:00
#### Could
#### Wont
## Support
If you appreciate my libraries, you can support the development and maintenance.
Improve the quality of the libraries by providing issues and Pull Requests, or
donate through PayPal or GitHub sponsors.
Thank you,