#define BLYNK_TEMPLATE_ID "TMPL6OlPcdeSU"
#define BLYNK_TEMPLATE_NAME "Pakan Ikan"
#define BLYNK_AUTH_TOKEN "A0goyeT-xVSJbQUQvtVl4O-XWYUC8gDe"
#define ECHO_PIN 15 // Pin Ultrasonik
#define TRIG_PIN 22 // Pin RTC
#define LED_PIN 27 // Pin Led
#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = "A0goyeT-xVSJbQUQvtVl4O-XWYUC8gDe";
const int servoPin = 2; // Pin Servo
Servo servo;
BlynkTimer timer;
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 rtc;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
servo.attach(servoPin);
servo.write(0);
lcd.init();
lcd.backlight();
lcd.clear();
Wire.begin();
if (!rtc.begin()) {
Serial.println("RTC tidak terhubung");
while (1);
}
pinMode(LED_PIN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Blynk.begin(auth, "Wokwi-GUEST", "");
lcd.clear();
}
void loop() {
Blynk.run();
DateTime now = rtc.now();
int tahun = now.year();
int bulan = now.month();
int tanggal = now.day();
int jam = now.hour();
int menit = now.minute();
int detik = now.second();
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration / 58;
lcd.setCursor(0, 0);
lcd.print(String() + "TANGGAL: " + tanggal + "-" + bulan + "-" + tahun);
lcd.setCursor(0, 1);
lcd.print(String() + "WAKTU: " + jam + ":" + menit + ":" + detik + " ");
// Pengaturan Led
if (distance < 20) {
digitalWrite(LED_PIN, HIGH); // Led akan menyala jika jarak kurang dari 20cm
Blynk.virtualWrite(V1, 1);
} else {
digitalWrite(LED_PIN, LOW);
Blynk.virtualWrite(V1, 0);
}
if ((jam == 7) && (menit == 0) && (detik == 5)) {
beripakan();
}
delay(1000);
}
void beripakan() {
int waktu = 5; // Durasi memberi makan ikan
for (waktu = 5; waktu > 0; waktu--) {
lcd.setCursor(0, 0);
lcd.print("Memberi Makan Ikan...");
lcd.setCursor(0, 1);
lcd.print("Dalam " + String(waktu) + " Detik");
servo.write(180);
delay(3000);
}
lcd.clear();
servo.write(0);
lcd.clear();
}