#include <TimerOne.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD address: 0x27, 16 columns, 2 rows
const int upButtonPin = A3; // tombol up/down
const int startButtonPin = A1; // tombol start
const int stopButtonPin = A2; // tombol stop
const int transduser = 10; // output transduser
const int motordc = 11; // output motor pump
const int buzzer = 12; // buzzer
int timer = 0; // timer setting
int timerout[] = {5, 10, 15, 20}; // pilihan timer
int flag, menit, detik, counter; // untuk timer
bool stopButtonPressed = false; // Variabel global untuk tombol stop
void setup() {
pinMode(upButtonPin, INPUT_PULLUP);
pinMode(startButtonPin, INPUT_PULLUP);
pinMode(stopButtonPin, INPUT_PULLUP);
pinMode(transduser, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(motordc, OUTPUT);
Timer1.initialize(1000000);
Timer1.attachInterrupt(isr);
timer = EEPROM.read(1); // Read timer value from EEPROM
lcd.begin(16, 2); // inisialisasi lcd 16x2
lcd.backlight(); // Turn on the backlight
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ATEM ANDAKARA ");
lcd.setCursor(0, 1);
lcd.print(" >> PKK 6 << ");
delay(4000);
lcd.clear();
// Judul
lcd.setCursor(0, 0);
lcd.print("Ultrasonic Cleaner");
lcd.setCursor(0, 1);
lcd.print("Berbasis Arduino");
delay(1500);
lcd.clear();
// Nama dan NIM
lcd.setCursor(0, 0);
lcd.print(" Dodi Muhadi ");
lcd.setCursor(0, 1);
lcd.print(" NIM 21272022 ");
delay(1500);
lcd.clear();
// Pembimbing
lcd.setCursor(0, 0);
lcd.print("Dosen Pembimbing");
lcd.setCursor(0, 1);
lcd.print("Samsul Mujakar,ST.,MT");
delay(1500);
lcd.clear();
}
void loop() {
setting();
// Cek status tombol stop secara terus-menerus
if (digitalRead(stopButtonPin) == LOW) {
stopButtonPressed = true;
// Tunggu hingga tombol dilepaskan sebelum melanjutkan
while (digitalRead(stopButtonPin) == LOW) {
delay(10); // Delay untuk debounce
}
}
if (stopButtonPressed) {
lcd.clear();
lcd.setCursor(4, 0);
lcd.print(" STOP ");
stopProgram();
stopButtonPressed = false; // reset stop button state
} else {
mainprogram();
}
}
void isr() {
if (flag == 1) {
if (menit > -1) {
detik--;
if (detik < 0) {
if (menit > 0) menit--;
detik = 59;
}
}
}
}
// Kode untuk pengaturan timer
void setting() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Select Timer: ");
lcd.setCursor(0, 1);
lcd.print(">>>>>>>><<<<<<<<");
int selectedTimer = 0;
while (selectedTimer == 0) {
if (digitalRead(upButtonPin) == LOW) {
timer++;
if (timer > 4) timer = 0;
displaySelectedTimer(timer);
delay(200);
}
if (digitalRead(startButtonPin) == LOW) {
switch (timer) {
case 0:
menit = 2;
break;
case 1:
menit = 5;
break;
case 2:
menit = 10;
break;
case 3:
menit = 15;
break;
case 4:
menit = 20;
break;
}
selectedTimer = 1;
}
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Timer Selected:");
lcd.setCursor(0, 1);
lcd.print(menit);
lcd.print(" >>>>Menit<<<< ");
delay(2000);
}
// Kode untuk menampilkan timer yang dipilih
void displaySelectedTimer(int timer) {
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
switch (timer) {
case 0:
lcd.print(" 1: 2 Menit" );
break;
case 1:
lcd.print(" 2: 5 Menit");
break;
case 2:
lcd.print(" 3: 10 Menit");
break;
case 3:
lcd.print(" 4: 15 Menit");
break;
case 4:
lcd.print(" 5: 20 Menit");
break;
}
}
// Kode untuk menjalankan program utama
void mainprogram() {
lcd.clear();
detik = 0;
flag = 1;
digitalWrite(transduser, HIGH);
while (1) {
if (digitalRead(stopButtonPin) == LOW) break;
if (menit == 0 && detik == 0) break;
// Tampilkan informasi program yang sedang berjalan
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("RUNNING");
lcd.setCursor(2, 1);
lcd.print("TIME = ");
lcd.print(menit);
lcd.print(" :");
lcd.print(detik);
delay(1000);
if (flag == 60 && menit > 0) {
detik--;
if (detik < 0) {
menit--;
detik = 00;
}
}
}
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("DONE");
digitalWrite(transduser, LOW);
digitalWrite(buzzer, HIGH);
delay(4000);
digitalWrite(buzzer, LOW);
// Setelah program selesai
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("DONE");
digitalWrite(transduser, LOW);
digitalWrite(buzzer, HIGH);
delay(4000);
digitalWrite(buzzer, LOW);
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("Proses");
lcd.setCursor(0, 1);
lcd.print(" Pembuangan Air");
digitalWrite(motordc, HIGH);
delay(90000); // delay waktu pembuangan air
digitalWrite(motordc, LOW);
digitalWrite(buzzer, HIGH);
delay(3000);
digitalWrite(buzzer, LOW);
}
// Kode untuk menghentikan program
void stopProgram() {
digitalWrite(transduser, LOW); // Matikan transduser
digitalWrite(motordc, LOW); // Matikan motor
digitalWrite(buzzer, HIGH); // Aktifkan buzzer
delay(3000); // Tahan buzzer selama 3 detik
digitalWrite(buzzer, LOW); // Matikan buzzer
}