#define pinServoMakanan 15
#define waktuBukaServo 1000//milidetik
#define servoBuka 20//derajat
#define servoTutup 60//derajat
#define waktuMakan1 DateTime(0, 1, 1, 8, 0, 0, 0)//jam 8 pagi SET WAKTU MAKAN 1
#define waktuMakan2 DateTime(0, 1, 1, 17, 0, 0, 0)//jam 5 sore SET WAKTU MAKAN 2
// #include <Wire.h>
// #include <LiquidCrystal_I2C.h>
#include "Sodaq_DS3231.h"
#include <Servo.h>
char weekDay[][6] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu" };
// LiquidCrystal_I2C lcd(0x3F, 16, 2);//coba juga 0x27
Servo servoMakanIkan;
byte detikSebelumnya;
char buf[17];
void setup() {
Serial.begin(9600);
Serial.println("Pemberi pakan ikan otomatis");
// Serial.println(" NGAPAK TECH PROJECT");
servoMakanIkan.attach(pinServoMakanan);
servoMakanIkan.write(servoTutup);
// Wire.begin();
rtc.begin();
//DateTime dt(2020, 10, 17, 20, 03, 0, 7); // set tanggal dan waktu (format): tahun, bulan,tanggal, jam, menit, detik, hari (1=minggu, 7=sabtu)
//rtc.setDateTime(dt);
// Wire.beginTransmission(0x3F);
// if (Wire.endTransmission())
// {
// lcd = LiquidCrystal_I2C(0x27, 16, 2);
// }
// lcd.init();
// lcd.backlight();
// lcd.print("Pakan Ikan AUTO ");
// lcd.setCursor(0, 1);
// lcd.print(" NGAPAK TECH ");
// 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();
rtc.convertTemperature();
lcd.setCursor(12, 1);
lcd.print("T:");
lcd.setCursor(14, 1);
lcd.print(rtc.getTemperature());//tampilan temperature
lcd.print("C");
lcd.setCursor(10, 0);
lcd.print(weekDay[now.dayOfWeek()]); //tampilan hari
lcd.setCursor(0, 1);
lcd.print(now.date(), DEC); // tanggal
lcd.print("/");
lcd.print(now.month(), DEC);//bulan
lcd.print("/");
lcd.print(now.year(), DEC); //tahun
if (detikSebelumnya != now.second())
{
sprintf(buf, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.setCursor(0, 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, "WAKTU = %02d:%02d", now.hour(), now.minute());
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(buf);
lcd.setCursor(0, 1);
lcd.print("Waktunya Makan!!");
Serial.println(buf);
// 4 KALI BUKA PAKAN , BISA DI KURANGIN/TAMBAH
servoMakanIkan.write(servoBuka);
delay(waktuBukaServo);
servoMakanIkan.write(servoTutup);
delay(1000);
servoMakanIkan.write(servoBuka);
delay(waktuBukaServo);
servoMakanIkan.write(servoTutup);
delay(1000);
servoMakanIkan.write(servoBuka);
delay(waktuBukaServo);
servoMakanIkan.write(servoTutup);
delay(1000);
servoMakanIkan.write(servoBuka);
delay(waktuBukaServo);
servoMakanIkan.write(servoTutup);
delay(3000);
lcd.clear();
}
}
}