#include <Servo.h>
Servo myservo;
#include <RTClib.h>
RTC_DS1307 rtc;
#define ECHO_PIN 3
#define TRIG_PIN 4
#define vibrator 2
#define buzzer 5
int a = 0;
int tombol = A2;
int reset ;
byte detik = 0, menit = 0, jam = 0, flag = 0;
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(vibrator, OUTPUT);
pinMode(tombol, INPUT_PULLUP);
myservo.attach(11);
myservo.write(0);
rtc.begin();
// Atur waktu RTC jika belum diset
if (!rtc.begin()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
delay(800);
bacaSensor();
baca_tombol();
}
void bacaSensor(){
// Baca waktu saat ini dari RTC
DateTime now = rtc.now();
Serial.print("Waktu : ");
Serial.print(now.hour(), DEC);
Serial.print(":");
Serial.print(now.minute(), DEC);
Serial.print(":");
Serial.println(now.second(), DEC);
// Kondisi Pakan Penuh
if (a == LOW){
// Cek kondisi waktu dan atur pengendalian LED
if (now.hour() == 16 && now.minute() == 9 && now.second() == 0){
// Aktif Memberi Makan Ikan
flag = 1;
}
if (flag == 1){
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
Serial.print("Kondisi Pakan : ");
Serial.print(distance);
Serial.println(" Cm");
if (distance >= 0 && distance <= 100){
myservo.write(90);
delay(15);
digitalWrite (vibrator, HIGH);
Serial.println("Pakan Masih Ada");
}
if (distance > 100 && distance <= 130){
myservo.write(30);
delay(15);
digitalWrite (vibrator, HIGH);
Serial.println("Pakan Mau Habis");
}
if (distance >130){
digitalWrite(vibrator, LOW);
myservo.write(0);
delay(15);
tone (buzzer, 120);
delay(500);
noTone(buzzer);
Serial.println("Pakan Habis, Segera Isi Pakan");
Serial.println("Aktifkan Tombol Riset");
}
}
if (now.hour() == 16 && now.minute() == 10 && now.second() == 0){
flag = 0;
digitalWrite(vibrator, LOW);
myservo.write(0);
delay(15);
tone (buzzer, 120);
delay(500);
noTone(buzzer);
Serial.println("Pemberian Makan Selesai");
delay(100);
}
Serial.println("Sistem Standby");
if (a == HIGH){
noTone(buzzer);
Serial.println("Sistem Standby");
}
}
}
void baca_tombol(){
reset = digitalRead(tombol);
if (reset == LOW) {
a = 0;
}
if (reset == HIGH){
digitalWrite(vibrator, LOW);
myservo.write(0);
delay(15);
a = 1;
}
}