#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int resval = 0; // holds the value
int respin = A2; // sensor pin used
//keypad+button
const byte BUTTON = 8; // our button pin
const byte BUTTON2 =10; // our button pin
const byte LED = 11; // LED MULAI
const byte LED1 = 12; // LED PROSES
const byte LED2 = 13; // LED SELESAI
//output buzzer
const int buzzer= 9; // buzzer
//output relay
const byte Pembangkit = 4;
const byte OFF1 = 5;
const byte valve = 3;
const byte pompa = 2;
unsigned long buttonPushedMillis; // when button was released
unsigned long ledTurnedOnAt; // when led was turned on
unsigned long turnOnDelay = 100; // wait to turn on LED
unsigned long turnOffDelay = 6000; // turn off LED after this time00
bool ledReady = false; // flag for when button is let go
bool ledState = false; // for LED is on or not.
unsigned long buttonPushedMillis2; // when button was released
unsigned long ledTurnedOnAt2; // when led was turned on
unsigned long turnOnDelay2 = 100; // wait to turn on LED
unsigned long turnOffDelay2 = 900000; // turn off LED after this time00
bool ledReady2 = false; // flag for when button is let go
bool ledState2 = false; // for LED is on or not.
void setup() {
Serial.begin(9600);
//keypad+button
pinMode(BUTTON, INPUT_PULLUP);
pinMode(BUTTON2, INPUT_PULLUP);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
pinMode(LED1, OUTPUT);
digitalWrite(LED1, LOW);
pinMode(LED2, OUTPUT);
digitalWrite(LED2, LOW);
pinMode(buzzer, OUTPUT);
//output relay
pinMode(Pembangkit, OUTPUT);
//igitalWrite(Pembangkit, LOW);
pinMode(OFF1, OUTPUT);
digitalWrite(OFF1, HIGH);
// pinMode(OFF2, OUTPUT);
// digitalWrite(OFF2, LOW);
pinMode(valve, OUTPUT);
digitalWrite(valve, LOW);
pinMode(pompa, OUTPUT);
digitalWrite(pompa, LOW);
// display
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("ULTRASOUND");
lcd.setCursor(2, 1);
lcd.print("CLEANER");
delay (2000);
lcd.clear();
}
void loop() {
//=========================WATER LEVEL======================
resval = analogRead(respin); //Read data from analog pin and store it to resval variable
Serial.print("Water Level: ");
Serial.println( resval);
if (resval <= 100) {
Serial.println("Water Level: Empty");
lcd.setCursor(0, 1);
lcd.print("Level air:KOSONG");
//digitalWrite(pompa, HIGH);
}
else if (resval > 300 && resval <= 400)
{ Serial.println("Water Level: Medium");
lcd.setCursor(0, 1);
lcd.print("Level air:SEDANG");
//digitalWrite(pompa, HIGH);
}
else if (resval > 400) {
Serial.println("Water Level: High");
lcd.setCursor(0, 1);
lcd.print("Level air:PENUH");
lcd.print(" ");
//digitalWrite(pompa, LOW);
}
//===============================DISPLAY============================
lcd.setCursor(0, 0);
lcd.print("KONDISI-");
//================================================= timer 1==================================
unsigned long currentMillis = millis();
// check the button
if (digitalRead(BUTTON) == LOW) {
buttonPushedMillis = currentMillis;
ledReady = true;
digitalWrite(LED, HIGH);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
if (resval <= 100) {
Serial.println("Water Level: Empty");
lcd.setCursor(0, 1);
lcd.print("Level air:KOSONG");
digitalWrite(pompa, HIGH);
}
else if (resval > 300 && resval <= 400)
{ Serial.println("Water Level: Medium");
lcd.setCursor(0, 1);
lcd.print("Level air:SEDANG");
digitalWrite(pompa, LOW);
digitalWrite(OFF1, LOW);
}
}
// ================================PROSES1============================
if ( resval > 400){
if (ledReady) {
if ((unsigned long)(currentMillis - buttonPushedMillis) >= turnOnDelay) {
digitalWrite(Pembangkit, HIGH);
digitalWrite(LED, LOW);
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(pompa, LOW);
digitalWrite(OFF1, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KONDISI PROSES ");
ledState = true;
ledTurnedOnAt = currentMillis;
ledReady = false;
}
}}
// ================================SELESAI1============================
if (ledState) {
if ((unsigned long)(currentMillis - ledTurnedOnAt) >= turnOffDelay) {
ledState = false;
digitalWrite(Pembangkit, LOW);
digitalWrite(LED, LOW);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(pompa, LOW);
digitalWrite(valve, HIGH);
digitalWrite(OFF1, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KONDISI SELESAI ");
for (int i = 0; i < 3; i++) {
digitalWrite(buzzer, HIGH); // Menghidupkan LED
delay(500); // Menunggu selama 500 milidetik
digitalWrite(buzzer, LOW); // Mematikan LED
delay(500); // Menunggu selama 500 milidetik sebelum mengulang
}
while (true) {
// Tidak melakukan apa-apa setelah 3 kali kedip
}
}
}
//
//================================================= timer 2==================================
unsigned long currentMillis2 = millis();
// check the button
if (digitalRead(BUTTON2) == LOW) {
buttonPushedMillis2 = currentMillis2;
ledReady2 = true;
digitalWrite(LED, HIGH);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
if (resval <= 100) {
Serial.println("Water Level: Empty");
lcd.setCursor(0, 1);
lcd.print("Level air:KOSONG");
digitalWrite(pompa, HIGH);
}
else if (resval > 300 && resval <= 400)
{ Serial.println("Water Level: Medium");
lcd.setCursor(0, 1);
lcd.print("Level air:SEDANG");
digitalWrite(pompa, LOW);
digitalWrite(OFF1, LOW);
}
}
// ================================PROSES============================
if ( resval > 400){
if (ledReady2) {
if ((unsigned long)(currentMillis2 - buttonPushedMillis2) >= turnOnDelay2) {
digitalWrite(Pembangkit, HIGH);
digitalWrite(LED, LOW);
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(pompa, LOW);
digitalWrite(OFF1, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KONDISI PROSES ");
ledState2 = true;
ledTurnedOnAt2 = currentMillis2;
ledReady2 = false;
}
}}
// ================================SELESAI============================
if (ledState2) {
if ((unsigned long)(currentMillis2 - ledTurnedOnAt2) >= turnOffDelay2) {
ledState2 = false;
digitalWrite(Pembangkit, LOW);
digitalWrite(LED, LOW);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(pompa, LOW);
digitalWrite(valve, HIGH);
digitalWrite(OFF1, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KONDISI SELESAI ");
for (int i = 0; i < 3; i++) {
digitalWrite(buzzer, HIGH); // Menghidupkan LED
delay(500); // Menunggu selama 500 milidetik
digitalWrite(buzzer, LOW); // Mematikan LED
delay(500); // Menunggu selama 500 milidetik sebelum mengulang
}
while (true) {
// Tidak melakukan apa-apa setelah 3 kali kedip
}
}
}
}