//Library----------------------------
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); //Alamat I2C
RTC_DS1307 rtc;
//Deklarasi DHT------------------
//Deklarasi Encoder------------------
#define outputA 5
#define outputB 6
#define tombol 4
#define led1 13
#define buzzer 12
//Deklarasi Led Buzzer Backlight-----
bool LED1 = false; //Variabel kondisi LED mati
bool BACKLIGHT = true;
bool BUZZER = false;
//Deklarasi wadah untuk Encoder------
int counter = 0; //Variabel penghitung nilai
int aState; //Variabel kondisi
int aLastState; //Variabel kondisi terakhir
int DITEKAN = LOW;
int BOUNCE= 50;
//Deklarasi Char icon Navigasi-------
byte nav[] = { B00000, B00100, B00010, B11111, B00010, B00100, B00000, B00000};
//Deklarasi Char Icon Baterai--------
byte Kosong1[] = { B01111, B01000, B11000, B11000, B11000, B01000, B01000, B01111};
byte Kosong2[] = { B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111};
byte Kosong3[] = { B11111, B00001, B00001, B00001, B00001, B00001, B00001, B11111};
byte batt1[] = { B01111, B01000, B11011, B11011, B11011, B11011, B01000, B01111};
byte batt2[] = { B11111, B00000, B11111, B11111, B11111, B11111, B00000, B11111};
byte batt3[] = { B11111, B00001, B11101, B11101, B11101, B11101, B00001, B11111};
//Deklarasi Char Icon suhu--------
byte suhu[] = {
B00100,
B01010,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110};
//Deklarasi Char Icon sinyal--------
byte sinyalA[] = { B11111, B10101, B10101, B01110, B00100, B00100, B00100, B00100};
byte sinyalB[] = { B00000, B00000, B00000, B00001, B00011, B00111, B01111, B11111};
byte sinyalX[] = { B00000, B00000, B00000, B00000, B01010, B00100, B01010, B00000};
//Deklarasi modul Pembaca Arus-------
float adc_value, in_voltage, adc_voltage;
float ref_voltage = 4.8;
float R1 = 30000;
float R2 = 7500;
int modul_voltage = A3;
//Deklarasi Char Hari dalam satu Minggu--------
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
void setup() {
lcd.begin(20, 4);
lcd.backlight();
lcd.clear();
pinMode (outputA,INPUT_PULLUP);
pinMode (outputB,INPUT_PULLUP);
pinMode (tombol,INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(BACKLIGHT, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(modul_voltage, INPUT);
lcd.createChar(0, nav);
lcd.createChar(1, Kosong1);
lcd.createChar(2, Kosong2);
lcd.createChar(3, Kosong3);
lcd.createChar(4, batt1);
lcd.createChar(5, batt2);
lcd.createChar(6, batt3);
lcd.createChar(7, sinyalA);
// lcd.createChar(16, sinyalX);
aLastState = digitalRead(outputA);
//if (! rtc.begin()){lcd.print("RTC Tidak Ditemukan");while (1);}
//if (! rtc.isrunning()){lcd.print("RTC tidak berjalan!");}
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//auto update from computer time
//rtc.adjust(DateTime(2024, 3, 26, 0, 0, 0));// to set the time manually --yyyy,mm,dd,h,m,s
}
void loop() {
//---------------Rumus Tegangan---------------//
adc_value = analogRead(modul_voltage);
adc_voltage = (adc_value * ref_voltage) / 1024;
in_voltage = adc_voltage / (R2 / (R1 + R2));
delay(50);
//---------------Tampilan jam----------------//
// DateTime now = rtc.now();
// lcd.setCursor(8, 0);
// lcd.print(now.hour());
// lcd.print(':');
// lcd.print(now.minute());
//---------------Tampilan batt----------------//
if (in_voltage >= 4.00){baterai_100();}
else if(in_voltage < 4.00 && in_voltage >= 3.70){baterai_65();}
else if(in_voltage > 3.70 && in_voltage <= 3.50){baterai_30();}
else{baterai_0();}
//---------------Tampilan Sinyal----------------//
lcd.setCursor(0, 0); lcd.write(7); lcd.print("x");
//---------------Tampilan Awal----------------//
// lcd.setCursor(16, 0); lcd.print(in_voltage);
lcd.setCursor(0, 1); lcd.print(" FirMan ");
lcd.setCursor(0, 2); lcd.print(" ");
lcd.setCursor(0, 3); lcd.print("[MENU] ");
if (digitalRead(tombol) == DITEKAN) {delay(BOUNCE); while (digitalRead(tombol) == DITEKAN) {}lcd.clear(); beep(); daftarMENU();}
}
//----------------------------------------------------------------------
void daftarMENU(){
setMENU0: // HOME
lcd.setCursor(1, 0); lcd.print("Home ");
lcd.setCursor(1, 1); lcd.print("Info Device ");
lcd.setCursor(1, 2); lcd.print("Status Device ");
lcd.setCursor(1, 3); lcd.print("Setting ");
baca_rotary();
lcd.setCursor(0,0); lcd.write( 0 );
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep(); goto setMENU11;}
else if(counter == -2){counter = 0; beep(); goto setMENU1;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto homeSET;}
goto setMENU0;
//----------------------------------------------------------------------
setMENU1: // Info Device
lcd.setCursor(1, 0); lcd.print("Home ");
lcd.setCursor(1, 1); lcd.print("Info Device ");
lcd.setCursor(1, 2); lcd.print("Status Device ");
lcd.setCursor(1, 3); lcd.print("Setting ");
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.write( 0 );
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep(); goto setMENU0;}
else if(counter == -2){counter = 0; beep(); goto setMENU2;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto info_device;}
goto setMENU1;
//----------------------------------------------------------------------
setMENU2: // Status Device
lcd.setCursor(1, 0); lcd.print("Home ");
lcd.setCursor(1, 1); lcd.print("Info Device ");
lcd.setCursor(1, 2); lcd.print("Status Device ");
lcd.setCursor(1, 3); lcd.print("Setting ");
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.write( 0 );
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep(); goto setMENU1;}
else if(counter == -2){counter = 0; beep(); goto setMENU3;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto status_device;}
goto setMENU2;
//----------------------------------------------------------------------
setMENU3: // Setting
lcd.setCursor(1, 0); lcd.print("Home ");
lcd.setCursor(1, 1); lcd.print("Info Device ");
lcd.setCursor(1, 2); lcd.print("Status Device ");
lcd.setCursor(1, 3); lcd.print("Setting ");
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.write( 0 );
if (counter == 2){counter = 0; beep(); goto setMENU2;}
else if(counter == -2){counter = 0; beep(); goto setMENU4;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto set1;}
goto setMENU3;
//----------------------------------------------------------------------
setMENU4: // Pemutar Musik
lcd.setCursor(1, 0); lcd.print("Pemutar Musik ");
lcd.setCursor(1, 1); lcd.print("Tanggal & Waktu ");
lcd.setCursor(1, 2); lcd.print("Jadwalkan Agenda ");
lcd.setCursor(1, 3); lcd.print("Alarm ");
baca_rotary();
lcd.setCursor(0,0); lcd.write( 0 );
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep(); goto setMENU3;}
else if(counter == -2){counter = 0; beep(); goto setMENU5;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto pemutar_musik;}
goto setMENU4;
//----------------------------------------------------------------------
setMENU5: // Tanggal & Waktu
lcd.setCursor(1, 0); lcd.print("Pemutar Musik ");
lcd.setCursor(1, 1); lcd.print("Tanggal & Waktu ");
lcd.setCursor(1, 2); lcd.print("Jadwalkan Agenda ");
lcd.setCursor(1, 3); lcd.print("Alarm ");
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.write( 0 );
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep(); goto setMENU4;}
else if(counter == -2){counter = 0; beep(); goto setMENU6;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto tanggal_waktu;}
goto setMENU5;
//----------------------------------------------------------------------
setMENU6: // Jadwalkan Agenda
lcd.setCursor(1, 0); lcd.print("Pemutar Musik ");
lcd.setCursor(1, 1); lcd.print("Tanggal & Waktu ");
lcd.setCursor(1, 2); lcd.print("Jadwalkan Agenda ");
lcd.setCursor(1, 3); lcd.print("Alarm ");
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.write( 0 );
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep(); goto setMENU5;}
else if(counter == -2){counter = 0; beep(); goto setMENU7;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto jadwalkan_agenda;}
goto setMENU6;
//----------------------------------------------------------------------
setMENU7: // Alarm
lcd.setCursor(1, 0); lcd.print("Pemutar Musik ");
lcd.setCursor(1, 1); lcd.print("Tanggal & Waktu ");
lcd.setCursor(1, 2); lcd.print("Jadwalkan Agenda ");
lcd.setCursor(1, 3); lcd.print("Alarm ");
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.write( 0 );
if (counter == 2){counter = 0; beep(); goto setMENU6;}
else if(counter == -2){counter = 0; beep(); goto setMENU8;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto alarm;}
goto setMENU7;
//----------------------------------------------------------------------
setMENU8: // Stopwatch
lcd.setCursor(1, 0); lcd.print("Stopwatch ");
lcd.setCursor(1, 1); lcd.print("Timer ");
lcd.setCursor(1, 2); lcd.print("Sensor Suhu & Temp");
lcd.setCursor(1, 3); lcd.print("Simbol-Simbol ");
baca_rotary();
lcd.setCursor(0,0); lcd.write( 0 );
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep(); goto setMENU7;}
else if(counter == -2){counter = 0; beep(); goto setMENU9;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto stopwatch;}
goto setMENU8;
//----------------------------------------------------------------------
setMENU9: // Timer
lcd.setCursor(1, 0); lcd.print("Stopwatch ");
lcd.setCursor(1, 1); lcd.print("Timer ");
lcd.setCursor(1, 2); lcd.print("Sensor Suhu & Temp");
lcd.setCursor(1, 3); lcd.print("Simbol-Simbol ");
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.write( 0 );
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep(); goto setMENU8;}
else if(counter == -2){counter = 0; beep(); goto setMENU10;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto timer;}
goto setMENU9;
//----------------------------------------------------------------------
setMENU10: // Sensor Suhu & Temperatur
lcd.setCursor(1, 0); lcd.print("Stopwatch ");
lcd.setCursor(1, 1); lcd.print("Timer ");
lcd.setCursor(1, 2); lcd.print("Sensor Suhu & Temp");
lcd.setCursor(1, 3); lcd.print("Simbol-Simbol ");
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.write( 0 );
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep(); goto setMENU9;}
else if(counter == -2){counter = 0; beep(); goto setMENU11;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto sensor_DHT22;}
goto setMENU10;
//----------------------------------------------------------------------
setMENU11: // simbol-simbol
lcd.setCursor(1, 0); lcd.print("Stopwatch ");
lcd.setCursor(1, 1); lcd.print("Timer ");
lcd.setCursor(1, 2); lcd.print("Sensor Suhu & Temp");
lcd.setCursor(1, 3); lcd.print("Simbol-Simbol ");
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.write( 0 );
if (counter == 2){counter = 0; beep(); goto setMENU10;}
else if(counter == -2){counter = 0; beep(); goto setMENU0;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();goto simbol_simbol;}
goto setMENU11;
//----------------------------------------------------------------------
info_device: //
goto info_device;
//----------------------------------------------------------------------
status_device: //
goto status_device;
//--------------settingMenu--------------------------------------------------------
set1: //
lcd.setCursor(1,0); lcd.print("Setting ");
lcd.setCursor(1,1); lcd.print("Led Indikator = OFF ");
lcd.setCursor(1,2); lcd.print("Lampu Latar = ON ");
lcd.setCursor(1,3); lcd.print("Suara Tombol = OFF ");
baca_rotary();
lcd.setCursor(0,0); lcd.write( 0 );
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep(); goto set2;}
else if(counter == -2){counter = 0; beep(); goto set4;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} beep();lcd.clear();goto setMENU3;}
goto set1;
//---------------set BACKLIGHT---------------//
set2:
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.write( 0 );
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep();goto set3;}
else if(counter == -2){counter = 0; beep();goto set1;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while(digitalRead(tombol) == DITEKAN) {} led_indikator(); beep();goto set2;}
goto set2;
//---------------set BUZZER---------------//
set3:
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.write( 0 );
lcd.setCursor(0,3); lcd.print(" ");
if (counter == 2){counter = 0; beep();goto set4;}
else if(counter == -2){counter = 0; beep(); goto set2;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} lampu_latar(); beep();goto set3;}
goto set3;
//---------------set BUZZER---------------//
set4:
baca_rotary();
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,2); lcd.print(" ");
lcd.setCursor(0,3); lcd.write( 0 );
if (counter == 2){counter = 0; beep(); goto set1;}
else if(counter == -2){counter = 0; beep(); goto set3;}
else if(digitalRead(tombol) == DITEKAN){delay(BOUNCE); while (digitalRead(tombol) == DITEKAN){} cek_BUZZER(); beep(); goto set4;}
goto set4;
//----------------------------------------------------------------------
pemutar_musik: //
goto pemutar_musik;
//----------------------------------------------------------------------
tanggal_waktu: //
goto tanggal_waktu;
//----------------------------------------------------------------------
jadwalkan_agenda: //
goto jadwalkan_agenda;
//----------------------------------------------------------------------
alarm: //
goto alarm;
//----------------------------------------------------------------------
stopwatch: //
goto stopwatch;
//----------------------------------------------------------------------
timer: //
goto timer;
//----------------------------------------------------------------------
sensor_DHT22: //
goto sensor_DHT22;
//----------------------------------------------------------------------
simbol_simbol: //
goto simbol_simbol;
//----------------------------------------------------------------------
homeSET:
lcd.clear();
delay(100);
} //penutup void daftarMENU
//----------------------------------------------------------------------
//---------------FUNCTION ENCODER---------------//
void baca_rotary()
{
aState = digitalRead(outputA);
if (aState != aLastState){
if (digitalRead(outputB) != aState) {counter++;}
else{counter--;}
}
aLastState = aState;
}
//---------------FUNCTION LED1------------------//
void led_indikator()
{
if(LED1 == false){ digitalWrite(led1, HIGH); lcd.setCursor(17,1); lcd.print("ON "); LED1 = true;}
else{ digitalWrite(led1, LOW); lcd.setCursor(17,1); lcd.print("OFF");LED1 = false;}
}
//---------------FUNCTION BACKLIGHT-------------//
void lampu_latar()
{
if(BACKLIGHT == true){lcd.noBacklight();lcd.setCursor(17,2);lcd.print("OFF");BACKLIGHT = false;}
else{lcd.backlight(); lcd.setCursor(17,2);lcd.print("ON ");BACKLIGHT = true;}
}
//---------------FUNCTION BUZZER----------------//
void cek_BUZZER()
{
if(BUZZER == false){digitalWrite(buzzer, HIGH); delay(50); digitalWrite(buzzer, LOW); lcd.setCursor(17,3);lcd.print("ON "); BUZZER = true;}
else{digitalWrite(buzzer, LOW); lcd.setCursor(17,3); lcd.print("OFF"); BUZZER = false;}
}
//---------------FUNCTION beep------------------//
void beep()
{
if(BUZZER == true){digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW);}
}
//---------------FUNCTION baterai---------------//
void baterai_100 (){
lcd.setCursor(17, 0);lcd.write(4);lcd.setCursor(18, 0);lcd.write(5);lcd.setCursor(19, 0);lcd.write(6);
}
void baterai_65 (){
lcd.setCursor(17, 0);lcd.write(1);lcd.setCursor(18, 0);lcd.write(5);lcd.setCursor(19, 0);lcd.write(6);
}
void baterai_30 (){
lcd.setCursor(17, 0);lcd.write(1);lcd.setCursor(18, 0);lcd.write(2);lcd.setCursor(19, 0);lcd.write(6);
}
void baterai_0 (){
lcd.setCursor(17, 0);lcd.write(1);lcd.setCursor(18, 0);lcd.write(2);lcd.setCursor(19, 0);lcd.write(3);//delay(500);
//lcd.setCursor(17, 0);lcd.print(" ");lcd.setCursor(18, 0);lcd.print(" ");lcd.setCursor(19, 0);lcd.print(" ");//delay(500);
}
//----------------------------------------------------------------------