#include <WiFi.h>
#include "LiquidCrystal_I2C.h"
#define PIN_TRIG 2
#define PIN_ECHO 15
#define PIN_RELAY 4
// Build with Love Muhammad Fauzan
LiquidCrystal_I2C LCD(0x27, 20, 4);
void setup() {
Serial.begin(9600);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(PIN_RELAY, OUTPUT);
LCD.init();
LCD.backlight();
digitalWrite(PIN_RELAY, HIGH);
}
void loop() {
/**
Acceptance Criteria :
1. Panjang tandon dan jarak sensor HCSR04 ke dasar tandon adalah 50 cm
2. Maksimal ketinggian tandon yang bisa diisi air 40 cm
3. Pompa akan hidup/bekerja hanya ketika ketinggian air di tandon
kecil atau sama dengan 10 cm saja, dan berhenti ketika ketinggian air di 40cm
*/
digitalWrite(PIN_RELAY, LOW);
LCD.setCursor(0, 1);LCD.print("Pompa : ");
LCD.setCursor(8, 1);LCD.print("NON_ACTIVE");
// ketika ketinggian air sudah dibawah atau sama dengan 10 cm
while(get_ketinggian_air()<=10){
// nyalakan pompa sampai ketinggian air meksimal 40 cm
digitalWrite(PIN_RELAY, HIGH);
LCD.setCursor(0, 1);LCD.print("Pompa : ");
LCD.setCursor(8, 1);LCD.print("ACTIVE");
// jika ketinggian air sudah 40 cm maka matikan pompa
if(get_ketinggian_air()>=40){
LCD.clear();
break; // keluar dari while
}
}
}
// menghitung ketinggian air berdasarkan nilai sensor jarak
int get_ketinggian_air(){
// ketinggian air = tingi toren - dengan jarak yang dibaca HCSR04
int ketinggian = 50-get_distance();
ketinggian<=0 ? ketinggian= 0 : ketinggian; // ternary operator
LCD.setCursor(0, 0);LCD.print("Air : ");
LCD.setCursor(8, 0);LCD.print(ketinggian);
LCD.setCursor(15, 0);LCD.print("cm");
return ketinggian;
}
// membaca nilai sesnsor jarak
int get_distance(){
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
int duration = pulseIn(PIN_ECHO, HIGH);
int distance = duration / 58;
delay(1000);
LCD.clear();
return distance;
}