#include <Arduino.h>
#include <LiquidCrystal.h>
// Konfigurasi LCD
LiquidCrystal lcd(12, 11, A1, A0, 13, 10);
// Pin Relay
const int relay1 = 7; // Katup Selenoid
const int relay21 = 6; // Saklar manual motor 1
const int relay22 = 5; // Saklar manual motor 2
const int relay31 = 4; // Saklar Motor Pencucian 1
const int relay32 = 3; // Saklar Motor Pencucian 2
const int relay4 = 2; // Drain Motor
// Pin Sensor Ultrasonik
const int trigPin = 9;
const int echoPin = 8;
// Pin Tombol
const int tombolMode = A2;
const int tombolAir = A3;
const int tombolEksekusi = A4;
const int buzzerPin = A5;
// Variabel untuk pilihan
int mode = 1; // 1: Normal, 2: Bilas 2x, 3: Cepat
int levelAir = 1; // 1: Low, 2: Mid, 3: High
//BATAS FUNGSI
void mencucinormal() {
unsigned long startMillis = millis(); // Catat waktu mulai
const unsigned long totalTime = 15L * 60L * 1000L; // 15 menit dalam milidetik
const unsigned long relayActiveTime = 20L * 1000L; // Waktu aktif relay: 20 detik
const unsigned long transitionTime = 6L * 1000L; // Waktu perpindahan: 6 detik
bool relay31On = true; // Status awal relay
unsigned long relayStartMillis = millis();
while (millis() - startMillis < totalTime) {
// Hitung waktu tersisa dalam milidetik
unsigned long remainingTime = totalTime - (millis() - startMillis);
// Konversi waktu tersisa ke menit dan detik
unsigned int menit = remainingTime / 60000; // Hitung menit tersisa
unsigned int detik = (remainingTime % 60000) / 1000; // Hitung detik tersisa
// Tampilkan waktu countdown di LCD dengan format mm:dd
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pencucian...");
lcd.setCursor(0, 1);
lcd.print("Sisa: ");
if (menit < 10) lcd.print("0"); // Tambahkan nol jika menit < 10
lcd.print(menit);
lcd.print(":");
if (detik < 10) lcd.print("0"); // Tambahkan nol jika detik < 10
lcd.print(detik);
lcd.print(" "); // Hapus karakter sisa
// Periksa apakah relay aktif selama 20 detik
if (millis() - relayStartMillis < relayActiveTime) {
if (relay31On) {
digitalWrite(relay31, HIGH); // Relay 31 aktif
digitalWrite(relay32, LOW); // Relay 32 mati
} else {
digitalWrite(relay31, LOW); // Relay 31 mati
digitalWrite(relay32, HIGH); // Relay 32 aktif
}
}
// Periksa apakah dalam masa perpindahan relay
else if (millis() - relayStartMillis < relayActiveTime + transitionTime) {
digitalWrite(relay31, LOW); // Matikan kedua relay
digitalWrite(relay32, LOW);
}
// Pergantian relay
else {
relay31On = !relay31On; // Tukar status relay
relayStartMillis = millis(); // Reset waktu relay
}
// Tunggu 1 detik sebelum perulangan berikutnya
delay(1000);
}
// Matikan semua relay setelah selesai
digitalWrite(relay31, LOW);
digitalWrite(relay32, LOW);
// Tampilkan pesan selesai di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selesai mencuci!");
delay(3000); // Tampilkan pesan selesai selama 3 detik
}
void mencucicepat() {
unsigned long startMillis = millis(); // Catat waktu mulai
const unsigned long totalTime = 10L * 60L * 1000L; // 15 menit dalam milidetik
const unsigned long relayActiveTime = 20L * 1000L; // Waktu aktif relay: 20 detik
const unsigned long transitionTime = 6L * 1000L; // Waktu perpindahan: 6 detik
bool relay31On = true; // Status awal relay
unsigned long relayStartMillis = millis();
while (millis() - startMillis < totalTime) {
// Hitung waktu tersisa dalam milidetik
unsigned long remainingTime = totalTime - (millis() - startMillis);
// Konversi waktu tersisa ke menit dan detik
unsigned int menit = remainingTime / 60000; // Hitung menit tersisa
unsigned int detik = (remainingTime % 60000) / 1000; // Hitung detik tersisa
// Tampilkan waktu countdown di LCD dengan format mm:dd
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Cuci Cepat...");
lcd.setCursor(0, 1);
lcd.print("Sisa: ");
if (menit < 10) lcd.print("0"); // Tambahkan nol jika menit < 10
lcd.print(menit);
lcd.print(":");
if (detik < 10) lcd.print("0"); // Tambahkan nol jika detik < 10
lcd.print(detik);
lcd.print(" "); // Hapus karakter sisa
// Periksa apakah relay aktif selama 20 detik
if (millis() - relayStartMillis < relayActiveTime) {
if (relay31On) {
digitalWrite(relay31, HIGH); // Relay 31 aktif
digitalWrite(relay32, LOW); // Relay 32 mati
} else {
digitalWrite(relay31, LOW); // Relay 31 mati
digitalWrite(relay32, HIGH); // Relay 32 aktif
}
}
// Periksa apakah dalam masa perpindahan relay
else if (millis() - relayStartMillis < relayActiveTime + transitionTime) {
digitalWrite(relay31, LOW); // Matikan kedua relay
digitalWrite(relay32, LOW);
}
// Pergantian relay
else {
relay31On = !relay31On; // Tukar status relay
relayStartMillis = millis(); // Reset waktu relay
}
// Tunggu 1 detik sebelum perulangan berikutnya
delay(1000);
}
// Matikan semua relay setelah selesai
digitalWrite(relay31, LOW);
digitalWrite(relay32, LOW);
// Tampilkan pesan selesai di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selesai mencuci!");
delay(3000); // Tampilkan pesan selesai selama 3 detik
}
void mencucilembut() {
unsigned long startMillis = millis(); // Catat waktu mulai
const unsigned long totalTime = 10L * 60L * 1000L; // 15 menit dalam milidetik
const unsigned long relayActiveTime = 20L * 1000L; // Waktu aktif relay: 20 detik
const unsigned long transitionTime = 6L * 1000L; // Waktu perpindahan: 6 detik
bool relay31On = true; // Status awal relay
unsigned long relayStartMillis = millis();
while (millis() - startMillis < totalTime) {
// Hitung waktu tersisa dalam milidetik
unsigned long remainingTime = totalTime - (millis() - startMillis);
// Konversi waktu tersisa ke menit dan detik
unsigned int menit = remainingTime / 60000; // Hitung menit tersisa
unsigned int detik = (remainingTime % 60000) / 1000; // Hitung detik tersisa
// Tampilkan waktu countdown di LCD dengan format mm:dd
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Cuci Cepat...");
lcd.setCursor(0, 1);
lcd.print("Sisa: ");
if (menit < 10) lcd.print("0"); // Tambahkan nol jika menit < 10
lcd.print(menit);
lcd.print(":");
if (detik < 10) lcd.print("0"); // Tambahkan nol jika detik < 10
lcd.print(detik);
lcd.print(" "); // Hapus karakter sisa
// Periksa apakah relay aktif selama 20 detik
if (millis() - relayStartMillis < relayActiveTime) {
if (relay31On) {
digitalWrite(relay31, HIGH); // Relay 31 aktif
digitalWrite(relay32, LOW); // Relay 32 mati
} else {
digitalWrite(relay31, LOW); // Relay 31 mati
digitalWrite(relay32, HIGH); // Relay 32 aktif
}
}
// Periksa apakah dalam masa perpindahan relay
else if (millis() - relayStartMillis < relayActiveTime + transitionTime) {
digitalWrite(relay31, LOW); // Matikan kedua relay
digitalWrite(relay32, LOW);
}
// Pergantian relay
else {
relay31On = !relay31On; // Tukar status relay
relayStartMillis = millis(); // Reset waktu relay
}
// Tunggu 1 detik sebelum perulangan berikutnya
delay(1000);
}
// Matikan semua relay setelah selesai
digitalWrite(relay31, LOW);
digitalWrite(relay32, LOW);
// Tampilkan pesan selesai di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selesai mencuci!");
delay(3000); // Tampilkan pesan selesai selama 3 detik
}
void mencuciberat() {
unsigned long startMillis = millis(); // Catat waktu mulai
const unsigned long totalTime = 10L * 60L * 1000L; // 15 menit dalam milidetik
const unsigned long relayActiveTime = 20L * 1000L; // Waktu aktif relay: 20 detik
const unsigned long transitionTime = 6L * 1000L; // Waktu perpindahan: 6 detik
bool relay31On = true; // Status awal relay
unsigned long relayStartMillis = millis();
while (millis() - startMillis < totalTime) {
// Hitung waktu tersisa dalam milidetik
unsigned long remainingTime = totalTime - (millis() - startMillis);
// Konversi waktu tersisa ke menit dan detik
unsigned int menit = remainingTime / 60000; // Hitung menit tersisa
unsigned int detik = (remainingTime % 60000) / 1000; // Hitung detik tersisa
// Tampilkan waktu countdown di LCD dengan format mm:dd
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Cuci Cepat...");
lcd.setCursor(0, 1);
lcd.print("Sisa: ");
if (menit < 10) lcd.print("0"); // Tambahkan nol jika menit < 10
lcd.print(menit);
lcd.print(":");
if (detik < 10) lcd.print("0"); // Tambahkan nol jika detik < 10
lcd.print(detik);
lcd.print(" "); // Hapus karakter sisa
// Periksa apakah relay aktif selama 20 detik
if (millis() - relayStartMillis < relayActiveTime) {
if (relay31On) {
digitalWrite(relay31, HIGH); // Relay 31 aktif
digitalWrite(relay32, LOW); // Relay 32 mati
} else {
digitalWrite(relay31, LOW); // Relay 31 mati
digitalWrite(relay32, HIGH); // Relay 32 aktif
}
}
// Periksa apakah dalam masa perpindahan relay
else if (millis() - relayStartMillis < relayActiveTime + transitionTime) {
digitalWrite(relay31, LOW); // Matikan kedua relay
digitalWrite(relay32, LOW);
}
// Pergantian relay
else {
relay31On = !relay31On; // Tukar status relay
relayStartMillis = millis(); // Reset waktu relay
}
// Tunggu 1 detik sebelum perulangan berikutnya
delay(1000);
}
// Matikan semua relay setelah selesai
digitalWrite(relay31, LOW);
digitalWrite(relay32, LOW);
// Tampilkan pesan selesai di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selesai mencuci!");
delay(3000); // Tampilkan pesan selesai selama 3 detik
}
void merendam() {
// Waktu countdown dalam milidetik
const unsigned long durasiMerendam = 15L * 60L * 1000L; // 15 menit = 900.000 ms
unsigned long waktuMulai = millis();
while (millis() - waktuMulai < durasiMerendam) {
unsigned long sisaWaktu = durasiMerendam - (millis() - waktuMulai);
int menit = sisaWaktu / 60000; // Hitung menit tersisa
int detik = (sisaWaktu % 60000) / 1000; // Hitung detik tersisa
// Tampilkan waktu countdown pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Perendaman...");
lcd.setCursor(0, 1);
lcd.print("Sisa: ");
lcd.print(menit);
lcd.print(":");
if (detik < 10) lcd.print("0"); // Tambahkan nol jika detik < 10
lcd.print(detik);
lcd.print(" "); // Hapus karakter sisa
delay(1000); // Perbarui setiap detik
}
// Setelah selesai, tampilkan pesan
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selesai");
delay(2000); // Tampilkan pesan selama 2 detik
}
void merendamcepat() {
// Waktu countdown dalam milidetik
const unsigned long durasiMerendam = 10L * 60L * 1000L; // 10 menit
unsigned long waktuMulai = millis();
while (millis() - waktuMulai < durasiMerendam) {
unsigned long sisaWaktu = durasiMerendam - (millis() - waktuMulai);
int menit = sisaWaktu / 60000; // Hitung menit tersisa
int detik = (sisaWaktu % 60000) / 1000; // Hitung detik tersisa
// Tampilkan waktu countdown pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Perendaman...");
lcd.setCursor(0, 1);
lcd.print("Sisa: ");
lcd.print(menit);
lcd.print(":");
if (detik < 10) lcd.print("0"); // Tambahkan nol jika detik < 10
lcd.print(detik);
lcd.print(" "); // Hapus karakter sisa
delay(1000); // Perbarui setiap detik
}
// Setelah selesai, tampilkan pesan
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selesai");
delay(2000); // Tampilkan pesan selama 2 detik
}
void menguras() {
// Aktifkan relay motor drain
digitalWrite(relay4, HIGH);
// Waktu countdown dalam milidetik
const unsigned long durasiMenguras = 1L * 15L * 1000L; // 15 menit = 900.000 ms
unsigned long waktuMulai = millis();
while (millis() - waktuMulai < durasiMenguras) {
unsigned long sisaWaktu = durasiMenguras - (millis() - waktuMulai);
int menit = sisaWaktu / 60000; // Hitung menit tersisa
int detik = (sisaWaktu % 60000) / 1000; // Hitung detik tersisa
// Tampilkan waktu countdown pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pengurasan...");
lcd.setCursor(0, 1);
lcd.print("Sisa: ");
lcd.print(menit);
lcd.print(":");
if (detik < 10) lcd.print("0"); // Tambahkan nol jika detik < 10
lcd.print(detik);
lcd.print(" "); // Hapus karakter sisa
delay(1000); // Perbarui setiap detik
}
// Matikan relay motor drain setelah selesai
digitalWrite(relay4, LOW);
// Tampilkan pesan selesai pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pengurasan selesai");
delay(3000); // Tampilkan pesan selama 3 detik
}
void membilas() {
unsigned long startMillis = millis(); // Catat waktu mulai
const unsigned long totalTime = 1L * 60L * 1000L; // 15 menit dalam milidetik
const unsigned long relayActiveTime = 15L * 1000L; // Waktu aktif relay: 20 detik
const unsigned long transitionTime = 8L * 1000L; // Waktu perpindahan: 6 detik
bool relay31On = true; // Status awal relay
unsigned long relayStartMillis = millis();
while (millis() - startMillis < totalTime) {
// Hitung waktu tersisa dalam milidetik
unsigned long remainingTime = totalTime - (millis() - startMillis);
// Konversi waktu tersisa ke menit dan detik
unsigned int menit = remainingTime / 60000; // Hitung menit tersisa
unsigned int detik = (remainingTime % 60000) / 1000; // Hitung detik tersisa
// Tampilkan waktu countdown di LCD dengan format mm:dd
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Membilas...");
lcd.setCursor(0, 1);
lcd.print("Sisa: ");
if (menit < 10) lcd.print("0"); // Tambahkan nol jika menit < 10
lcd.print(menit);
lcd.print(":");
if (detik < 10) lcd.print("0"); // Tambahkan nol jika detik < 10
lcd.print(detik);
lcd.print(" "); // Hapus karakter sisa
// Periksa apakah relay aktif selama 20 detik
if (millis() - relayStartMillis < relayActiveTime) {
if (relay31On) {
digitalWrite(relay31, HIGH); // Relay 31 aktif
digitalWrite(relay32, LOW); // Relay 32 mati
} else {
digitalWrite(relay31, LOW); // Relay 31 mati
digitalWrite(relay32, HIGH); // Relay 32 aktif
}
}
// Periksa apakah dalam masa perpindahan relay
else if (millis() - relayStartMillis < relayActiveTime + transitionTime) {
digitalWrite(relay31, LOW); // Matikan kedua relay
digitalWrite(relay32, LOW);
}
// Pergantian relay
else {
relay31On = !relay31On; // Tukar status relay
relayStartMillis = millis(); // Reset waktu relay
}
// Tunggu 1 detik sebelum perulangan berikutnya
delay(1000);
}
// Matikan semua relay setelah selesai
digitalWrite(relay31, LOW);
digitalWrite(relay32, LOW);
// Tampilkan pesan selesai di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selesai mencuci!");
delay(3000); // Tampilkan pesan selesai selama 3 detik
}
void tampilkanPilihan() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Mode: ");
if (mode == 1) lcd.print("Normal");
else if (mode == 2) lcd.print("Bilas 2x");
else if (mode == 3) lcd.print("Cepat");
else if (mode == 4) lcd.print("Lembut");
else if (mode == 5) lcd.print("Berat");
lcd.setCursor(0, 1);
lcd.print("Level Air: ");
if (levelAir == 1) lcd.print("Low");
else if (levelAir == 2) lcd.print("Mid");
else if (levelAir == 3) lcd.print("High");
}
long bacaLevelAir() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = duration * 0.034 / 2; // Mengonversi waktu ke jarak (cm)
return distance;
}
void isiAir() {
long targetLevel;
// Tentukan target level air berdasarkan pilihan levelAir
if (levelAir == 1) targetLevel = 30; // Low (30 cm dari sensor)
else if (levelAir == 2) targetLevel = 20; // Mid (20 cm dari sensor)
else if (levelAir == 3) targetLevel = 10; // High (10 cm dari sensor)
// Nyalakan katup selenoid untuk mulai mengisi air
digitalWrite(relay1, HIGH);
// Isi air hingga mencapai target level
while (bacaLevelAir() > targetLevel) {
lcd.setCursor(0, 1);
lcd.print("Level Air: ");
lcd.print(bacaLevelAir());
lcd.print(" cm ");
delay(500); // Tunggu sebentar sebelum membaca lagi
}
// Matikan katup selenoid
digitalWrite(relay1, LOW);
}
//FUNGSI MODE PENCUCIAN
//NORMAL
void prosesNormal() {
// Isi air sebelum pencucian
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
//Merendam
merendam();
delay(300); // Anti-bouncing
// Pencucian
lcd.setCursor(0, 1);
lcd.print("Mencuci... ");
mencucinormal(); // Panggil fungsi mencuci normal
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
// Isi air sebelum pembilasan
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
// Pembilasan
lcd.setCursor(0, 1);
lcd.print("Membilas... ");
membilas(); // Panggil fungsi membilas
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
}
//BILAS 2X
void prosesBilas2x() {
// Isi air sebelum pencucian
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
//Merendam
merendam();
delay(300); // Anti-bouncing
// Pencucian
lcd.setCursor(0, 1);
lcd.print("Mencuci... ");
mencucinormal(); // Panggil fungsi mencuci normal
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
// Isi air sebelum pembilasan
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
// Pembilasan
lcd.setCursor(0, 1);
lcd.print("Membilas... ");
membilas(); // Panggil fungsi membilas
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
// Isi air sebelum pembilasan
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
// Pembilasan
lcd.setCursor(0, 1);
lcd.print("Membilas... ");
membilas(); // Panggil fungsi membilas
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
}
//CUCI CEPAT
void prosesCepat() {
// Isi air sebelum pencucian
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
//Merendam
merendamcepat();
delay(300); // Anti-bouncing
// Pencucian
lcd.setCursor(0, 1);
lcd.print("Mencuci... ");
mencucicepat(); // Panggil fungsi mencuci normal
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
// Isi air sebelum pembilasan
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
// Pembilasan
lcd.setCursor(0, 1);
lcd.print("Membilas... ");
membilas(); // Panggil fungsi membilas
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
}
//LEMBUT
void prosesLembut() {
// Isi air sebelum pencucian
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
//Merendam
merendam();
delay(300); // Anti-bouncing
// Pencucian
lcd.setCursor(0, 1);
lcd.print("Mencuci... ");
mencucilembut(); // Panggil fungsi mencuci normal
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
// Isi air sebelum pembilasan
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
// Pembilasan
lcd.setCursor(0, 1);
lcd.print("Membilas... ");
membilas(); // Panggil fungsi membilas
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
}
//BERAT
void prosesBerat() {
// Isi air sebelum pencucian
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
//Merendam
merendam();
delay(300); // Anti-bouncing
// Pencucian
lcd.setCursor(0, 1);
lcd.print("Mencuci... ");
mencuciberat(); // Panggil fungsi mencuci normal
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
// Isi air sebelum pembilasan
lcd.setCursor(0, 1);
lcd.print("Isi Air... ");
isiAir();
delay(300); // Anti-bouncing
// Pembilasan
lcd.setCursor(0, 1);
lcd.print("Membilas... ");
membilas(); // Panggil fungsi membilas
delay(300); // Anti-bouncing
// Pengurasan
menguras();
delay(300); // Anti-bouncing
}
void bunyikanAlarm() {
for (int i = 0; i < 8; i++) { // Ulangi 8 kali
tone(buzzerPin, 1500, 1000); // Bunyikan buzzer (1500 Hz, selama 1 detik)
delay(1000); // Tunggu 1 detik (untuk durasi bunyi selesai)
delay(1000); // Jeda 1 detik sebelum bunyi berikutnya
}
}
void eksekusiProgram() {
lcd.clear();
lcd.print("Sedang proses:");
// Isi air
lcd.setCursor(0, 1);
lcd.print("Mengisi air...");
isiAir();
// Proses pencucian
if (mode == 1) {
lcd.setCursor(0, 1);
lcd.print("Mode: Normal ");
prosesNormal();
} else if (mode == 2) {
lcd.setCursor(0, 1);
lcd.print("Mode: Bilas 2x ");
prosesBilas2x();
} else if (mode == 3) {
lcd.setCursor(0, 1);
lcd.print("Mode: Cepat ");
prosesCepat();
} else if (mode == 4) {
lcd.setCursor(0, 1);
lcd.print("Mode: Lembut ");
prosesLembut();
} else if (mode == 5) {
lcd.setCursor(0, 1);
lcd.print("Mode: Berat ");
prosesBerat();
}
// Alarm selesai
lcd.setCursor(0, 1);
lcd.clear();
lcd.print("Sudah Selesai!");
lcd.setCursor(0, 1);
lcd.print("Siap digaringkan!");
bunyikanAlarm();
delay(2000);
}
//BATAS PROGRAM UTAMA
void setup() {
lcd.begin(16, 2);
pinMode(relay1, OUTPUT);
pinMode(relay21, OUTPUT);
pinMode(relay22, OUTPUT);
pinMode(relay31, OUTPUT);
pinMode(relay32, OUTPUT);
pinMode(relay4, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(tombolMode, INPUT_PULLUP);
pinMode(tombolAir, INPUT_PULLUP);
pinMode(tombolEksekusi, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT); // Konfigurasi pin buzzer
//Setup posisi relay awal
digitalWrite(relay1, LOW);
digitalWrite(relay21, HIGH); //alihkan timer manual 1 ke relay motor 1
digitalWrite(relay22, HIGH); //alihkan timer manual 2 ke relay motor 2
digitalWrite(relay31, LOW);
digitalWrite(relay32, LOW);
digitalWrite(relay4, LOW);
// Tampilan awal dengan bunyi buzzer
lcd.setCursor(0, 0);
lcd.print("Mesin");
lcd.setCursor(0, 1);
lcd.print("Umbah-umbah");
for (int i = 0; i < 1; i++) { // Ulangi 2 kali
tone(buzzerPin, 1200, 800); // Bunyikan buzzer (1000 Hz, selama .7 detik)
delay(2000); // Tunggu 2 detik (untuk durasi bunyi selesai)
}
// Tampilkan menu pilihan
tampilkanPilihan();
for (int i = 0; i < 2; i++) { // Ulangi 1 kali
tone(buzzerPin, 1000, 220); // Bunyikan buzzer (1000 Hz, selama 0.2 detik)
delay(300); // Tunggu 1 detik (untuk durasi bunyi selesai)
}
}
void loop() {
// Pilihan mode
if (digitalRead(tombolMode) == LOW) {
mode = (mode % 4) + 1;
tampilkanPilihan();
tone(buzzerPin, 1500, 060);
delay(200); // Anti-bouncing
}
// Pilihan level air
if (digitalRead(tombolAir) == LOW) {
levelAir = (levelAir % 3) + 1;
tampilkanPilihan();
tone(buzzerPin, 1300, 060);
delay(200); // Anti-bouncing
}
// Eksekusi
if (digitalRead(tombolEksekusi) == LOW) {
//BUZZER START
for (int i = 0; i < 3; i++) { // Ulangi 3 kali
tone(buzzerPin, 1000, 1000); // Bunyikan buzzer (1000 Hz, selama 0.2 detik)
delay(1500); // Tunggu 1 detik (untuk durasi bunyi selesai)
}
eksekusiProgram();
delay(200); // Anti-bouncing
}
}