#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C UILcd(0x27,20,4);
uint8_t state;

void setup() {
  state=1;
  Serial.begin(9600);
  UILcd.init();
  UILcd.backlight();
  UILcd.setCursor(1,0);
  UILcd.print("N3T Status - V.1.0");
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  attachInterrupt(digitalPinToInterrupt(2), changeStateUp, FALLING);
  attachInterrupt(digitalPinToInterrupt(3), changeStateDown, FALLING);
  sei();
}

void loop() {
  clearArea();
  if (state == 1) {
    UILcd.setCursor(0,1);
    UILcd.print("AF:");
    UILcd.setCursor(0,2);
    UILcd.print("BC:");
    UILcd.setCursor(0,3);
    UILcd.print("DE:");
    UILcd.setCursor(10,1);
    UILcd.print("HL:");
    UILcd.setCursor(10,2);
    UILcd.print("SP:");
    UILcd.setCursor(10,3);
    UILcd.print("PC:");
  } else if (state == 2) {
    UILcd.setCursor(0,1);
    UILcd.print("A:");
    UILcd.setCursor(0,2);
    UILcd.print("B:");
    UILcd.setCursor(0,3);
    UILcd.print("C:");
    UILcd.setCursor(5,1);
    UILcd.print("D:");
    UILcd.setCursor(5,2);
    UILcd.print("E:");
    UILcd.setCursor(5,3);
    UILcd.print("F:");
    UILcd.setCursor(11,1);
    UILcd.print("H:");
    UILcd.setCursor(11,2);
    UILcd.print("L:");
    UILcd.setCursor(11,3);
    UILcd.print("SP:");
  } else if (state == 3) {
    UILcd.setCursor(0,1);
    UILcd.print("PC:");
    UILcd.setCursor(0,2);
    UILcd.print("IX:");
    UILcd.setCursor(0,3);
    UILcd.print("IY:");
    UILcd.setCursor(10,1);
    UILcd.print("AF':");
    UILcd.setCursor(10,2);
    UILcd.print("BC':");
    UILcd.setCursor(10,3);
    UILcd.print("DE':");
  }
  delay(1000);
}

void changeStateUp() {
  if (state < 3) {
    state++;
  }
  Serial.print("state = ");
  Serial.println(state);
}

void changeStateDown() {
  if (state > 1) {
    state--;
  }
  Serial.print("state = ");
  Serial.println(state);
}

void clearArea() {
  for (int r=1; r<=3; r++) {
    for (int c=0; c<20; c++) {
      UILcd.setCursor(c,r);
      UILcd.print(" ");
    }
  }
}