GY-63_MS5611/libraries/PCF8574
2021-05-28 13:17:38 +02:00
..
.github/workflows add arduino-lint 2021-05-28 13:17:38 +02:00
docs 2021-01-29 2021-01-29 12:31:58 +01:00
examples add rotaryEncoder example 2021-05-16 13:13:01 +02:00
test 2021-01-29 2021-01-29 12:31:58 +01:00
.arduino-ci.yml 2021-01-29 2021-01-29 12:31:58 +01:00
keywords.txt 2021-01-29 2021-01-29 12:31:58 +01:00
library.json update libs 2021-04-25 19:56:44 +02:00
library.properties update libs 2021-04-25 19:56:44 +02:00
LICENSE 2021-01-29 2021-01-29 12:31:58 +01:00
PCF8574.cpp update libs 2021-04-25 19:56:44 +02:00
PCF8574.h update libs 2021-04-25 19:56:44 +02:00
README.md 2021-01-29 2021-01-29 12:31:58 +01:00

Arduino CI License: MIT GitHub release

PCF8574

Arduino library for PCF8574 - 8 channel I2C IO expander

Description

Related to the PCF8575 16 channel IO expander library https://github.com/RobTillaart/PCF8575

This library gives easy control over the 8 pins of a PCF8574 and PCF8574A chip. These chips are identical in behavior although there are two distinct address ranges.

TYPE ADDRESS-RANGE notes
PCF8574 0x20 to 0x27 same range as PCF8575 !!
PCF8574A 0x38 to 0x3F

So you can connect up to 16 PCF8574 on one I2C bus, giving access to 16 x 8 = 128 IO lines. To maximize IO lines combine 8 x PCF8575 + 8 x PCF8574A giving 128 + 64 = 192 IO lines. Be sure to have a well dimensioned power supply.

The library allows to read and write both single pins or 8 pins at once. Furthermore some additional functions are implemented that are playfull but useful.

Interface

PCF8574_INITIAL_VALUE is a define that can be set compile time or before the include of "pcf8574.h" to overrule the default value used with the begin() call.

Constructor

  • PCF8574(deviceAddress, TwoWire *wire = &Wire) Constructor with device address, and optional the Wire interface as parameter.
  • begin(val = PCF8574_INITIAL_VALUE) set the initial value for the pins and masks.
  • begin(sda, scl, val = PCF8574_INITIAL_VALUE) idem, for the ESP32 where one can choose the I2C pins What needs to be added in the future is a parameter to choose another Wire interface as some processors have multiple hardware Wire interfaces.
  • isConnected() checks if the address is visable on the I2C bus

Read and Write

  • read8() reads all 8 pins at once. This one does the actual reading.
  • read(pin) reads a single pin; pin = 0..7
  • value() returns the last read inputs again, as this information is buffered in the class this is faster than reread the pins.
  • write8(value) writes all 8 pins at once. This one does the actual reading.
  • write(pin, value) writes a single pin; pin = 0..7; value is HIGH(1) or LOW (0)
  • valueOut() returns the last written data.

Button

  • setButtonMask(mask)
  • readButton8()
  • readButton8(mask)
  • readButton(pin)

Special

  • toggle(pin) toggles a single pin
  • toggleMask(mask) toggles a selection of pins, if you want to invert all pins use 0xFF (default value).
  • shiftRight(n = 1) shifts output channels n pins (default 1) pins right (e.g. leds ). Fills the higher lines with zero's.
  • shiftLeft(n = 1) shifts output channels n pins (default 1) pins left (e.g. leds ). Fills the lower lines with zero's.
  • rotateRight(n = 1) rotates output channels to right, moving lowest line to highest line.
  • rotateLeft(n = 1) rotates output channels to left, moving highest line to lowest line.
  • reverse() revers the "bit pattern" of the lines, high to low and vice versa.

Misc

  • lastError() returns the last error from the lib. (see .h file)

Error codes

name value description
PCF8574_OK 0x00 no error
PCF8574_PIN_ERROR 0x81 pin number out of range
PCF8574_I2C_ERROR 0x82 I2C communication error

Operation

See examples