#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27,16,2);
RTC_DS1307 RTC;
//RTC_DS3231 RTC;
unsigned long waktu_sebelumnya = 0;
const int buzzer=11;
const int relay=9;
Servo servo1;
void setup() {
lcd.init();
lcd.backlight();
RTC.begin();
pinMode(buzzer,OUTPUT);
pinMode(relay, OUTPUT);
digitalWrite(relay,HIGH); //memastikan keadaan awal relay mati
servo1.attach(10);
servo1.write(0); // katup tertutup
lcd.setCursor(4,0);
lcd.print("Project");
lcd.setCursor(2,1);
lcd.print("Jam Digital");
delay(3000);
lcd.clear();
}
void loop() {
//tone(buzzer,500);
//digitalWrite(buzzer,HIGH);
unsigned long waktu_sekarang = millis();
DateTime baca_rtc = RTC.now();
tampilan_utama();
int alarm_jam=24;
int alarm_menit=00;
if (baca_rtc.hour() == alarm_jam && baca_rtc.minute() == alarm_menit)
{
tone(buzzer,500);
servo1.write(180); // katup terbuka
digitalWrite(relay,LOW); //Relay menyala
lcd.setCursor(0,1);
lcd.print(" Waktunya Makan ");
delay(3000);
lcd.clear();
while (baca_rtc.hour() == alarm_jam && baca_rtc.minute() == alarm_menit)
{
tampilan_utama();
noTone(buzzer);
servo1.write(0); // katup tertutup
digitalWrite(relay,HIGH);
}
}
if(waktu_sekarang - waktu_sebelumnya >= 10800000) // Tiap 3 Jam (60000 detik = 1 menit (60000 x 60 menit = 3600000 x 3 jam = 10800000))
{
waktu_sebelumnya = waktu_sekarang;
tone(buzzer,500);
servo1.write(180); // katup terbuka
digitalWrite(relay,LOW); //Relay menyala
lcd.setCursor(0,1);
lcd.print(" Waktunya Makan ");
delay(3000);
lcd.clear();
}
else
{
noTone(buzzer);
servo1.write(0); // katup tertutup\
digitalWrite(relay,HIGH);
}
}
void tampilan_utama()
{
DateTime baca_rtc = RTC.now();
lcd.setCursor(0,0);
lcd.print("DATE: ");
lcd.print(baca_rtc.year());
lcd.print("/");
lcd.print(baca_rtc.month());
lcd.print("/");
lcd.print(baca_rtc.day());
lcd.setCursor(0,1);
lcd.print("TIME: ");
lcd.print(baca_rtc.hour());
lcd.print("/");
lcd.print(baca_rtc.minute());
lcd.print("/");
lcd.print(baca_rtc.second());
lcd.print(" ");
}