#include <LiquidCrystal.h>
byte bar[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
}; // custom character for the bar
// Definisikan pin yang digunakan
const int waterFlowSensorPin = 2;
const int tandonInputValvePin = 3;
const int tandonOutputValvePin = 4;
const int waterPumpPin = 5;
const int levelSwitchPin1 = 6;
const int levelSwitchPin2 = 7;
const int levelSwitchPin3 = 8;
const int rs = 9, en = 10, d4 = 11, d5 = 12, d6 = 13, d7 = 14;
// Deklarasi objek untuk tampilan LCD
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Variabel untuk menghitung jumlah pulsa dari sensor air
volatile int flowPulseCount = 0;
// Konstanta untuk menghitung laju air
const float flowRateConstant = 7.5;
void setup() {
// Set pin yang digunakan sebagai input atau output
pinMode(waterFlowSensorPin, INPUT);
pinMode(tandonInputValvePin, OUTPUT);
pinMode(tandonOutputValvePin, OUTPUT);
pinMode(waterPumpPin, OUTPUT);
pinMode(levelSwitchPin1, INPUT_PULLUP);
pinMode(levelSwitchPin2, INPUT_PULLUP);
pinMode(levelSwitchPin3, INPUT_PULLUP);
// Set keadaan awal pin
digitalWrite(tandonInputValvePin, LOW);
digitalWrite(tandonOutputValvePin, LOW);
digitalWrite(waterPumpPin, LOW);
// Inisialisasi tampilan LCD
lcd.begin(16, 2);
lcd.createChar(0, bar); // create the custom character at location 0
// Register interrupt service routine untuk sensor air
attachInterrupt(digitalPinToInterrupt(waterFlowSensorPin), flowSensorISR, RISING);
// Tampilkan pesan awal pada tampilan LCD
lcd.print("Sedang menunggu");
}
void loop() {
// Hitung jumlah pulsa dari sensor air selama 1 detik
flowPulseCount = 0;
sei();
delay(1000);
cli();
// Cek status saklar 1
if (digitalRead(levelSwitchPin1) == LOW ) {
// Saklar 1 ditekan, nyalakan pompa air
digitalWrite(waterPumpPin, HIGH);
}
// Cek status saklar
if (digitalRead(levelSwitchPin2) == LOW ) {
// Saklar 2 ditekan, matikan pompa air
digitalWrite(waterPumpPin, LOW);
}
}
// Fungsi untuk menghitung jumlah pulsa dari sensor air
void flowSensorISR() {
flowPulseCount++;
}