#define pinServoMakanan 15
#define waktuBukaServo 1000//milidetik
#define servoBuka 90//derajat
#define servoTutup 0//derajat
#define waktuMakan1 DateTime(0, 1, 1, 8, 0, 0, 0)//jam 8 pagi
#define waktuMakan2 DateTime(0, 1, 1, 17, 0, 0, 0)//jam 5 sore
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include <ESP32Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);//coba juga 0x27
Servo servoMakanIkan;
RTC_DS1307 rtc;
DateTime dt;
byte detikSebelumnya;
char buf[17];
void setup() {
Serial.begin(9600);
Serial.println("Pemberi pakan ikan otomatis");
servoMakanIkan.attach(pinServoMakanan);
servoMakanIkan.write(servoTutup);
Wire.begin();
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
rtc.adjust(DateTime(__DATE__, __TIME__));
Wire.beginTransmission(0x27);
if (Wire.endTransmission())
{
lcd = LiquidCrystal_I2C(0x27, 16, 2);
}
lcd.init();
lcd.backlight();
lcd.print("Pemberi ");
lcd.setCursor(0, 1);
lcd.print("pakan ikan");
delay(3000);
lcd.clear();
Serial.println("Sistem mulai");
sprintf(buf, "Set waktu 1 = %02d:%02d (%lu)", waktuMakan1.hour(), waktuMakan1.minute(), waktuMakan1.get());
Serial.println(buf);
sprintf(buf, "Set waktu 2 = %02d:%02d (%lu)", waktuMakan2.hour(), waktuMakan2.minute(), waktuMakan2.get());
Serial.println(buf);
}
void loop() {
DateTime now = rtc.now();
if (detikSebelumnya != now.second())
{
sprintf(buf, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.setCursor(4, 0);
lcd.print(buf);
Serial.print(buf);
detikSebelumnya = now.second();
uint32_t epoch = now.get() % 86400;//hanya jam menit detik
if ((epoch == waktuMakan1.get()) ||
(epoch == waktuMakan2.get()))
{
char buf[17];
sprintf(buf, "Pakan = %02d:%02d", now.hour(), now.minute());
lcd.setCursor(0, 1);
lcd.print(buf);
Serial.println(buf);
servoMakanIkan.write(servoBuka);
delay(waktuBukaServo);
servoMakanIkan.write(servoTutup);
}
}
}