Merge pull request #31 from thijstriemstra/patch-1

improve readme
This commit is contained in:
Renzo Mischianti 2020-11-18 22:34:10 +01:00 committed by GitHub
commit 0986f915f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,30 +9,30 @@
align="right"></a> align="right"></a>
</div> </div>
### Additional information and document update here on my site: [pcf8574 Article](https://www.mischianti.org/2019/01/02/pcf8574-i2c-digital-i-o-expander-fast-easy-usage/). ### Additional information and documentation on my site: [pcf8574 Article](https://www.mischianti.org/2019/01/02/pcf8574-i2c-digital-i-o-expander-fast-easy-usage/).
### If you need more pins [here](https://www.mischianti.org/2019/07/22/pcf8575-i2c-16-bit-digital-i-o-expander/) you can find pcf8575 16bit version of the IC. ### If you need more pins [here](https://www.mischianti.org/2019/07/22/pcf8575-i2c-16-bit-digital-i-o-expander/) you can find the pcf8575 16bit version of the IC.
### Version 2.2 ### Version 2.2
Library to use i2c analog IC with arduino and esp8266. Can read and write digital value with only 2 wire (perfect for ESP-01). Library to use I2C analog IC with arduino and esp8266. Can read and write digital value with only 2 wires (perfect for ESP-01).
Tutorial: Tutorial:
To download. click the DOWNLOADS button in the top right corner, rename the uncompressed folder PCF8574. Check that the PCF8574 folder contains `PCF8574\\.cpp` and `PCF8574.h`. Place the DHT library folder your `<arduinosketchfolder>/libraries/` folder. You may need to create the libraries subfolder if its your first library. Restart the IDE. To download. click the DOWNLOADS button in the top right corner, rename the uncompressed folder PCF8574. Check that the PCF8574 folder contains `PCF8574\\.cpp` and `PCF8574.h`. Place the DHT library folder your `<arduinosketchfolder>/libraries/` folder. You may need to create the libraries subfolder if its your first library. Restart the IDE.
# Reef complete PCF8574 PCF8574AP digital input and output expander with i2c bus. # Reef complete PCF8574 PCF8574AP digital input and output expander with i2c bus.
I try to simplify the use of this IC, with a minimal set of operation. I try to simplify the use of this IC, with a minimal set of operations.
PCF8574P address map 0x20-0x27 PCF8574P address map 0x20-0x27
PCF8574AP address map 0x38-0x3f PCF8574AP address map 0x38-0x3f
Constructor: **Constructor:**
you must pas the address of i2c (to check the adress use this guide [I2cScanner](https://playground.arduino.cc/Main/I2cScanner)) Pass the address of I2C (to check the address use this guide [I2cScanner](https://playground.arduino.cc/Main/I2cScanner))
```cpp ```cpp
PCF8574(uint8_t address); PCF8574(uint8_t address);
``` ```
for esp8266 if you want specify SDA e SCL pin use this: For ESP8266 if you want to specify SDA and SCL pins use this:
```cpp ```cpp
PCF8574(uint8_t address, uint8_t sda, uint8_t scl); PCF8574(uint8_t address, uint8_t sda, uint8_t scl);
@ -44,11 +44,11 @@ You must set input/output mode:
pcf8574.pinMode(P2, INPUT); pcf8574.pinMode(P2, INPUT);
``` ```
then IC as you can see in the image have 8 digital input/output: then IC as you can see in the image has 8 digital input/output ports:
![PCF8574 schema](https://github.com/xreef/PCF8574_library/blob/master/resources/PCF8574-pins.gif) ![PCF8574 schema](https://github.com/xreef/PCF8574_library/blob/master/resources/PCF8574-pins.gif)
So to read all analog input in one trasmission you can do (even if I use a 10millis debounce time to prevent too much read from i2c): To read all analog input in one trasmission you can do (even if I use a 10millis debounce time to prevent too much read from i2c):
```cpp ```cpp
PCF8574::DigitalInput di = PCF8574.digitalReadAll(); PCF8574::DigitalInput di = PCF8574.digitalReadAll();
Serial.print(di.p0); Serial.print(di.p0);
@ -60,13 +60,13 @@ So to read all analog input in one trasmission you can do (even if I use a 10mi
Serial.println(di.p3); Serial.println(di.p3);
``` ```
To follow a request (you can see It on [issue #5](https://github.com/xreef/PCF8574_library/issues/5)) I create a define variable to work with low memori device, if you decomment this line on .h file of the library: To follow a request (you can see It on [issue #5](https://github.com/xreef/PCF8574_library/issues/5)) I create a define variable to work with low memory devices, if you uncomment this line in the .h file of the library:
```cpp ```cpp
// #define PCF8574_LOW_MEMORY // #define PCF8574_LOW_MEMORY
``` ```
Enable low memory props and gain about 7byte of memory, and you must use the method to read all like so: Enable low memory props and gain about 7 bytes of memory, and you must use the method to read all like so:
```cpp ```cpp
byte di = pcf8574.digitalReadAll(); byte di = pcf8574.digitalReadAll();
@ -74,7 +74,7 @@ Enable low memory props and gain about 7byte of memory, and you must use the met
Serial.println(di, BIN); Serial.println(di, BIN);
``` ```
where di is a byte like 1110001, so you must do a bitwise operation to get the data, operation that I already do in the "normal" mode, here an example: where `di` is a byte like 1110001, so you must do a bitwise operation to get the data, operation that I already do in the "normal" mode. For example:
```cpp ```cpp
p0 = ((di & bit(0))>0)?HIGH:LOW; p0 = ((di & bit(0))>0)?HIGH:LOW;
@ -88,13 +88,13 @@ where di is a byte like 1110001, so you must do a bitwise operation to get the d
``` ```
if you want read a single input: if you want to read a single input:
```cpp ```cpp
int p1Digital = PCF8574.digitalRead(P1); // read P1 int p1Digital = PCF8574.digitalRead(P1); // read P1
``` ```
If you want write a digital value you must do: If you want to write a digital value:
```cpp ```cpp
PCF8574.digitalWrite(P1, HIGH); PCF8574.digitalWrite(P1, HIGH);
``` ```
@ -103,7 +103,7 @@ or:
PCF8574.digitalWrite(P1, LOW); PCF8574.digitalWrite(P1, LOW);
``` ```
You can also use interrupt pin: You can also use an interrupt pin:
You must initialize the pin and the function to call when interrupt raised from PCF8574 You must initialize the pin and the function to call when interrupt raised from PCF8574
```cpp ```cpp
// Function interrupt // Function interrupt
@ -112,9 +112,9 @@ void keyPressedOnPCF8574();
// Set i2c address // Set i2c address
PCF8574 pcf8574(0x39, ARDUINO_UNO_INTERRUPT_PIN, keyPressedOnPCF8574); PCF8574 pcf8574(0x39, ARDUINO_UNO_INTERRUPT_PIN, keyPressedOnPCF8574);
``` ```
Remember you can't use Serial or Wire on interrupt function. Remember you can't use Serial or Wire on an interrupt function.
The better way is to set only a variable to read on loop: It's better to only set a variable to read on loop:
```cpp ```cpp
void keyPressedOnPCF8574(){ void keyPressedOnPCF8574(){
// Interrupt called (No Serial no read no wire in this function, and DEBUG disabled on PCF library) // Interrupt called (No Serial no read no wire in this function, and DEBUG disabled on PCF library)