#include <Wire.h>
#include <RTClib.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
//Membuat objek komponen
RTC_DS1307 rtc;
Servo servoPakan;
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Pengaturan pin
const int pinServo = 6;
//Posisi servo
const int posisiTutup = 0;
const int posisiBuka = 90;
//Jadwal pemberian pakan
const int jamPagi = 7;
const int jamSore = 17;
//Penanda agar pakan tidak diberikan berulang
int tanggalPagiTerakhir = 0;
int tanggalSoreTerakhir = 0;
//Mengubah tanggal menjadi angka YYYYMMDD
int buatTanggal (DateTime waktu) {
return waktu.year() * 10000 +
waktu.month() * 100 +
waktu.day();
}
//Fungsi pemberian pakan
void beriPakan() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Memberi Pakan");
servoPakan.write(posisiBuka);
delay(1000);
servoPakan.write(posisiTutup);
lcd.setCursor(0, 1);
lcd.print("Pakan Selesai");
delay(1500);
}
void setup() {
Serial.begin(9600);
//Mengaktifkan RTC
Wire.begin();
rtc.begin();
//Mengaktifkan LCD
lcd.init();
lcd.backlight();
//Mengaktifkan servo
servoPakan.attach(pinServo);
servoPakan.write(posisiTutup);
lcd.setCursor(0, 0);
lcd.print("Pakan Otomatis");
lcd.setCursor(0, 1);
lcd.print("Sistem Aktif");
delay(2000);
lcd.clear();
}
void loop() {
//Membaca waktu dari RTC
DateTime sekarang = rtc.now();
int jam = sekarang.hour();
int menit = sekarang.minute();
int hariIni = buatTanggal(sekarang);
//Menampilkan waktu pada LCD
lcd.print(0, 0);
lcd.print("Jam: ");
if (jam < 10) lcd.print("0");
lcd.print(jam);
lcd.print(":");
if(menit < 10) lcd.print("0");
lcd.print(menit);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Jadwal: 07/17");
//Jadwal pagi
if (jam == jamPagi && menit == 0){
if (tanggalPagiTerakhir != hariIni){
beriPakan();
tanggalPagiTerakhir = hariIni;
}
}
//Jadwal sore
if (jam == jamSore && menit == 0) {
if (tanggalPagiTerakhir != hariIni) {
beriPakan();
tanggalSoreTerakhir = hariIni;
}
}
delay(1000);
}