#include <RTClib.h>
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <WiFiMulti.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#define BOTtoken "6003355104:AAFIJy5IMZXX2n9mHkDbS8IES2JMMr-C-zY"
#define CHAT_ID "6638725491"
#define BAUD_RATE 115200
#define PIN_RELAY 16
char dataHari[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
String hari;
int tanggal, bulan, tahun, jam, menit, detik;
#include <ESP32Servo.h>
const int servoPin = 26;
Servo mekanik;
RTC_DS1307 rtc;
WiFiMulti wifiMulti;
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
#ifdef ESP8266
configTime(0, 0, "pool.ntp.org");
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
#endif
int botRequestDelay = 1000;
unsigned long lastTimeBotRan;
const int trigPin = 12;
const int echoPin = 14;
#define ECHO_PIN1 32
#define TRIG_PIN1 33
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701
long duration;
float distanceCm;
float distanceInch;
float dist_remnant;
int distance = 0;
int count = 0;
int potpin = 0;
int val;
bool RelayState = LOW;
float readDistanceCM() {
digitalWrite(TRIG_PIN1, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN1, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN1, LOW);
int duration1 = pulseIn(ECHO_PIN1, HIGH);
return duration1 * 0.034 / 2;
}
void kasihPakan(){
mekanik.write(45);
delay(1000);
mekanik.write(0);
}
void setup(){
Serial.begin(115200);
mekanik.attach(servoPin);
mekanik.write(0);
pinMode(PIN_RELAY, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(TRIG_PIN1, OUTPUT);
pinMode(ECHO_PIN1, INPUT);
WiFi.mode(WIFI_STA);
Serial.begin(BAUD_RATE);
wifiMulti.addAP("Redmi", "sup3rman1");
wifiMulti.addAP("TP-LINK", "sup3rman.");
wifiMulti.addAP("POWERBANK", "sup3rman");
wifiMulti.addAP("BOLT2.4G", "sup3rman");
wifiMulti.addAP("Wokwi-GUEST", "");
bot.sendMessage(CHAT_ID, "Bot started up", "");
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
if(!rtc.begin()){
Serial.println("RTC Tidak Terhubung");
while (1);
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void handleNewMessages(int numNewMessages) {
for (int i=0; i<numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
if (chat_id != CHAT_ID){
bot.sendMessage(chat_id, "Unauthorized user", "");
continue;
}
String text = bot.messages[i].text;
String from_name = bot.messages[i].from_name;
if (text == "/start") {
String welcome = "Welcome, " + from_name + ".\n";
welcome += "MENU KLIK AKSI \n\n";
welcome += "/TUANG_PAKAN \n";
welcome += "/CEK_KONEKSI \n";
welcome += "/CEK_STATUS_PAKAN \n";
welcome += "/RELAY_ON \n";
welcome += "/RELAY_OFF \n";
welcome += "/CEK_STATUS_RELAY \n";
bot.sendMessage(chat_id, welcome, "");
}
if (text == "/TUANG_PAKAN") {
bot.sendMessage(chat_id, "tuang pakan ", "");
kasihPakan();
}
if (text == "/CEK_KONEKSI") {
bot.sendMessage(CHAT_ID, "wifi koneksi " + String (WiFi.SSID()),"");
}
if (text == "/CEK_STATUS_PAKAN") {
bot.sendMessage(CHAT_ID, "sisa pakan:" + String (dist_remnant) + " cm \n","");
bot.sendMessage(CHAT_ID, "jarak sensor pakan: " + String (distanceCm) + " cm \n","");
}
if (text == "/RELAY_ON") {
bot.sendMessage(chat_id, "RELAY ON", "");
digitalWrite(PIN_RELAY , RelayState );
RelayState = HIGH;
}
if (text == "/RELAY_OFF") {
bot.sendMessage(chat_id, "RELAY OFF", "");
digitalWrite(PIN_RELAY , RelayState );
RelayState = LOW;
}
if (text == "/CEK_STATUS_RELAY") {
if (digitalRead(PIN_RELAY)){
bot.sendMessage(chat_id, "STATUS_ON", "");
}
else{
bot.sendMessage(chat_id, "STATUS_OFF", "");
}
}
}
}
void loop(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = duration * SOUND_SPEED/2;
dist_remnant = 27 - distanceCm;
if( distanceCm >= 27){
bot.sendMessage(CHAT_ID, "cek Makanan Habis:" + String (dist_remnant) + " cm \n","");
bot.sendMessage(CHAT_ID, "jarak pakan:" + String (distanceCm) + " cm \n","");
}
if(distance == 0){
}else {
Serial.println("Makanan Masih Ada!");
}
float distance = readDistanceCM();
if(distance <= 15){
mekanik.write(35);
delay (1000);
mekanik.write(0);
bot.sendMessage(CHAT_ID, "detek kucing,buka pakan" + String (readDistanceCM()) + " cm \n","");
}
if(distance == 0){
mekanik.write(0);
}
else{
mekanik.write(0);
}
if (wifiMulti.run() == WL_CONNECTED) {
Serial.print("Connected with: ");
Serial.print(WiFi.SSID());
Serial.print(" ");
Serial.println(WiFi.RSSI());
}
else {
Serial.println("WiFi not connected!");
bot.sendMessage(CHAT_ID, "wifi tidak koneksi " + String (WiFi.SSID()),"");
}
Serial.println(String() + "Tanggal: " + tanggal + "-" + bulan + "-" + tahun);
Serial.println(String() + "Waktu : " + jam + ":" + menit + ":" + detik);
DateTime now = rtc.now();
hari = dataHari[now.dayOfTheWeek()];
tanggal = now.day(), DEC;
bulan = now.month(), DEC;
tahun = now.year(), DEC;
jam = now.hour(), DEC;
menit = now.minute(), DEC;
detik = now.second(), DEC;
if(jam == 10 & menit == 49 & detik == 10){
mekanik.write(25);
bot.sendMessage(CHAT_ID, "jam pagi buka pakan");
}
if(jam == 10 & menit == 50 & detik == 10){
mekanik.write(35);
bot.sendMessage(CHAT_ID, "jam siang buka pakan");
}
if(jam == 10 & menit == 59 & detik == 10){
mekanik.write(55);
bot.sendMessage(CHAT_ID, "jam malam buka pakan");
}
if (millis() > lastTimeBotRan + botRequestDelay) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while(numNewMessages) {
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
lastTimeBotRan = millis();
}
}