#include <ESP32Servo.h>
#include <ThingsBoard.h>
#include <WiFi.h>
#include<stdlib.h>
#include <string.h>
#include "time.h"
#define ECHO_PIN 4
#define TRIG_PIN 2
#define pushbutton 13
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "er7HUrxy1DnfynRWqm8O"
const char* ntpServer = "3.id.pool.ntp.org";
const long gmtOffset_sec = 25200;
const int daylightOffset_sec = 0;
//RTC_DS1307 rtc;
Servo myservo;
int jarak = 0;
char thingsboardServer[] = "thingsboard.cloud";
WiFiClient client1;
ThingsBoard device1(client1);
int status = WL_IDLE_STATUS;
unsigned long lastSend;
char waktu[10];
void printLocalTime()
{
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
//Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
Serial.println(&timeinfo, "%d %B %Y %H:%M:%S");
}
void printTime(char* time)
{
struct tm timeinfo;
char data_time[20], shour[20], smin[20], ssec[20];
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
}
int Krish_hour = timeinfo.tm_hour;
int Krish_min = timeinfo.tm_min;
int Krish_sec = timeinfo.tm_sec;
//Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
//Serial.println(&timeinfo, "%H:%M:%S");
itoa(Krish_hour, shour, 10);
itoa(Krish_min, smin, 10);
itoa(Krish_sec, ssec, 10);
strcpy(data_time, shour);
strcat(data_time, ":");
strcat(data_time, smin);
strcat(data_time, ":");
strcat(data_time, ssec);
Serial.println(data_time);
strcpy(time, data_time);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
lastSend = 0;
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
myservo.attach(15);
myservo.write(90);
//connect to WiFi
Serial.printf("Connecting to %s ", WIFI_AP);
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");
//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void kerjaServo(){
Serial.println("servo buka pada : ");
printLocalTime();
for (int pos = 90; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(100);
Serial.println(pos);
}
for (int pos = 0; pos <= 90; pos += 1) {
// in steps of 1 degree
myservo.write(pos);
delay(100);
Serial.println(pos);
}
}
void loop() {
// put your main code here, to run repeatedly:
/*
Serial.println("\n");
jarak = readDistanceCM();
Serial.print("Waktu: ");
Serial.println();
printLocalTime();
Serial.print("Jarak: ");
Serial.print(jarak);
Serial.print("cm");
Serial.println();
*/
if(jarak >= 40 && jarak <=50){
printLocalTime();
Serial.println("makan hampir habis");
}
if(digitalRead(pushbutton) == HIGH){
kerjaServo();
delay(100);
}
char* data;
printTime(data);
Serial.println(data);
if((strcmp(data, "6:0:0")) == 0 || (strcmp(data, "12:0:0")) == 0 || (strcmp(data, "18:0:0")) == 0){
kerjaServo();
delay(100);
break;
}
}