#include <WiFi.h>
#include "time.h"
#include <ESP32Servo.h>
//const char* ssid = "SSID";
//const char* password = "PASS";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 25200;
const int daylightOffset_sec = 3600;
const int servoPin = 18;
#define p1_ledPin 15 // LED Red
#define p2_ledPin 2 // LED Green
#define p3_BUZ 4 // LED Blue or Buzzer
int detik = 0;
int menit = 0;
int jam = 0;
int pos = 0;
int i = 0;
int state = 0;
//Change alarm here
int alm1j = 12; //hour
int alm1m = 40; //minutes
int alm1d = 30; //seconds
int alm2j = 12; //hour
int alm2m = 43; //minutes
int alm2d = 30; //seconds
int alm3j = 12; //hour
int alm3m = 45; //minutes
int alm3d = 30; //seconds
struct tm timeinfo;
Servo servo;
void feed() {
Serial.println("FEEDINGS");
if (pos == 0) {
for (pos = 0; pos <= 120; pos += 1) {
servo.write(pos);
delay(15);
}
}
}
void unfeed() {
Serial.println("STOP FEEDINGS");
if (pos == 120) {
for (pos = 120; pos >= 0; pos -= 1) {
servo.write(pos);
delay(15);
}
}
}
void alarm() {
detik = timeinfo.tm_sec;
menit = timeinfo.tm_min;
jam = timeinfo.tm_hour;
Serial.print(jam);
Serial.print("-");
Serial.print(menit);
Serial.print("-");
Serial.println(detik);
if (jam == alm1j && menit == alm1m && detik < alm1d) {
feed();
while (i < 29 ) {
Serial.println("FEEDING");
digitalWrite(p3_BUZ, HIGH);
delay(500);
digitalWrite(p3_BUZ, LOW);
delay(500);
i += 1;
}
unfeed();
i = 0;
}
if (jam == alm2j && menit == alm2m && detik < alm2d) {
feed();
while (i < 29 ) {
Serial.println("FEEDING");
digitalWrite(p3_BUZ, HIGH);
delay(500);
digitalWrite(p3_BUZ, LOW);
delay(500);
i += 1;
}
unfeed();
i = 0;
}
if (jam == alm3j && menit == alm3m && detik < alm3d) {
feed();
while (i < 29 ) {
Serial.println("FEEDING");
digitalWrite(p3_BUZ, HIGH);
delay(500);
digitalWrite(p3_BUZ, LOW);
delay(500);
i += 1;
}
unfeed();
i = 0;
}
}
void printLocalTime() {
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}
void setup() {
servo.attach(servoPin, 500, 2400);
Serial.begin(115200);
pinMode(p1_ledPin, OUTPUT);
pinMode(p2_ledPin, OUTPUT);
pinMode(p3_BUZ, OUTPUT);
//Uncomment if USING WOKWI SIMULATOR
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
//Uncomment if USING your WIFI
//Serial.printf("Connecting to %s ", ssid);
//WiFi.begin(ssid, password);
//while (WiFi.status() != WL_CONNECTED) {
// delay(500);
// Serial.print(".");
// digitalWrite(p1_ledPin, HIGH);
// digitalWrite(p2_ledPin, LOW);
//}
Serial.println(" CONNECTED");
digitalWrite(p3_BUZ, HIGH);
delay(500);
//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
//disconnect WiFi as it's no longer needed
//WiFi.disconnect(true);
//WiFi.mode(WIFI_OFF);
}
void loop() {
digitalWrite(p3_BUZ, LOW);
digitalWrite(p1_ledPin, HIGH);
digitalWrite(p2_ledPin, LOW);
delay(500);
digitalWrite(p1_ledPin, LOW);
digitalWrite(p2_ledPin, HIGH);
delay(500);
printLocalTime();
alarm();
}