#include "RTClib.h"
#include <Servo.h>
#if defined(ESP8266)
#include <ESP32WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
#include <ThingsBoard.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "OVueW238VK8Dytqk0pA7"
#define THINGSBOARD_SERVER "thingsboard.cloud"
#define echo 12
#define trig 13
WiFiClient espClient;
ThingsBoard tb(espClient);
int status = WL_IDLE_STATUS;
RTC_DS3231 rtc;
Servo mekanik;
char dataHari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
String hari;
int tanggal, bulan, tahun, jam, menit, detik;
void setup () {
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
initWiFi();
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("RTC Tidak Ditemukan");
Serial.flush();
abort();
}
mekanik.attach(2);
mekanik.write(0);
//Atur Waktu
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//rtc.adjust(DateTime(2022, 9, 13, 12, 22, 0));
}
float readDistanceCM() {
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
int duration = pulseIn(echo, HIGH);
return duration * 0.034 / 2;
}
void loop () {
float distance = readDistanceCM();
if (distance >= 400 || distance <= 2){
distance = 0;
}
if(WiFi.status() != WL_CONNECTED) {
reconnect();
}
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;
Serial.println(String() + hari + ", " + tanggal + "-" + bulan + "-" + tahun);
Serial.println(String() + jam + ":" + menit + ":" + detik);
Serial.println();
delay(1000);
// waktu memberi makan
if(jam == 6 & menit == 35 & detik == 1){
kasih_pakan(1);
}
if(jam == 12 & menit == 14 & detik == 1){
kasih_pakan(1);
}if(jam == 17 & menit == 9 & detik == 1){
kasih_pakan(1);
}
if(!tb.connected()) {
Serial.print("Connecting to : ");
Serial.print(THINGSBOARD_SERVER);
Serial.print(" with token ");
Serial.print(TOKEN);
if(!tb.connect(THINGSBOARD_SERVER, TOKEN)) {
Serial.println("Failed to connect");
return;
}
}
Serial.println("Sending data...");
Serial.print("Distance : ");
Serial.println(distance);
tb.sendTelemetryFloat("Jarak", distance);
tb.loop();
}
void kasih_pakan(int jumlah){
for(int i=1; i <= jumlah; i++){
mekanik.write(150);
delay(500);
mekanik.write(0);
delay(100);
}
}
void initWiFi()
{
Serial.println("Connecting to AP ...");
// attempt to connect to WiFi network
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
void reconnect() {
// Loop until we're reconnected
status = WiFi.status();
if ( status != WL_CONNECTED) {
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
}