Hello,
Thanks for a quick reply.
I just wanted to inform that your library does not work if you have a mix of input and
output pins. As soon as you try to write to an output pin, the input pins is stucked to 0.
I have attached a simple diagram and code to show this. You may use this setup to find out what is wrong.
![](data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ2MSIgd2lkdGg9IjY0MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4=)
![Pcf8574-test](https://i.ibb.co/xqH8qx9/Pcf8574-test.jpg)
I switched to a different library and then everything in my code work as expected.
#include
PCF8574 *unit = NULL;
/*
* Delay function for debugging.
* Give me time to move the pins on the multimeter to the proper pin for measuring.
*/
void countdown(const int cnt)
{
Serial.print(F("Counting down... "));
for (int i = 0; cnt > i; i++) {
delay(1000);
Serial.print(i);
Serial.print(' ');
}
Serial.println();
}
void setup()
{
Serial.begin(9600);
Serial.println(F("\n\nInitializing"));
// Initialize the powerboard.
Serial.println(F("Countdown to initialization of the PCF8574A"));
countdown(10);
Serial.println(F("\nInitializing the PFC8574A"));
unit = new PCF8574(0x38);
unit->begin();
Serial.println(F("Configuring P0"));
unit->pinMode(0, OUTPUT);
countdown(10);
Serial.println(F("Configuring P1"));
unit->pinMode(1, OUTPUT);
countdown(10);
Serial.println(F("Configuring P2"));
unit->pinMode(2, OUTPUT);
countdown(10);
Serial.println(F("Configuring P3"));
unit->pinMode(3, INPUT);
countdown(10);
Serial.println(F("Configuring P4"));
unit->pinMode(4, INPUT);
countdown(10);
Serial.println(F("Configuring P5"));
unit->pinMode(5, INPUT);
countdown(10);
Serial.println(F("Configuring P6"));
unit->pinMode(6, INPUT);
countdown(10);
Serial.println(F("Configuring P7"));
unit->pinMode(7, INPUT);
Serial.println(F("PCF8574A tester ready"));
}
void loop()
{
bool stat;
char str[10];
// Turn on outputs
for (uint8_t p = 0; 3 > p; p++) {
unit->digitalWrite(p, HIGH);
}
// Scan inputs.
Serial.print(F("Inputs: "));
for (uint8_t p = 3; 8 > p; p++) {
stat = unit->digitalRead(p);
sprintf_P(str, PSTR("P%d=%d "), p, stat);
Serial.print(str);
}
Serial.println();
delay(1000);
// Turn off outputs
for (uint8_t p = 0; 3 > p; p++) {
unit->digitalWrite(p, LOW);
}
delay(1000);
}