#define AI 13 //1 R1
#define BI 4 //2 R2
#define CI 14 //3 D1
#define DI 27 //4 R3
#define EI 26 //5 D2
#define FI 25 //6 D3
#define HI 5 //7 D4
#define II 21 //8 R4
#define JI 34 //9 D5
#define KI 35 //10 D6
#define LI 33 // 11 D7
#define MI 32 // 12 D8
#define NR 18 // LED 1
#define OR 19 // LED 2
#define PR 22 // LED 3
#define QR 23 // LED 4
const int ACI[] = {AI, BI, CI, DI, EI, FI, HI, II, JI, KI, LI, MI};
const int ACR[] = {NR, OR, PR, QR};
const int ACI_LENGTH = sizeof(ACI) / sizeof(ACI[0]);
const int ACR_LENGTH = sizeof(ACR) / sizeof(ACR[0]);
void setup() {
Serial.begin(115200);
for (int u = 0; u < ACI_LENGTH; u++) {
pinMode(ACI[u], INPUT);
Serial.println("Setting up port INPUT> " + String(ACI[u]));
}
for (int u = 0; u < ACR_LENGTH; u++) {
pinMode(ACR[u], OUTPUT);
Serial.println("Setting up port OUTPUT> " + String(ACR[u]));
}
}
void loop() {
bool D1 = digitalRead(CI);
bool D2 = digitalRead(EI);
bool D3 = digitalRead(FI);
bool D4 = digitalRead(HI);
bool D5 = digitalRead(JI);
bool D6 = digitalRead(KI);
bool D7 = digitalRead(LI);
bool D8 = digitalRead(MI);
bool R1 = digitalRead(AI);
bool R2 = digitalRead(BI);
bool R3 = digitalRead(DI);
bool R4 = digitalRead(II);
bool RO1 = D1 ^ D2 ^ D4 ^ D5 ^ D7;
bool RO2 = D1 ^ D3 ^ D4 ^ D6 ^ D7;
bool RO3 = D2 ^ D3 ^ D4 ^ D8;
bool RO4 = D5 ^ D6 ^ D7 ^ D8;
if (RO1 != R1){
digitalWrite(NR, HIGH);
} else {
digitalWrite(NR, LOW);
}
if (RO2 != R2){
digitalWrite(OR, HIGH);
} else {
digitalWrite(OR, LOW);
}
if (RO3 != R3){
digitalWrite(PR, HIGH);
} else {
digitalWrite(PR, LOW);
}
if (RO4 != R4){
digitalWrite(QR, HIGH);
} else {
digitalWrite(QR, LOW);
}
Serial.println("INPUTS D1: " + String(D1) + " D2: " + String(D2) + " D3: " + String(D3) + " D4: " + String(D4) + " D5: " + String(D5) + " D6: " + String(D6) + " D7: " + String(D7) + " D8: " + String(D8));
Serial.println("OPTIONS R1: " + String(R1) + " R2: " + String(R2) + " R3: " + String(R3) + " R4: " + String(R4));
delay(100);
}