#include  "Wire.h"

#define ADDR 0x20

uint8_t writeBits = 0x00;
uint8_t readBits = 0x00;
uint8_t writeByte = 0x00;

void pinInput(uint8_t pin){
  writeBits = writeBits | bit(pin);
  readBits = readBits & ~bit(pin);
};

void pinWrite(uint8_t pin, uint8_t state) {
  Wire.beginTransmission(ADDR);
  if (state==HIGH){
		writeByte = writeByte | bit(pin);
	}else{
		writeByte = writeByte & ~bit(pin);
	}
  writeByte = writeByte & writeBits;
	Wire.write(writeByte);
  Wire.endTransmission();
}

void init_pcf8574() {
  Wire.begin(21, 22);
  Wire.beginTransmission(ADDR);
  uint8_t registers = writeBits | readBits;
  Wire.write(~registers);
  Serial.println("writed");
  Serial.println(registers);
  Wire.endTransmission();
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  for (int i = 0; i < 8; i++) {
    pinInput(i);
  }
  init_pcf8574();
}

void loop() {
  // put your main code here, to run repeatedly:
  for (int i = 0; i < 8; i++) {
    delay(40);
    pinWrite(i, 1);
    pinWrite(i, 0);
    delay(40);
  }
}
pcf8574Breakout
GND5VSDASCLSQWRTCDS1307+