#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
RTC_DS3231 rtc;
Adafruit_SSD1306 display(128, 64, &Wire, -1); // Ganti -1 dengan pin reset jika diperlukan
const int relayPin = 4; // Pin untuk relay
int ledState = LOW; // Status awal LED
void setup() {
Serial.begin(9600);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // Pastikan relay mati saat mulai
// Inisialisasi RTC
if (!rtc.begin()) {
Serial.println("RTC tidak ditemukan!");
while (1);
}
// Inisialisasi OLED
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Alamat I2C untuk OLED
display.clearDisplay();
// Atur waktu RTC (hanya perlu dilakukan sekali)
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
DateTime now = rtc.now();
// Menghidupkan relay (dan LED) dari jam 17:00 hingga 22:00
// dan dari jam 03:00 hingga 06:00
if ((now.hour() >= 13 && now.hour() < 22) || (now.hour() >= 3 && now.hour() < 6)) {
digitalWrite(relayPin, HIGH); // Menghidupkan relay
ledState = !ledState; // Toggle state untuk berkedip
delay(500); // Waktu berkedip 500 ms
digitalWrite(relayPin, ledState); // Mengubah status relay
} else {
digitalWrite(relayPin, LOW); // Mematikan relay jika di luar jam yang ditentukan
}
// Tampilkan waktu dan status LED di OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Waktu: ");
display.print(now.hour());
display.print(":");
if (now.minute() < 10) display.print("0");
display.print(now.minute());
display.println();
display.print("Relay: ");
display.println(ledState == HIGH ? "ON" : "OFF");
display.display();
delay(500); // Delay untuk menghindari pembacaan terlalu cepat
}