#include <LiquidCrystal_PCF8574.h>

 

LiquidCrystal_PCF8574 lcd(0x27);

 

#define pin_I0 7

#define pin_I1 6

#define pin_I2 5

#define pin_I3 4

#define pin_I4 3

#define pin_I5 2

#define pin_I6 38

#define pin_I7 39

 

#define I0 digitalRead(pin_I0)

#define I1 digitalRead(pin_I1)

#define I2 digitalRead(pin_I2)

#define I3 digitalRead(pin_I3)

#define I4 digitalRead(pin_I4)

#define I5 digitalRead(pin_I5)

#define I6 digitalRead(pin_I6)

#define I7 digitalRead(pin_I7)

 

#define Q0 35

#define Q1 0

#define Q2 36

#define Q3 34

#define Q4 33

#define Q5 47

#define Q6 48

#define Q7 26

 

char texto[] = "digital I/O";

 

byte pin_state_high[] = {

  0b00000,

  0b11111,

  0b11111,

  0b11111,

  0b11111,

  0b11111,

  0b11111,

  0b00000

};

 

byte pin_state_low[] = {

  0b00000,

  0b11111,

  0b10001,

  0b10001,

  0b10001,

  0b10001,

  0b11111,

  0b00000

};

 

void display_update() {

  lcd.setCursor(0, 0);

  lcd.print(texto);

  lcd.setCursor(0, 1);

  lcd.print("I: ");

  lcd.write(I0);

  lcd.write(I1);

  lcd.write(I2);

  lcd.write(I3);

  lcd.write(I4);

  lcd.write(I5);

  lcd.write(I6);

  lcd.write(I7);

  lcd.setCursor(0, 2);

  lcd.print("   01234567");

  lcd.setCursor(0, 3);

  lcd.print("Q: ");

  lcd.write(digitalRead(Q0));

  lcd.write(digitalRead(Q1));

  lcd.write(digitalRead(Q2));

  lcd.write(digitalRead(Q3));

  lcd.write(digitalRead(Q4));

  lcd.write(digitalRead(Q5));

  lcd.write(digitalRead(Q6));

  lcd.write(digitalRead(Q7));

}

 

void setup() {

  // put your setup code here, to run once:

  pinMode(pin_I0, INPUT);

  pinMode(pin_I1, INPUT);

  pinMode(pin_I2, INPUT);

  pinMode(pin_I3, INPUT);

  pinMode(pin_I4, INPUT);

  pinMode(pin_I5, INPUT);

  pinMode(pin_I6, INPUT);

  pinMode(pin_I7, INPUT);

  pinMode(Q0, OUTPUT);

  pinMode(Q1, OUTPUT);

  pinMode(Q2, OUTPUT);

  pinMode(Q3, OUTPUT);

  pinMode(Q4, OUTPUT);

  pinMode(Q5, OUTPUT);

  pinMode(Q6, OUTPUT);

  pinMode(Q7, OUTPUT);

 

  Wire.begin(41, 42);

  lcd.begin(20, 4); // initialize the lcd

  lcd.createChar(0, pin_state_low);

  lcd.createChar(1, pin_state_high);

  delay(200);

  lcd.setBacklight(255);

}

 

void loop() {

  // put your main code here, to run repeatedly:

  digitalWrite(Q0, I0);

  digitalWrite(Q1, I1);

  digitalWrite(Q2, I2);

  digitalWrite(Q3, I3);

  digitalWrite(Q4, I4);

  digitalWrite(Q5, I5);

  digitalWrite(Q6, I6);

  digitalWrite(Q7, I7);

 

  display_update();

}