#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
RTC_DS1307 rtc; // Ubah ke DS1307 karena Wokwi menggunakan modul ini
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C 0x27, 16 kolom dan 2 baris
Servo feederServo;
const int servoPin = 9; // Pin untuk servo
const int feedingHours[] = {8, 12, 16, 20}; // Waktu pemberian makan (jam)
const int numFeedings = sizeof(feedingHours) / sizeof(feedingHours[0]);
int nextFeedingIndex = 0;
void setup() {
Serial.begin(9600);
if (!rtc.begin()) {
Serial.println("RTC tidak terdeteksi");
while (1);
}
// Set waktu RTC (hanya untuk simulasi di Wokwi)
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
lcd.init();
lcd.backlight();
feederServo.attach(servoPin);
feederServo.write(0); // Posisi awal servo
}
void loop() {
DateTime now = rtc.now();
// Tampilkan waktu saat ini
lcd.setCursor(0, 0);
lcd.print("Waktu: ");
printDigits(now.hour());
lcd.print(':');
printDigits(now.minute());
// Cari waktu pemberian makan berikutnya
int nextFeeding = feedingHours[nextFeedingIndex];
// Tampilkan waktu pemberian makan berikutnya
lcd.setCursor(0, 1);
lcd.print("Feed: ");
printDigits(nextFeeding);
lcd.print(":00");
// Cek apakah sudah waktunya memberi makan
if (now.hour() == nextFeeding && now.minute() == 0 && now.second() == 0) {
feedFish();
nextFeedingIndex = (nextFeedingIndex + 1) % numFeedings;
}
delay(1000); // Tunggu 1 detik
}
void feedFish() {
lcd.clear();
lcd.print("Memberi makan...");
feederServo.write(90); // Putar servo ke posisi 90 derajat
delay(1000);
feederServo.write(0); // Kembalikan ke posisi awal
delay(3000); // Tampilkan pesan selama 3 detik
lcd.clear();
}
void printDigits(int digits) {
if (digits < 10) {
lcd.print('0');
}
lcd.print(digits);
}