#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);
}
mega:SCL
mega:SDA
mega:AREF
mega:GND.1
mega:13
mega:12
mega:11
mega:10
mega:9
mega:8
mega:7
mega:6
mega:5
mega:4
mega:3
mega:2
mega:1
mega:0
mega:14
mega:15
mega:16
mega:17
mega:18
mega:19
mega:20
mega:21
mega:5V.1
mega:5V.2
mega:22
mega:23
mega:24
mega:25
mega:26
mega:27
mega:28
mega:29
mega:30
mega:31
mega:32
mega:33
mega:34
mega:35
mega:36
mega:37
mega:38
mega:39
mega:40
mega:41
mega:42
mega:43
mega:44
mega:45
mega:46
mega:47
mega:48
mega:49
mega:50
mega:51
mega:52
mega:53
mega:GND.4
mega:GND.5
mega:IOREF
mega:RESET
mega:3.3V
mega:5V
mega:GND.2
mega:GND.3
mega:VIN
mega:A0
mega:A1
mega:A2
mega:A3
mega:A4
mega:A5
mega:A6
mega:A7
mega:A8
mega:A9
mega:A10
mega:A11
mega:A12
mega:A13
mega:A14
mega:A15
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
r1:1
r1:2
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
r2:1
r2:2
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
r3:1
r3:2
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
r4:1
r4:2
btn5:1.l
btn5:2.l
btn5:1.r
btn5:2.r
r5:1
r5:2
btn6:1.l
btn6:2.l
btn6:1.r
btn6:2.r
r6:1
r6:2
btn7:1.l
btn7:2.l
btn7:1.r
btn7:2.r
r7:1
r7:2
btn8:1.l
btn8:2.l
btn8:1.r
btn8:2.r
r8:1
r8:2
btn9:1.l
btn9:2.l
btn9:1.r
btn9:2.r
btn10:1.l
btn10:2.l
btn10:1.r
btn10:2.r
btn11:1.l
btn11:2.l
btn11:1.r
btn11:2.r
btn12:1.l
btn12:2.l
btn12:1.r
btn12:2.r
r9:1
r9:2
r10:1
r10:2
r11:1
r11:2
r12:1
r12:2
btn13:1.l
btn13:2.l
btn13:1.r
btn13:2.r
btn14:1.l
btn14:2.l
btn14:1.r
btn14:2.r
r13:1
r13:2
r14:1
r14:2
btn15:1.l
btn15:2.l
btn15:1.r
btn15:2.r
btn16:1.l
btn16:2.l
btn16:1.r
btn16:2.r
r15:1
r15:2
r16:1
r16:2