Can’t read value of INPUT with library

Home Forums The libraries hosted on the site PCF8575 16bits i2c digital I/O expander Can’t read value of INPUT with library

Tagged: ,

Viewing 2 reply threads
  • Author
    Posts
    • #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();
        }
      • #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.

        • #17756
          Renzo Mischianti
          Keymaster

            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

        Viewing 2 reply threads
        • You must be logged in to reply to this topic.
        Exit mobile version