#define BLYNK_TEMPLATE_ID "TMPL6h0gVlwjY"
#define BLYNK_TEMPLATE_NAME "UTSPAKANIKAN"
#define BLYNK_AUTH_TOKEN "WDdpHBimnT4hYCZ-RPSF9ORiZpxUfJb2"
#include <WiFi.h>
#include <WiFiClient.h>
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 rtc;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <ESP32Servo.h>
#include <BlynkSimpleEsp32.h> // Include the Blynk library
#define TRIG_PIN 32
#define ECHO_PIN 35
#define LED1 25
#define LED2 26
#define LED3 27
char auth[] = "WDdpHBimnT4hYCZ-RPSF9ORiZpxUfJb2";
const int servoPin = 5;
Servo mekanik;
void setup() {
Serial.begin(115200);
mekanik.attach(servoPin);
mekanik.write(0);
lcd.init();
lcd.backlight();
lcd.clear();
Wire.begin();
if (!rtc.begin()) {
Serial.println("RTC tidak terhubung");
while (1);
}
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
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, cm;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
cm = duration / 58;
lcd.setCursor(0, 0);
lcd.print(String() + "Date: " + tanggal + "-" + bulan + "-" + tahun);
lcd.setCursor(0, 1);
lcd.print(String() + "Time: " + jam + ":" + menit + ":" + detik + " ");
// Control LEDs based on distance
if (cm > 20) {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
Blynk.virtualWrite(V0, 1); // Set status LED di pin V0 menjadi ON
Blynk.virtualWrite(V1, 0); // Set status LED di pin V0 menjadi ON
Blynk.virtualWrite(V2, 0); // Set status LED di pin V0 menjadi ON
} else if (cm >= 10 && cm <= 20) {
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
Blynk.virtualWrite(V0, 0); // Set status LED di pin V0 menjadi ON
Blynk.virtualWrite(V1, 1); // Set status LED di pin V0 menjadi ON
Blynk.virtualWrite(V2, 0); // Set status LED di pin V0 menjadi ON
} else {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
Blynk.virtualWrite(V0, 0); // Set status LED di pin V0 menjadi ON
Blynk.virtualWrite(V1, 0); // Set status LED di pin V0 menjadi ON
Blynk.virtualWrite(V2, 1); // Set status LED di pin V0 menjadi ON
}
if (jam == 7 && menit == 0 && detik == 0) {
lcd.clear();
kasihpakanikan();
}
delay(1000);
}
void kasihpakanikan() {
int waktu = 5;
for (waktu = waktu; waktu >= 1; waktu -= 1) {
lcd.setCursor(0, 0);
lcd.print("Pakan Ikan Siap..");
lcd.setCursor(0, 1);
lcd.print("Dalam " + String(waktu) + " Detik");
mekanik.write(90);
delay(1000);
}
lcd.clear();
mekanik.write(0);
lcd.clear();
}