#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //inisialisasi alamat (bisa dicek melalui scanning lcd) dan bentuk LCD
const int pb1 = 22; //merah1, inisialisasi pin push button 1
const int pb2 = 23; //hijau1
const int pb3 = 24; //biru1
const int pb4 = 25; //kuning1
const int pb5 = 26; //hitam1
const int pb6 = 27; //putih1
const int pb7 = 28; //abu1
const int pb8 = 29; //merah2
const int pb9 = 30; //hijau2
const int pb10 = 31; //biru2
const int pb11 = 32; //kuning2
const int pb12 = 33; //hitam2
const int pb13 = 34; //putih2
const int pb14 = 35; //abu2
const int pb15 = 36; //merah3
const int pb16 = 37; //hijau3
int status_pb1 = 0; //variabel untuk menyimpan status push button 1
int status_pb2 = 0;
int status_pb3 = 0;
int status_pb4 = 0;
int status_pb5 = 0;
int status_pb6 = 0;
int status_pb7 = 0;
int status_pb8 = 0;
int status_pb9 = 0;
int status_pb10 = 0;
int status_pb11 = 0;
int status_pb12 = 0;
int status_pb13 = 0;
int status_pb14 = 0;
int status_pb15 = 0;
int status_pb16 = 0;
bool lcdStatus = false; //variabel untuk menyimpan status lcd
int shiftCount = 0; //variabel untuk mengatur ulang penggeseran karakter
void setup() {
pinMode(pb1, INPUT);
pinMode(pb2, INPUT);
pinMode(pb3, INPUT);
pinMode(pb4, INPUT);
pinMode(pb5, INPUT);
pinMode(pb6, INPUT);
pinMode(pb7, INPUT);
pinMode(pb8, INPUT);
pinMode(pb9, INPUT);
pinMode(pb10, INPUT);
pinMode(pb11, INPUT);
pinMode(pb12, INPUT);
pinMode(pb13, INPUT);
pinMode(pb14, INPUT);
pinMode(pb15, INPUT);
pinMode(pb16, INPUT);
lcd.init(); //inisialisasi tampilan lcd
lcd.backlight();
delay(500);
lcd.noBacklight(); //tampilan awal lcd mati
}
void loop() {
status_pb1 = digitalRead(pb1); //baca status pb1
status_pb2 = digitalRead(pb2);
status_pb3 = digitalRead(pb3);
status_pb4 = digitalRead(pb4);
status_pb5 = digitalRead(pb5);
status_pb6 = digitalRead(pb6);
status_pb7 = digitalRead(pb7);
status_pb8 = digitalRead(pb8);
status_pb9 = digitalRead(pb9);
status_pb10 = digitalRead(pb10);
status_pb11 = digitalRead(pb11);
status_pb12 = digitalRead(pb12);
status_pb13 = digitalRead(pb13);
status_pb14 = digitalRead(pb14);
status_pb15 = digitalRead(pb15);
status_pb16 = digitalRead(pb16);
//input suara RF ON (merah1)
if (status_pb1 == HIGH && !lcdStatus) { //jika pb1 ditekan dan lcd belum menyala
lcdStatus = true; //atur lcd menjadi menyala
lcd.backlight(); //nyalakan backlight lcd
lcd.setCursor(4,0);
lcd.print("Hello!");
}
//kondisi RF terputus (merah1)
else if (status_pb1 == HIGH && lcdStatus){ //jika pb1 ditekan dan lcd sedang menyala
lcd.clear();
lcd.setCursor(3,1);
lcd.print("Good bye!");
delay(1000);
lcd.clear(); //hapus pesan
lcdStatus = false; //atur lcd menjadi mati
lcd.noBacklight(); //matikan backlight lcd
delay(2000);
}
//kondisi RF terkoneksi (hijau1)
else if (status_pb2 == HIGH && lcdStatus){ //jika pb2 ditekan, lcd menyala
lcd.clear();
lcd.setCursor(1,0);
lcd.print("RF terkoneksi");
delay(2000);
}
//Input suara buka pagar/buka setengah (biru1)
else if (status_pb3 == HIGH && lcdStatus){ //jika pb3 ditekan, lcd menyala
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Perintah terkonfirmasi");
lcd.setCursor(0,1);
lcd.print("Sedang membuka pagar");
delay(100);
while (true){ //jika kondisi diatas berjalan
lcd.scrollDisplayLeft(); //pesan diatas scroll dari kanan ke kiri
delay(300); //dengan delay setiap gesernya
shiftCount++; //pesan menggeser terus
if (shiftCount >= 48){ //jika penggeseran telah mencapai 48 menampilkan pesan ini
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Perintah terkonfirmasi");
lcd.setCursor(0,1);
lcd.print("Sedang membuka pagar");
shiftCount = 0; //mengatur nilai shiftCount menjadi 0
delay (2000);
break; //keluar dari fungsi while
}
}
}
//input suara tidak membuka pagar (kuning1)
else if (status_pb4 == HIGH && lcdStatus){ //jika pb4 ditekan, lcd menyala
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Perintah terkonfirmasi");
lcd.setCursor(0,1);
lcd.print("Pagar tetap tertutup");
delay(100);
while (true){
lcd.scrollDisplayLeft();
delay(300);
shiftCount++; //menambahkan nilai variabel
if (shiftCount >= 48){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Perintah terkonfirmasi");
lcd.setCursor(0,1);
lcd.print("Pagar tetap tertutup");
shiftCount = 0; //mengatur nilai shiftCount menjadi 0
delay (2000);
break;
}
}
}
//input kondisi lampu sudah menyala (hitam1)
else if (status_pb5 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Lampu sudah menyala");
delay(100);
while (true){
lcd.scrollDisplayLeft();
delay(300);
shiftCount++; //menambahkan nilai variabel
if (shiftCount >= 46){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Lampu sudah menyala");
shiftCount = 0;
delay(2000);
break;
}
}
}
//input suara nyalakan lampu (putih1)
else if (status_pb6 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Perintah terkonfirmasi");
lcd.setCursor(0,1);
lcd.print("Sedang menyalakan lampu");
delay(100);
while (true){
lcd.scrollDisplayLeft();
delay(300);
shiftCount++; //menambahkan nilai variabel
if (shiftCount >= 48){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Perintah terkonfirmasi");
lcd.setCursor(0,1);
lcd.print("Sedang menyalakan lampu");
shiftCount = 0;
delay(2000);
break;
}
}
}
//input suara tidak menyalakan lampu (abu1)
else if (status_pb7 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Perintah terkonfirmasi");
lcd.setCursor(0,1);
lcd.print("Lampu tetap mati");
delay(100);
while (true){
lcd.scrollDisplayLeft();
delay(300);
shiftCount++; //menambahkan nilai variabel
if (shiftCount >= 48){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Perintah terkonfirmasi");
lcd.setCursor(0,1);
lcd.print("Lampu tetap mati");
shiftCount = 0;
delay(2000);
break;
}
}
}
//kondisi pagar masih proses buka dan lampu menyala (merah2)
else if (status_pb8 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Proses membuka pagar");
lcd.setCursor(0,1);
lcd.print("Lampu menyala");
delay(100);
while (true){
lcd.scrollDisplayLeft();
delay(300);
shiftCount++; //menambahkan nilai variabel
if (shiftCount >= 48){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Proses membuka pagar");
lcd.setCursor(0,1);
lcd.print("Lampu menyala");
shiftCount = 0;
delay(2000);
break;
}
}
}
//kondisi pagar masih proses membuka dan lampu mati (hijau2)
else if (status_pb9 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Proses membuka pagar");
lcd.setCursor(0,1);
lcd.print("Lampu mati");
delay(100);
while (true){
lcd.scrollDisplayLeft();
delay(300);
shiftCount++; //menambahkan nilai variabel
if (shiftCount >= 48){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Proses membuka pagar");
lcd.setCursor(0,1);
lcd.print("Lampu mati");
shiftCount = 0;
delay(2000);
break;
}
}
}
//pada lampu menyala, pagar berhasil membuka (biru2)
else if (status_pb10 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Pagar terbuka");
lcd.setCursor(1,1);
lcd.print("Lampu menyala");
delay(100);
}
//pada lampu menyala, pagar gagal membuka (kuning2)
else if (status_pb11 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Gagal membuka pagar");
lcd.setCursor(0,1);
lcd.print("Lampu menyala");
delay(100);
while (true){
lcd.scrollDisplayLeft();
delay(300);
shiftCount++; //menambahkan nilai variabel
if (shiftCount >= 46){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Gagal membuka pagar");
lcd.setCursor(0,1);
lcd.print("Lampu menyala");
shiftCount = 0;
delay(2000);
break;
}
}
}
//pada lampu yg tidak dinyalakan, pagar berhasil membuka (hitam2)
else if (status_pb12 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Pagar terbuka");
lcd.setCursor(3,1);
lcd.print("Lampu mati");
delay(100);
}
//pada lampu yg tidak dinyalakan, pagar gagal membuka (putih2)
else if (status_pb13 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Gagal membuka pagar");
lcd.setCursor(0,1);
lcd.print("Lampu mati");
delay(100);
while (true){
lcd.scrollDisplayLeft();
delay(300);
shiftCount++; //menambahkan nilai variabel
if (shiftCount >= 45){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Gagal membuka pagar");
lcd.setCursor(0,1);
lcd.print("Lampu mati");
shiftCount = 0;
delay(2000);
break;
}
}
}
//pada penutupan otomatis, button tidak ditekan (abu2)
else if (status_pb14 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Proses menutup pagar");
delay(100);
while (true){
lcd.scrollDisplayLeft();
delay(300);
shiftCount++; //menambahkan nilai variabel
if (shiftCount >= 46){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Proses menutup pagar");
shiftCount = 0;
delay(2000);
break;
}
}
}
//pada penutupan otomatis, button ditekan (merah3)
else if (status_pb15 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Batal menutup pagar");
delay(100);
while (true){
lcd.scrollDisplayLeft();
delay(300);
shiftCount++; //menambahkan nilai variabel
if (shiftCount >= 44){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Batal menutup pagar");
shiftCount = 0;
delay(2000);
break;
}
}
}
//kondisi pagar sudah berhasil menutup (hijau3)
else if (status_pb16 == HIGH && lcdStatus){
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Pagar tertutup");
delay(100);
}
delay(100);
}