#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
#include <RTClib.h> // Library untuk RTC
#define RTC_SDA A4 // Pin data SDA RTC
#define RTC_SCL A5 // Pin data SCL RTC
#define BUTTON1 2 // Pin tombol 1
#define BUTTON2 3 // Pin tombol 2
#define BUTTON3 4 // Pin tombol 3
#define BUTTON4 5 // Pin tombol 4
#define LED1 6 // Pin LED 1
#define LED2 7 // Pin LED 2
#define LED3 8 // Pin LED 3
#define BUZZER 9 // Pin buzzer
LiquidCrystal_I2C lcd(0x3F, 16, 2); // Inisialisasi LCD dengan alamat I2C 0x3F
DS3231 rtc(SDA, SCL); // Inisialisasi RTC dengan pin SDA dan SCL
void setup() {
// Inisialisasi pin-button sebagai input
pinMode(BUTTON1, INPUT_PULLUP);
pinMode(BUTTON2, INPUT_PULLUP);
pinMode(BUTTON3, INPUT_PULLUP);
pinMode(BUTTON4, INPUT_PULLUP);
// Inisialisasi pin-LED sebagai output
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
// Inisialisasi pin-buzzer sebagai output
pinMode(BUZZER, OUTPUT);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
}
void loop() {
// Baca nilai tombol
int buttonState1 = digitalRead(BUTTON1);
int buttonState2 = digitalRead(BUTTON2);
int buttonState3 = digitalRead(BUTTON3);
int buttonState4 = digitalRead(BUTTON4);
// Baca waktu dari RTC
DateTime now = rtc.now();
// Tampilkan waktu di LCD
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
// Kendalikan LED sesuai dengan tombol yang ditekan
if (buttonState1 == LOW) {
digitalWrite(LED1, HIGH);
} else {
digitalWrite(LED1, LOW);
}
if (buttonState2 == LOW) {
digitalWrite(LED2, HIGH);
} else {
digitalWrite(LED2, LOW);
}
if (buttonState3 == LOW) {
digitalWrite(LED3, HIGH);
} else {
digitalWrite(LED3, LOW);
}
// Aktifkan buzzer jika tombol 4 ditekan
if (buttonState4 == LOW) {
tone(BUZZER, 1000); // Aktifkan buzzer dengan frekuensi 1000 Hz
} else {
noTone(BUZZER); // Matikan buzzer
}
// Delay sejenak
delay(1000);
}