#include <LiquidCrystal_I2C.h>
#define CLK 2
#define Q7 3
#define Q6 4
#define Q5 5
#define Q4 6
#define Q3 7
#define Q2 8
#define Q1 9
#define Q0 10
LiquidCrystal_I2C lcd(0x27, 20, 4);
bool a = 0;
bool b = 0;
bool c = 0;
bool d = 0;
bool e = 0;
bool f = 0;
bool g = 0;
bool h = 0;
bool Display = 0;
bool DisplaySet = 1;
bool resetStatus = 1;
String SumCH = "0 0 0 0 0 0 0 0";
String DataRow1 = " ";
String DataRow2 = " ";
String DataRow3 = " ";
uint8_t times = 0; String text = "";
void writeLCD(String dataIn, String dataIn2) {
DataRow1 = DataRow2;
DataRow2 = DataRow3;
DataRow3 = dataIn + " " + dataIn2;
lcd.setCursor(0,0);
lcd.print("A B C D E F G H CLK");
lcd.setCursor(0,1);
lcd.print(String(DataRow1));
lcd.setCursor(0,2);
lcd.print(String(DataRow2));
lcd.setCursor(0,3);
lcd.print(String(DataRow3));
}
void displaySet(){
lcd.setCursor(3,0);
lcd.print("No CLK Trigger");
lcd.setCursor(0,2);
lcd.print(" A B C D E F G H CLK");
lcd.setCursor(0,3);
lcd.print("10 9 8 7 6 5 4 3 2");
}
void countTime() {
if(times != 255) {times++;}
else{times = 1;}
if(times < 10) {text = ""; text = String(times) + " ";}
else if(times < 100 && times >= 10) {text = ""; text = String(times) + " ";}
else if(times >= 100) {text = ""; text = String(times);}
}
void setup() {
// put your setup code here, to run once:
lcd.init();
lcd.backlight();
pinMode(CLK , INPUT);
for(uint8_t pin = Q7; pin<=10; pin++) {
pinMode(pin, INPUT);
}
displaySet();
attachInterrupt(digitalPinToInterrupt(CLK), trig1, RISING); // CLK pin 2
}
void trig1() {
DisplaySet = 0;
a = digitalRead(Q0);
b = digitalRead(Q1);
c = digitalRead(Q2);
d = digitalRead(Q3);
e = digitalRead(Q4);
f = digitalRead(Q5);
g = digitalRead(Q6);
h = digitalRead(Q7);
Display = 1;
}
void loop() {
if(DisplaySet == 0 && resetStatus == 1) {
lcd.clear();
resetStatus = 0;
}
if(Display == 1) {
countTime();
SumCH = "";
SumCH = String(a) + " " + String(b) + " " + String(c) + " " + String(d) + " "
+ String(e) + " " + String(f) + " " + String(g) + " " + String(h);
writeLCD(SumCH, text);
Display = 0;
}
}