#include <WiFi.h>
#include <NTPClient.h> //untuk mengakses dan mengambil waktu dari server NTP (Network Time Protocol).
#include <WiFiUdp.h> //digunakan untuk mengatur dan mengelola komunikasi melalui protokol UDP (User Datagram Protocol) menggunakan koneksi WiFi.
//membuat sebuah variable
// Replace with your network credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//https://www.arduino.cc/reference/en/libraries/wifi/wifiudp/
//sintaks
WiFiUDP ntpUDP;
// By default 'pool.ntp.org' is used with 60 seconds update interval and no offset
// You can specify the time server pool and the offset, (in seconds)
// additionally you can specify the update interval (in milliseconds).
// NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000);
// NTPClient timeClient(ntpUDP);
NTPClient timeClient(ntpUDP, "asia.pool.ntp.org", 7 * 3600); // Adjust the time zone offset accordingly
// Variables to save date and time
String formattedDate;
String dayStamp;
String timeStamp;
//pin relay
const int relay1 = 23;
const int relay2 = 22;
const int relay3 = 21;
const int relay4 = 19;
const int relay5 = 18;
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
Serial.print("Connecting to WiFi ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Initialize a NTPClient to get time
timeClient.begin();
// Set offset time in seconds to adjust for your timezone, for example:
// GMT +1 = 3600
// GMT +8 = 28800
// GMT -1 = -3600
// GMT 0 = 0
//timeClient.setTimeOffset(3600);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
pinMode(relay5, OUTPUT);
}
void loop() {
timeClient.update(); // Memperbarui waktu
Serial.println(getFormattedDateTime());
//formattedDate = timeClient.getFormattedTime();
//Serial.println(formattedDate);
controlRelay();
delay(1000); // this speeds up the simulation
}
String getFormattedDateTime() {
String formattedDateTime = "";
String time = timeClient.getFormattedTime(); // Mendapatkan waktu dalam format HH:mm:ss
int day = timeClient.getDay(); // Mendapatkan hari dalam bentuk angka (0-6)
formattedDateTime += getDayName(day); // Mendapatkan nama hari berdasarkan indeks
formattedDateTime += ", ";
formattedDateTime += time;
return formattedDateTime;
}
String getDayName(int day) {
switch (day) {
case 0: return "Minggu";
case 1: return "Senin";
case 2: return "Selasa";
case 3: return "Rabu";
case 4: return "Kamis";
case 5: return "Jumat";
case 6: return "Sabtu";
default: return "";
}
}
void controlRelay() {
int currentHour = timeClient.getHours();
int currentMinute = timeClient.getMinutes();
int currentSecond = timeClient.getSeconds();
// Mengatur jadwal pompa pada pukul 06:00 pagi dan 18:00 sore
if ((currentHour == 19 && currentMinute == 55) || (currentHour == 20 && currentMinute == 21)) {
// Menyalakan pompa selama 3 menit
digitalWrite(relay1, HIGH);
Serial.println("Relay 1 Hidup");
delay(180000); // 3 Menit
digitalWrite(relay1, LOW);
Serial.println("Relay 1 Mati");
}
if ((currentHour == 20 && currentMinute == 00) || (currentHour == 20 && currentMinute == 21)) {
// Menyalakan pompa selama 3 menit
digitalWrite(relay2, HIGH);
Serial.println("Relay 2 Hidup");
delay(180000); // 3 Menit
digitalWrite(relay2, LOW);
Serial.println("Relay 2 Mati");
}
if ((currentHour == 20 && currentMinute == 05) || (currentHour == 20 && currentMinute == 21)) {
// Menyalakan pompa selama 3 menit
digitalWrite(relay3, HIGH);
Serial.println("Relay 3 Hidup");
delay(180000); // 3 Menit
digitalWrite(relay3, LOW);
Serial.println("Relay 3 Mati");
}
if ((currentHour == 20 && currentMinute == 10) || (currentHour == 20 && currentMinute == 21)) {
// Menyalakan pompa selama 3 menit
digitalWrite(relay4, HIGH);
Serial.println("Relay 4 Hidup");
delay(180000); // 3 Menit
digitalWrite(relay4, LOW);
Serial.println("Relay 4 Mati");
}
if ((currentHour == 20 && currentMinute == 21) || (currentHour == 16 && currentMinute == 00)) {
// Menyalakan pompa selama 3 menit
digitalWrite(relay5, HIGH);
Serial.println("Relay 5 Hidup");
delay(180000); // 3 Menit
digitalWrite(relay5, LOW);
Serial.println("Relay 5 Mati");
}
}