Home › Forums › The libraries hosted on the site › PCF8575 16bits i2c digital I/O expander › Can’t read value of INPUT with library
- This topic has 2 replies, 1 voice, and was last updated 3 years, 4 months ago by
Renzo Mischianti.
-
AuthorPosts
-
-
8 January 2022 at 17:14 #17750
Alejandro
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(); }
-
8 January 2022 at 21:23 #17753
Alejandro
I found an issue and is related to setting pinMode. I was debugging the .cpp file and when setting pinMode then when wire reads the value the byte returns 0000000, if manually on other arduino project I set wire write to all pins to OUTPUT 111111111111111 then I I upload the library code again I can see that wire read now works.
-
8 January 2022 at 23:27 #17756
Hi Alejandro,
I think the problem is the debounce time and setting; if an input pin goes up then goes down in the interval, you lost the change.
Try to set#define READ_ELAPSED_TIME 10
To 0 so you remove debounce, and you must use interrupt.
You can refer to the pcf8574 example.
Bye Renzo
-
-
AuthorPosts
- You must be logged in to reply to this topic.