#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
char daysOfTheWeek[7][12] = {"Ahad", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
#define MATI HIGH
#define HIDUP LOW
//group button
#define btnUp 3
#define btnDown 4
#define btnSelect 5
//group relay valve
#define relValve1 8
#define relValve2 9
//group relay pump
#define relPumpMentah 10
#define relPumpMateng 11
//group hc-05 hc mentah
#define hcEchoMentah1 22
#define hcTrigMentah1 23
//group hc-05 hc mateng 1
#define hcEchoMateng1 24
#define hcTrigMateng1 25
//group hc-05 hc mateng 2
#define hcEchoMateng2 26
#define hcTrigMateng2 27
//menu
byte menu = 0;
byte menuPengaturan = 0;
byte menuTestSystem = 0;
byte menuTornMentah = 0;
byte menuTornMateng1 = 0;
byte menuTornMateng2 = 0;
int menuKe = 0;
//ukuran tanki mentah
int minMentah = 0;
int maxMentah = 20;
int nminMentah = 0;
int nmaxMentah = 0;
byte addrminMentah = 0;
byte addrmaxMentah = 10;
//ukuran tanki mateng 1
int minMateng1 = 100;
int maxMateng1 = 20;
int nminMateng1 = 0;
int nmaxMateng1 = 0;
byte addrminMateng1 = 20;
byte addrmaxMateng1 = 30;
//ukuran tanki mateng 2
int minMateng2 = 100;
int maxMateng2 = 20;
int nminMateng2 = 0;
int nmaxMateng2 = 0;
byte addrminMateng2 = 40;
byte addrmaxMateng2 = 50;
//autoON
byte autoON = 0;
byte addrAutoON = 60;
bool iStart = false;
int bautoStart = 0;
//jeda
unsigned long jedaBacaBatasan = 200;
unsigned long prevBacaBatasan = 0;
unsigned long jedaMentah = 200;
unsigned long prevMentah = 0;
unsigned long jedaMateng1 = 200;
unsigned long prevMateng1 = 0;
unsigned long jedaMateng2 = 200;
unsigned long prevMateng2 = 0;
//jarak
long jarakMentah = 0;
long jarakMateng1 = 0;
long jarakMateng2 = 0;
//reset
void(* resetFunc) (void) = 0;
void setup() {
Serial.begin(9600);
lcd.begin();
greetings();
//button
pinMode(btnUp, INPUT_PULLUP);
pinMode(btnDown, INPUT_PULLUP);
pinMode(btnSelect, INPUT_PULLUP);
//relay valve
pinMode(relValve1, OUTPUT);
pinMode(relValve2, OUTPUT);
//relay pump
pinMode(relPumpMentah, OUTPUT);
pinMode(relPumpMateng, OUTPUT);
//hc mentah
pinMode(hcEchoMentah1, INPUT);
pinMode(hcTrigMentah1, INPUT);
//hc mateng1
pinMode(hcEchoMateng1, INPUT);
pinMode(hcTrigMateng1, INPUT);
//hc mateng 2
pinMode(hcEchoMateng2, INPUT);
pinMode(hcTrigMateng2, INPUT);
//off semua relay
allOFF();
iStart = autoStart() <= 0 ? false : true;
/*
if (readIntFromEEPROM(addrminMentah) < 0)
{
writeIntIntoEEPROM(addrminMentah, 100);
}
else
{
minMentah = readIntFromEEPROM(addrminMentah);
}
if (readIntFromEEPROM(addrmaxMentah) < 0) writeIntIntoEEPROM(addrmaxMentah, maxMentah);
if (readIntFromEEPROM(addrminMateng1) < 0) writeIntIntoEEPROM(addrminMateng1, minMateng1);
if (readIntFromEEPROM(addrmaxMateng1) < 0) writeIntIntoEEPROM(addrmaxMateng1, maxMateng1);
if (readIntFromEEPROM(addrminMateng2) < 0) writeIntIntoEEPROM(addrminMateng1, minMateng2);
if (readIntFromEEPROM(addrmaxMateng2) < 0) writeIntIntoEEPROM(addrmaxMateng1, maxMateng2);
if (readIntFromEEPROM(addrAutoON) < 0) writeIntIntoEEPROM(addrAutoON, autoON);
*/
//Serial.println(readIntFromEEPROM(addrminMentah));
//writeIntIntoEEPROM(addrminMentah, 100);
//Serial.println(readIntFromEEPROM(addrminMentah));
}
void loop() {
buttonUp();
buttonDown();
buttonSelect();
bacaBatasan();
//prosesMentah();
//prosesMateng();
}
void buttonUp()
{
if (!digitalRead(btnUp))
{
//Serial.println(menuKe);
switch (menuKe)
{
case 1:
if (iStart == false)
{
if (menu == 1) menu = 7;
menu--;
showMainMenu();
}
else
{
greetings();
}
break;
case 12:
if (menuPengaturan == 1) menuPengaturan = 6;
menuPengaturan--;
delay(100);
showPengaturanMenu();
break;
case 13:
if (menuTestSystem == 1) menuTestSystem = 7;
menuTestSystem--;
delay(100);
showTestSystemMenu();
break;
case 121: //menu pengaturan Torn Mentah
if (menuTornMentah == 1) menuTornMentah = 5;
menuTornMentah--;
delay(100);
showTornMentahMenu();
break;
case 122: //menu pengaturan Torn Mateng1
if (menuTornMateng1 == 1) menuTornMateng1 = 5;
menuTornMateng1--;
delay(100);
showTornMateng1Menu();
break;
case 123: //menu pengaturan Torn Mateng2
if (menuTornMateng2 == 1) menuTornMateng2 = 5;
menuTornMateng2--;
delay(100);
showTornMateng2Menu();
break;
case 1211: //mentah min
if (nminMentah <= 400)
{
nminMentah += 1;
lcd.setCursor(0, 1);
lcd.print(nminMentah);
lcd.print(" cm ");
delay(100);
}
break;
case 1212: //mentah max
if (nmaxMentah <= 400)
{
nmaxMentah += 1;
lcd.setCursor(0, 1);
lcd.print(nmaxMentah);
lcd.print(" cm ");
delay(100);
}
break;
// set torn mateng 1
case 1221: //mateng1 min
if (nminMateng1 <= 400)
{
nminMateng1 += 1;
lcd.setCursor(0, 1);
lcd.print(nminMateng1);
lcd.print(" cm ");
delay(100);
}
break;
case 1222: //mateng1 max
if (nmaxMateng1 <= 400)
{
nmaxMateng1 += 1;
lcd.setCursor(0, 1);
lcd.print(nmaxMateng1);
lcd.print(" cm ");
delay(100);
}
break;
// set torn mateng 2
case 1231: //mateng2 min
if (nminMateng2 <= 400)
{
nminMateng2 += 1;
lcd.setCursor(0, 1);
lcd.print(nminMateng2);
lcd.print(" cm ");
delay(100);
}
break;
case 1232: //mateng2 max
if (nmaxMateng2 <= 400)
{
nmaxMateng2 += 1;
lcd.setCursor(0, 1);
lcd.print(nmaxMateng2);
lcd.print(" cm ");
delay(100);
}
break;
}
//Serial.print("up : ");
//Serial.println(menu);
while (!digitalRead(btnUp));
}
}
void buttonDown()
{
if (!digitalRead(btnDown))
{
//Serial.println(menuKe);
switch (menuKe)
{
case 1:
if (iStart == false)
{
menu++;
delay(100);
showMainMenu();
}
else
{
greetings();
}
break;
case 12:
if (menuPengaturan == 5) menuPengaturan = 0;
menuPengaturan++;
delay(100);
showPengaturanMenu();
break;
case 13:
if (menuTestSystem == 6) menuTestSystem = 0;
menuTestSystem++;
delay(100);
showTestSystemMenu();
break;
case 121: //menu pengaturan Torn Mentah
if (menuTornMentah == 4) menuTornMentah = 0;
menuTornMentah++;
delay(100);
showTornMentahMenu();
break;
case 122: //menu pengaturan Torn Mateng 1
if (menuTornMateng1 == 4) menuTornMateng1 = 0;
menuTornMateng1++;
delay(100);
showTornMateng1Menu();
break;
case 123: //menu pengaturan Torn Mateng 2
if (menuTornMateng2 == 4) menuTornMateng2 = 0;
menuTornMateng2++;
delay(100);
showTornMateng2Menu();
break;
case 1211: //mentah min
if (nminMentah >= 1)
{
nminMentah -= 1;
lcd.setCursor(0, 1);
lcd.print(nminMentah);
lcd.print(" cm ");
delay(100);
}
break;
case 1212: //mentah max
if (nmaxMentah >= 1)
{
nmaxMentah -= 1;
lcd.setCursor(0, 1);
lcd.print(nmaxMentah);
lcd.print(" cm ");
delay(100);
}
break;
case 1221: //mateng1 min
if (nminMateng1 >= 1)
{
nminMateng1 -= 1;
lcd.setCursor(0, 1);
lcd.print(nminMateng1);
lcd.print(" cm ");
delay(100);
}
break;
case 1222: //mateng1 max
if (nmaxMateng1 >= 1)
{
nminMateng1 -= 1;
lcd.setCursor(0, 1);
lcd.print(nmaxMateng1);
lcd.print(" cm ");
delay(100);
}
break;
case 1231: //mateng2 min
if (nminMateng2 >= 1)
{
nminMateng2 -= 1;
lcd.setCursor(0, 1);
lcd.print(nminMateng2);
lcd.print(" cm ");
delay(100);
}
break;
case 1232: //mateng2 max
if (nmaxMateng2 >= 1)
{
nminMateng2 -= 1;
lcd.setCursor(0, 1);
lcd.print(nmaxMateng2);
lcd.print(" cm ");
delay(100);
}
break;
}
//Serial.print("up : ");
//Serial.println(menu);
while (!digitalRead(btnDown));
}
}
void buttonSelect()
{
if (!digitalRead(btnSelect))
{
//Serial.println(menuKe);
switch (menuKe)
{
case 0:
menuKe = 1;
menu = 1;
showMainMenu();
break;
case 1:
switch (menu)
{
case 1:
iStart = iStart == false ? true : false;
delay(100);
showMainMenu();
break;
case 2:
menuKe = 12;
menuPengaturan = 1;
delay(100);
showPengaturanMenu();
break;
case 3:
menuKe = 13;
menuTestSystem = 1;
delay(100);
showTestSystemMenu();
break;
case 4:
break;
case 5:
for (int i = 5; i > 0; i--)
{
lcd.clear();
lcd.print("Rebooting dalam...");
lcd.setCursor(0, 1);
lcd.print(i);
lcd.print(" detik");
if (i == 0) break;
delay(1000);
}
resetFunc();
break;
case 6:
greetings();
break;
}
break;
case 12: //menu pengaturan
switch (menuPengaturan)
{
case 1:
menuKe = 121;
menuTornMentah = 1;
delay(100);
showTornMentahMenu();
break;
case 2:
menuKe = 122;
menuTornMateng1 = 1;
delay(100);
showTornMateng1Menu();
break;
case 3:
menuKe = 123;
menuTornMateng2 = 1;
delay(100);
showTornMateng2Menu();
break;
case 4:
autoON = autoStart() <= 0 ? 1 : 0;
writeIntIntoEEPROM(addrAutoON, autoON);
delay(100);
showPengaturanMenu();
break;
case 5:
menuKe = 1;
showMainMenu();
break;
}
break;
case 13: //menu Test System
switch (menuTestSystem)
{
case 1:
for (int i = 10; i > 0; i--)
{
if (digitalRead(relPumpMentah) == MATI) pompaMentah(HIDUP);
lcd.clear();
lcd.print("Test Pompa MTH");
lcd.setCursor(0, 1);
lcd.print(i);
lcd.print(" detik");
if (i == 0) break;
delay(1000);
}
pompaMentah(MATI);
showTestSystemMenu();
break;
case 2:
for (int i = 10; i > 0; i--)
{
if (digitalRead(relPumpMateng) == MATI) pompaMateng(HIDUP);
lcd.clear();
lcd.print("Test Pompa MTG");
lcd.setCursor(0, 1);
lcd.print(i);
lcd.print(" detik");
if (i == 0) break;
delay(1000);
}
pompaMateng(MATI);
showTestSystemMenu();
break;
case 3:
for (int i = 5; i > 0; i--)
{
if (digitalRead(relValve1) == MATI) valve1(HIDUP);
lcd.clear();
lcd.print("Test Valve MTG 1");
lcd.setCursor(0, 1);
lcd.print(i);
lcd.print(" detik");
if (i == 0) break;
delay(1000);
}
valve1(MATI);
showTestSystemMenu();
break;
case 4:
for (int i = 5; i > 0; i--)
{
if (digitalRead(relValve2) == MATI) valve2(HIDUP);
lcd.clear();
lcd.print("Test Valve MTG 2");
lcd.setCursor(0, 1);
lcd.print(i);
lcd.print(" detik");
if (i == 0) break;
delay(1000);
}
valve2(MATI);
showTestSystemMenu();
break;
case 5:
menuKe = 1;
showMainMenu();
break;
}
break;
case 121:
switch (menuTornMentah)
{
case 1:
menuKe = 1211;
lcd.clear();
lcd.print("Set Min (ON)");
lcd.setCursor(0, 1);
lcd.print(minMentah);
lcd.print(" cm");
nminMentah = minMentah;
delay(100);
break;
case 2:
menuKe = 1212;
lcd.clear();
lcd.print("Set Max (OFF)");
lcd.setCursor(0, 1);
lcd.print(maxMentah);
lcd.print(" cm ");
nmaxMentah = maxMentah;
delay(100);
break;
case 3:
writeIntIntoEEPROM(addrminMentah, 100);
writeIntIntoEEPROM(addrmaxMentah, 20);
lcd.clear();
for (int i = 0; i < 70; i++) {
lcd.clear();
lcd.print("Reset OK!");
}
minMentah = readIntFromEEPROM(addrminMentah);
maxMentah = readIntFromEEPROM(addrmaxMentah);
menuTornMentah = 1;
showTornMentahMenu();
break;
case 4:
menuKe = 12;
showPengaturanMenu();
break;
}
break;
case 122: //menu Pengaturan --> Torn Matenng #1
switch (menuTornMateng1)
{
case 1:
menuKe = 1221;
lcd.clear();
lcd.print("Set Min (ON)");
lcd.setCursor(0, 1);
lcd.print(minMateng1);
lcd.print(" cm");
nminMateng1 = minMateng1;
delay(100);
break;
case 2:
menuKe = 1222;
lcd.clear();
lcd.print("Set Max (OFF)");
lcd.setCursor(0, 1);
lcd.print(maxMateng1);
lcd.print(" cm ");
nmaxMateng1 = maxMateng1;
delay(100);
break;
case 3:
writeIntIntoEEPROM(addrminMateng1, 100);
writeIntIntoEEPROM(addrmaxMateng1, 20);
lcd.clear();
for (int i = 0; i < 70; i++) {
lcd.clear();
lcd.print("Reset OK!");
}
minMateng1 = readIntFromEEPROM(addrminMateng1);
maxMateng1 = readIntFromEEPROM(addrmaxMateng1);
menuTornMateng1 = 1;
showTornMateng1Menu();
break;
case 4:
menuKe = 12;
showPengaturanMenu();
break;
}
break;
case 123: //menu Pengaturan --> Torn Matenng #2
switch (menuTornMateng2)
{
case 1:
menuKe = 1231;
lcd.clear();
lcd.print("Set Min (ON)");
lcd.setCursor(0, 1);
lcd.print(minMateng2);
lcd.print(" cm");
nminMateng2 = minMateng2;
delay(100);
break;
case 2:
menuKe = 1232;
lcd.clear();
lcd.print("Set Max (OFF)");
lcd.setCursor(0, 1);
lcd.print(maxMateng2);
lcd.print(" cm ");
nmaxMateng2 = maxMateng2;
delay(100);
break;
case 3:
writeIntIntoEEPROM(addrminMateng2, 100);
writeIntIntoEEPROM(addrmaxMateng2, 20);
lcd.clear();
for (int i = 0; i < 70; i++) {
lcd.clear();
lcd.print("Reset OK!");
}
minMateng2 = readIntFromEEPROM(addrminMateng2);
maxMateng2 = readIntFromEEPROM(addrmaxMateng2);
menuTornMateng2 = 1;
showTornMateng2Menu();
break;
case 4:
menuKe = 13;
showPengaturanMenu();
break;
}
break;
case 1211: //save Min Torn Mentah
writeIntIntoEEPROM(addrminMentah, nminMentah);
delay(100);
for (int i = 0; i < 40; i++) {
lcd.clear();
lcd.print("Disimpan ...");
}
menuKe = 121;
showTornMentahMenu();
break;
case 1212: //save Max Torn Mentah
writeIntIntoEEPROM(addrmaxMentah, nmaxMentah);
delay(100);
for (int i = 0; i < 40; i++) {
lcd.clear();
lcd.print("Disimpan ...");
}
menuKe = 121;
showTornMentahMenu();
break;
case 1221: //save Min Torn Mateng #1
writeIntIntoEEPROM(addrminMateng1, nminMateng1);
delay(100);
for (int i = 0; i < 40; i++) {
lcd.clear();
lcd.print("Disimpan ...");
}
menuKe = 122;
showTornMateng1Menu();
break;
case 1222: //save Max Torn Mateng #1
writeIntIntoEEPROM(addrmaxMateng1, nmaxMateng1);
delay(100);
for (int i = 0; i < 40; i++) {
lcd.clear();
lcd.print("Disimpan ...");
}
menuKe = 122;
showTornMateng1Menu();
break;
case 1231: //save Min Torn Mateng #2
writeIntIntoEEPROM(addrminMateng2, nminMateng2);
delay(100);
for (int i = 0; i < 40; i++) {
lcd.clear();
lcd.print("Disimpan ...");
}
menuKe = 123;
showTornMateng2Menu();
break;
case 1232: //save Max Torn Mateng #2
writeIntIntoEEPROM(addrmaxMateng2, nmaxMateng2);
delay(100);
for (int i = 0; i < 40; i++) {
lcd.clear();
lcd.print("Disimpan ...");
}
menuKe = 123;
showTornMateng2Menu();
break;
}
while (!digitalRead(btnSelect));
}
}
void showMainMenu()
{
String str;
menuKe = 1;
switch (menu)
{
case 1:
lcd.clear();
str = iStart == false ? "Start System" : "Stop System";
lcd.print(">");
lcd.print(str);
lcd.setCursor(0, 1);
lcd.print(" Pengaturan");
delay(100);
break;
case 2:
lcd.clear();
str = iStart == false ? "Start System" : "Stop System";
lcd.print(" ");
lcd.print(str);
lcd.setCursor(0, 1);
lcd.print(">Pengaturan");
delay(100);
break;
case 3:
lcd.clear();
lcd.print(" Pengaturan");
lcd.setCursor(0, 1);
lcd.print(">Test System");
delay(100);
break;
case 4:
lcd.clear();
lcd.print(" Test System");
lcd.setCursor(0, 1);
lcd.print(">Monitoring");
delay(100);
break;
case 5:
lcd.clear();
lcd.print(" Monitoring");
lcd.setCursor(0, 1);
lcd.print(">Reboot");
delay(100);
break;
case 6:
lcd.clear();
lcd.print(" Reboot");
lcd.setCursor(0, 1);
lcd.print(">Keluar");
delay(100);
break;
case 7:
menu = 0;
break;
}
}
void showPengaturanMenu()
{
menuKe = 12;
String str = "OFF";
switch (menuPengaturan)
{
case 1:
lcd.clear();
lcd.print(">Torn Mentah");
lcd.setCursor(0, 1);
lcd.print(" Torn Mateng #1");
delay(100);
break;
case 2:
lcd.clear();
lcd.print(" Torn Mentah");
lcd.setCursor(0, 1);
lcd.print(">Torn Mateng #1");
delay(100);
break;
case 3:
lcd.clear();
lcd.print(" Torn Mateng #1");
lcd.setCursor(0, 1);
lcd.print(">Torn Mateng #2");
delay(100);
break;
case 4:
lcd.clear();
lcd.print(" Torn Mateng #2");
lcd.setCursor(0, 1);
lcd.print(">Auto Start ");
str = autoStart() <= 0 ? "OFF" : "ON";
lcd.print(str);
delay(100);
break;
case 5:
lcd.clear();
lcd.print(" Auto Start ");
str = autoStart() <= 0 ? "OFF" : "ON";
lcd.print(str);
lcd.setCursor(0, 1);
lcd.print(">Keluar");
delay(100);
break;
}
}
void showTestSystemMenu()
{
menuKe = 13;
switch (menuTestSystem)
{
case 1:
lcd.clear();
lcd.print(">Pompa Mentah");
lcd.setCursor(0, 1);
lcd.print(" Pompa Mateng");
delay(100);
break;
case 2:
lcd.clear();
lcd.print(" Pompa Mentah");
lcd.setCursor(0, 1);
lcd.print(">Pompa Mateng");
delay(100);
break;
case 3:
lcd.clear();
lcd.print(">Valve Torn #1");
lcd.setCursor(0, 1);
lcd.print(" Valve Torn #2");
delay(100);
break;
case 4:
lcd.clear();
lcd.print(" Valve Torn #1");
lcd.setCursor(0, 1);
lcd.print(">Valve Torn #2");
delay(100);
break;
case 5:
lcd.clear();
lcd.print(" Valve Torn #2");
lcd.setCursor(0, 1);
lcd.print(">Keluar");
delay(100);
break;
}
}
void showTornMentahMenu()
{
menuKe = 121;
minMentah = readIntFromEEPROM(addrminMentah);
maxMentah = readIntFromEEPROM(addrmaxMentah);
switch (menuTornMentah)
{
case 1:
lcd.clear();
lcd.print(">Min : ");
lcd.print(minMentah);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print(" Maks : ");
lcd.print(maxMentah);
lcd.print(" cm");
delay(100);
break;
case 2:
lcd.clear();
lcd.print(" Min : ");
lcd.print(minMentah);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print(">Maks : ");
lcd.print(maxMentah);
lcd.print(" cm");
delay(100);
break;
case 3:
lcd.clear();
lcd.print(">Reset");
lcd.setCursor(0, 1);
lcd.print(" Keluar");
delay(100);
break;
case 4:
lcd.clear();
lcd.print(" Reset");
lcd.setCursor(0, 1);
lcd.print(">Keluar");
delay(100);
break;
}
}
void showTornMateng1Menu()
{
menuKe = 122;
minMateng1 = readIntFromEEPROM(addrminMateng1);
maxMateng1 = readIntFromEEPROM(addrmaxMateng1);
switch (menuTornMateng1)
{
case 1:
lcd.clear();
lcd.print(">Min : ");
lcd.print(minMateng1);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print(" Maks : ");
lcd.print(maxMateng1);
lcd.print(" cm");
delay(100);
break;
case 2:
lcd.clear();
lcd.print(" Min : ");
lcd.print(minMateng1);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print(">Maks : ");
lcd.print(maxMateng1);
lcd.print(" cm");
delay(100);
break;
case 3:
lcd.clear();
lcd.print(">Reset");
lcd.setCursor(0, 1);
lcd.print(" Keluar");
delay(100);
break;
case 4:
lcd.clear();
lcd.print(" Reset");
lcd.setCursor(0, 1);
lcd.print(">Keluar");
delay(100);
break;
}
}
void showTornMateng2Menu()
{
menuKe = 123;
minMateng2 = readIntFromEEPROM(addrminMateng2);
maxMateng2 = readIntFromEEPROM(addrmaxMateng2);
switch (menuTornMateng2)
{
case 1:
lcd.clear();
lcd.print(">Min : ");
lcd.print(minMateng2);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print(" Maks : ");
lcd.print(maxMateng2);
lcd.print(" cm");
delay(100);
break;
case 2:
lcd.clear();
lcd.print(" Min : ");
lcd.print(minMateng2);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print(">Maks : ");
lcd.print(maxMateng2);
lcd.print(" cm");
delay(100);
break;
case 3:
lcd.clear();
lcd.print(">Reset");
lcd.setCursor(0, 1);
lcd.print(" Keluar");
delay(100);
break;
case 4:
lcd.clear();
lcd.print(" Reset");
lcd.setCursor(0, 1);
lcd.print(">Keluar");
delay(100);
break;
}
}
void greetings()
{
menuKe = 0;
lcd.clear();
lcd.print("Water Treatment");
lcd.setCursor(0, 1);
lcd.print("Hubbul Wathon");
delay(100);
}
void allOFF()
{
digitalWrite(relValve1, MATI);
digitalWrite(relValve2, MATI);
digitalWrite(relPumpMentah, MATI);
digitalWrite(relPumpMateng, MATI);
}
void writeIntIntoEEPROM(int address, int number)
{
EEPROM.write(address, number >> 8);
EEPROM.write(address + 1, number & 0xFF);
}
int readIntFromEEPROM(int address)
{
return (EEPROM.read(address) << 8) + EEPROM.read(address + 1);
}
void bacaBatasan()
{
if (millis() - prevBacaBatasan >= jedaBacaBatasan)
{
prevBacaBatasan = millis();
minMentah = readIntFromEEPROM(addrminMentah);
maxMentah = readIntFromEEPROM(addrmaxMentah);
minMateng1 = readIntFromEEPROM(addrminMateng1);
maxMateng1 = readIntFromEEPROM(addrmaxMateng1);
minMateng2 = readIntFromEEPROM(addrminMateng2);
maxMateng2 = readIntFromEEPROM(addrmaxMateng2);
autoON = readIntFromEEPROM(addrAutoON);
}
}
void pompaMentah (int state)
{
digitalWrite(relPumpMentah, state);
}
void pompaMateng (int state)
{
digitalWrite(relPumpMateng, state);
}
void valve1 (int state)
{
digitalWrite(relValve1, state);
}
void valve2 (int state)
{
digitalWrite(relValve2, state);
}
int autoStart ()
{
int check = 0;
return readIntFromEEPROM(addrAutoON);
}
long bacaJarak(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT); // Clear the trigger
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// Sets the trigger pin to HIGH state for 10 microseconds
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// Reads the echo pin, and returns
// the sound wave travel time in microseconds
return pulseIn(echoPin, HIGH);
}
void prosesMentah()
{
if (millis() - prevMentah >= jedaMentah)
{
prevMentah = millis();
jarakMentah = 0.0344 / 2 * bacaJarak(hcTrigMentah1, hcEchoMentah1);
if (iStart)
{
if (jarakMentah <= minMentah)
{
pompaMentah(HIDUP);
}
else if (jarakMentah >= maxMentah)
{
pompaMentah(MATI);
}
}
}
}
void prosesMateng()
{
if (millis() - prevMateng1 >= jedaMateng1)
{
prevMateng1 = millis();
jarakMateng1 = 0.0344 / 2 * bacaJarak(hcTrigMateng1, hcEchoMateng1);
delay(100);
jarakMateng2 = 0.0344 / 2 * bacaJarak(hcTrigMateng2, hcEchoMateng2);
delay(100);
if (!iStart) exit(0);
if (jarakMateng1 <= minMateng1)
{
valve1(HIDUP);
if (digitalRead(relPumpMateng) == MATI) pompaMateng(HIDUP);
}
else if (jarakMateng1 >= maxMateng1)
{
if (digitalRead(relPumpMateng) == HIDUP && digitalRead(relValve2) == HIDUP)
{
valve1(MATI);
}
else if (digitalRead(relPumpMateng) == HIDUP && digitalRead(relValve2) == MATI)
{
pompaMateng(MATI);
}
}
if (jarakMateng2 <= minMateng2)
{
valve2(HIDUP);
if (digitalRead(relPumpMateng) == MATI) pompaMateng(HIDUP);
}
else if (jarakMateng2 >= maxMateng2)
{
if (digitalRead(relPumpMateng) == HIDUP && digitalRead(relValve1) == HIDUP)
{
valve2(MATI);
}
else if (digitalRead(relPumpMateng) == HIDUP && digitalRead(relValve1) == MATI)
{
pompaMateng(MATI);
}
}
}
}