//referensi: https://mechatrofice.com/arduino/arduino-counter-code-circuit-working
//referensi: https://wokwi.com/projects/328456046596063828
#include <LiquidCrystal_I2C.h>
// membuat object untuk LCD dengan nama lcd
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
// ESP32 pin GIOP12, yang terhubung ke led
//deklarasi variabel led ungu pada pin 14
#define LedJanda 14
// mendefinisikan pin 12 untuk push button
#define button 12
//Tanggal dan waktu berfungsi menggunakan DS1307 RTC yang terhubung melalui I2C dan Wire library
#include "RTClib.h"
RTC_DS1307 rtc;
char weekDay[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu" };
int counterState=0;
String counterValue = "idup";
void setup()
{
//anu lcd or initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(2,0);
lcd.print("Hallo dunia!");
lcd.setCursor(3,1);
lcd.print("Vina-19011");
delay(3000);
lcd.clear();
//anu lampu led
pinMode(LedJanda, OUTPUT);
//anu button banh
pinMode(button, INPUT_PULLUP);
//anu rtc
rtc.begin();
}
void loop(){
clockOn();
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.println(weekDay[now.dayOfTheWeek()]);
lcd.setCursor(8, 0);
if(now.day()<10){
lcd.print("0");
}
lcd.print(now.day(), DEC);
lcd.print("/");
if(now.month()<10){
lcd.print("0");
}
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
lcd.setCursor(4, 1);
if(now.hour()<10){
lcd.print("0");
}
lcd.print(String(now.hour()));
lcd.print(":");
if(now.minute()<10){
lcd.print("0");
}
lcd.print(String(now.minute()));
lcd.print(":");
if(now.second()<10){
lcd.print("0");
}
lcd.print(String(now.second()));
}
void clockOn() {
counterState = digitalRead(button);
if(counterState==LOW){
if(counterValue=="rehat"){
counterValue="idup";
digitalWrite(LedJanda, HIGH);
delay(100);
} else if(counterValue=="idup"){
counterValue="rehat";
digitalWrite(LedJanda, LOW);
delay(100);
}
lcd.clear();
lcd.setCursor(2,0);
lcd.print("led or diyan");
lcd.setCursor(6,1);
lcd.print(counterValue);
delay(2000);
lcd.clear();
}
}