#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include <ESP32Servo.h>
Servo s1; // untuk servo1
Servo s2; // untuk servo2
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS1307 rtc;
#define pot_slide 34
int sensorValues[4];
int currentIndex = 0;
bool Xstate = false;
bool checkedMinute = false;
#define pb1 15
#define pb2 17
#define sw1 2
#define sw_atas 32
#define sw_bawah 35
#define led1 5
#define led2 18
#define led3 19
#define servo1_pin 12
#define servo2_pin 13
bool stat_perluDolomit = false;
bool berat = false;
bool stat_servoTank = false;
bool stat_servoTuang = false;
int stat = 0;
bool stat_perluKuras = false;
bool btsAtas = false;
bool btsBawah = false;
bool stat_valveKuras = false;
bool stat_valveIsi = false;
bool sedang_ganti_air = false;
bool kuras = false;
int status = 0;
void setup(){
Serial.begin(115200);
pinMode(pot_slide, INPUT);
pinMode(pb1, INPUT_PULLUP);
pinMode(pb2, INPUT_PULLUP);
pinMode(sw1, INPUT_PULLUP);
pinMode(sw_atas, INPUT_PULLUP);
pinMode(sw_bawah, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
s1.attach(servo1_pin); // Menghubungkan servo1 ke pin 12
s2.attach(servo2_pin); // Menghubungkan servo2 ke pin 13
lcd.begin(20,4);
lcd.init();
lcd.backlight();
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running!");
}
}
void loop(){
/*
int input_sensor = analogRead(pot_slide);
DateTime now = rtc.now();
if(now.second() == 10){
Serial.println("reset checkedMinute");
checkedMinute = false;
}
if (checkedMinute == false){
Serial.println("Mengirim nilai pH ke ");
checkedMinute = true;
}
static int lastMinute = -1;
if (now.minute() != lastMinute){
sensorValues[currentIndex] = input_sensor;
currentIndex = (currentIndex + 1) % 4;
lastMinute = now.minute();
lcd.clear();
bool allNonZero = true;
for (int i = 0; i < 4; i++) {
if (sensorValues[i] == 0) {
allNonZero = false;
break;
}
}
if (allNonZero) {
Xstate = (sensorValues[0] < 1500 && sensorValues[1] < 1500 && sensorValues[2] < 1500 && sensorValues[3] < 1500);
if (Xstate){
Serial.println("Status x aktif karena semua data < 1500");
currentIndex = 0;
memset(sensorValues, 0, sizeof(sensorValues)); // Reset semua data array ke 0
return; // Keluar dari loop untuk mencegah penambahan currentIndex
}
}
Serial.print("Status X = ");
Serial.println(Xstate);
}
//MENAMPILKAN DATA PADA LCD
lcd.setCursor(0, 0);
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
lcd.setCursor(0,1);
lcd.print(sensorValues[0]);
lcd.setCursor(10,1);
lcd.print(sensorValues[2]);
lcd.setCursor(0,2);
lcd.print(sensorValues[1]);
lcd.setCursor(10,2);
lcd.print(sensorValues[3]);
lcd.setCursor(0, 3);
lcd.print("Sensor Values:");
lcd.print(input_sensor);
//MENAMPILKAN DATA PADA SERIAL MONITOR
delay(1000);
*/
if(digitalRead(pb1) == LOW){
stat_perluDolomit = true;
stat = 1;
}
if(digitalRead(sw1) == LOW){
berat = true;
} else{
berat = false;
}
//pengaturan servo domolit tank
if (stat == 1 && stat_berat == false){
stat_servoTank = true;
} else if (stat == 1 && stat_berat == true) {
stat_servoTank = false;
stat = 2;
}
//pengaturan servo penuang dolomit
if (stat == 2 && berat != 0 && stat_servoTank == false){
stat_servoTuang = true;
} else if (stat == 2 && berat == 0 && stat_servoTank == false){
stat_servoTuang = false;
stat = 3;
}
//kondisional kembali semula yaitu stat_perluDolomit = false;
if (stat_perluDolomit && stat == 3){
stat_perluDolomit = false;
stat = 0;
}
if (stat_servoTank){
s1.write(90);
} else{
s1.write(0);
}
if (stat_servoTuang){
s2.write(180);
} else{
s2.write(0);
}
//==================================================================================================
if(digitalRead(pb2) == LOW){
stat_perluKuras = true;
status = 1;
}
// waterAtas
if(digitalRead(sw_atas) == LOW){
btsAtas = true;
}
else{
btsAtas = false;
}
// waterBawah
if(digitalRead(sw_bawah) == LOW){
btsBawah = true;
}
else{
btsBawah = false;
}
if (status == 1 && btsBawah){
stat_valveKuras = true;
} else if (status == 1 && ~btsBawah){
stat_valveKuras = false;
status = 2;
}
if (status == 2 && (~btsAtas || ~btsBawah)){
stat_valveIsi = true;
} else if(status == 2 && (btsAtas && btsBawah)){
stat_valveIsi = false;
status = 3;
}
if(stat_perluKuras == true && status == 3){
stat_perluKuras = false;
status = 0;
}
//cetak variable
Serial.println("======================================================================================");
Serial.print("Perlu kuras = "); Serial.println(stat_perluKuras);
Serial.print("sw atas = "); Serial.println(btsAtas);
Serial.print("sw bawah = "); Serial.println(btsBawah);
Serial.print("relay kuras = "); Serial.println(stat_valveKuras);
Serial.print("relay isi = "); Serial.println(stat_valveIsi);
Serial.print("Status = "); Serial.println(status);
// Serial.print("Perlu Dolomit = "); Serial.println(stat_perluDolomit);
// Serial.print("Status Berat = "); Serial.println(berat);
// Serial.print("Servo Tank = "); Serial.println(stat_servoTank);
// Serial.print("Servo Tuang = "); Serial.println(stat_servoTuang);
// Serial.print("Stat = "); Serial.println(stat);
delay(1000);
}