Hi,
I have an encoder that was connected to my ESP32 and working great, because im running out of pins I move them to PCF8575 module but I cant read the value of INPUT pin. What is strange is that by using Wire.h library I can see that values changes so the module is working fine the problem is the library.
#include "Arduino.h"
#include "PCF8575.h"
// Set i2c address
PCF8575 pcf8575(0x20, 21,22);
void setup()
{
Serial.begin(115200);
pcf8575.pinMode(P2, INPUT);
pcf8575.begin();
}
void loop()
{
byte di = pcf8575.digitalReadAll();
Serial.print("READ VALUE FROM PCF: ");
Serial.println(di, BIN);
delay(50);
}
Any clue? I always get 00000000 and when I press the encoder button I dont see anything change in the byte. And as I said by using Wire I can see that the corresponding bit changes.
This is my code using Wire.h
#include "Arduino.h"
#include <Wire.h>
#define pcf8575adress 0x20
void setup()
{
Serial.begin(9600);
Wire.begin();
pf575_write(word(B11111111,B11111111));
}
void loop()
{
Wire.requestFrom(pcf8575adress, 1);
byte incomingByte = Wire.read();
printBinary(incomingByte);
//Serial.println(incomingByte, BIN);
delay(500);
}
void printBinary(byte b) {
for (int i = 7; i >= 0; i-- )
{
Serial.print((b >> i) & 0X01);//shift and select first bit
}
Serial.println();
}
// Function for writing two Bytes to the I2C expander device
void pf575_write(uint16_t data)
{
Wire.beginTransmission(pcf8575adress);
Wire.write(lowByte(data));
Wire.write(highByte(data));
Wire.endTransmission();
}