// #include <Wire.h>
#include <LiquidCrystal_I2C.h>
// #include <DS1307RTC.h>
#include <Servo.h>
#include "Sodaq_DS3231.h"
// #include <RTClib.h>
#define pinServo 3
#define ECHO_PIN 9
#define TRIG_PIN 8
#define timeServoOpen 1000 // ms
#define servoOpen 20 // degree
#define servoClose 60 // degree
#define timeToEat1 DateTime(0, 1, 1, 8, 0, 0, 0) // 08:00
#define timeToEat2 DateTime(0, 1, 1, 17, 0, 0, 0) // 17:00
LiquidCrystal_I2C lcd(0x27,20,4);
Servo servo;
byte lastSecond;
char buf[17];
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup() {
Serial.begin(9600);
Serial.println("Pakan Ikan Otomatis");
Serial.println("By:Kelompok 4 IOT3-10");
Serial.println("---------------------");
// Init servo
servo.attach(pinServo);
servo.write(servoClose);
// Init ultrasonic
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Init RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
// Init LCD
lcd.init();
lcd.backlight();
Serial.println("Sistem mulai");
sprintf(buf, "Waktu makan 1 = %02d:%02d", timeToEat1.hour(), timeToEat1.minute());
Serial.println(buf);
sprintf(buf, "Waktu makan 2 = %02d:%02d", timeToEat2.hour(), timeToEat2.minute());
Serial.println(buf);
}
float readDistanceUltrasonic() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void loop() {
DateTime now = rtc.now();
// Write ultrasonic
Serial.print("Jarak: ");
Serial.println(readDistanceUltrasonic());
if (readDistanceUltrasonic() > 68) {
Serial.println("Pakan habis, segera isi pakan anda");
lcd.setCursor(0, 1);
lcd.println("Status: Empty");
} else if (readDistanceUltrasonic() < 68 && readDistanceUltrasonic() >= 60) {
Serial.println("Pakan hampir habis");
lcd.setCursor(0, 1);
lcd.println("Status: Warning");
} else {
lcd.setCursor(0, 1);
lcd.println("Status: Good");
}
delay(1000);
if (lastSecond != now.second()) {
sprintf(buf, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.setCursor(0, 0);
lcd.print(buf);
Serial.println(buf);
lastSecond = now.second();
uint32_t epoch = now.get() % 86400;
// Serial.println(epoch);
// Serial.println(timeToEat1.get());
// Serial.println(timeToEat2.get());
Serial.println("-------");
if (epoch == timeToEat1.get() || epoch == timeToEat2.get()) {
Serial.println("Waktunya makan");
char buf[17];
sprintf(buf, "Pakan = %02d:%02d", now.hour(), now.minute());
lcd.setCursor(0, 1);
lcd.println(buf);
Serial.println(buf);
servo.write(servoOpen);
delay(timeServoOpen);
servo.write(servoClose);
}
}
}