#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int switchPin1 = 13;
const int switchPin2 = 12;
const int switchPin3 = 11;
const int switchPin4 = 10;
const int switchPin5 = 9;
const int switchPin6 = 8;
const int switchPin7 = 7;
const int switchPin8 = 6;
const int switchPin9 = 5;
const int switchPin10 = 4;
const int switchPin11 = 3;
const int switchPin12 = 2;
const int switchPin13 = 1;
bool switchStates[] = {false, false, false, false, false, false, false, false, false, false, false, false, false}; // Array untuk menyimpan status setiap switch
int switchPins[] = {switchPin1, switchPin2, switchPin3, switchPin4, switchPin5, switchPin6, switchPin7, switchPin8, switchPin9, switchPin10, switchPin11, switchPin12, switchPin13}; // Array untuk menyimpan pin setiap switch
bool lcdUpdated = false; // Penanda apakah LCD sudah diperbarui
bool errorDisplayed = false; // Penanda apakah pesan error telah ditampilkan
void setup() {
for (int i = 0; i < 13; i++) {
pinMode(switchPins[i], INPUT);
}
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
bool anySwitchOn = false; // Menyimpan apakah ada switch yang masih aktif
int activeSwitch = -1; // Menyimpan indeks switch yang masih aktif
// Periksa setiap switch
for (int i = 0; i < 13; i++) {
int switchState = digitalRead(switchPins[i]); // Baca status switch
// Jika switch dalam keadaan on, simpan status switch dan indeksnya
if (switchState == HIGH) {
anySwitchOn = true;
activeSwitch = i;
break; // Keluar dari loop setelah menemukan switch yang on
}
}
// Tampilkan status switch yang masih aktif
if (anySwitchOn) {
bool multipleSwitchesActive = false; // Menyimpan apakah ada multiple switches aktif
// Periksa apakah ada multiple switches aktif
for (int i = 0; i < 13; i++) {
int switchState = digitalRead(switchPins[i]); // Baca status switch
if (switchState == HIGH && i != activeSwitch) { // Cek apakah switch aktif selain switch yang pertama kali ditemukan
multipleSwitchesActive = true;
break;
}
}
if (!multipleSwitchesActive) { // Tampilkan status switch jika tidak ada multiple switches aktif
if (!lcdUpdated || switchStates[activeSwitch] == false) { // Update LCD jika tidak ada pembaruan sebelumnya atau jika switch sebelumnya dimatikan
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Switch Pin ");
lcd.print(switchPins[activeSwitch]);
lcd.setCursor(0, 1);
lcd.print("ON");
lcdUpdated = true;
errorDisplayed = false; // Reset flag untuk pesan error
switchStates[activeSwitch] = true; // Update status switch
}
} else { // Tampilkan pesan error jika ada multiple switches aktif
if (!errorDisplayed) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Error: Multiple");
lcd.setCursor(0, 1);
lcd.print("Switches Active");
errorDisplayed = true;
lcdUpdated = false; // Reset flag untuk LCD
}
}
} else { // Tampilkan pesan jika tidak ada switch yang aktif
if (!errorDisplayed) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tekan Switch");
lcdUpdated = true;
errorDisplayed = true; // Set flag untuk menampilkan pesan "Tekan Switch"
}
}
}