#include <LiquidCrystal.h>
// Inisialisasi objek LiquidCrystal
LiquidCrystal lcd(0, 1, 2, 3, 4, 5);
//deklarasi menit/detik/milidetik (00:00:000)
int minutes = 0;
int seconds = 0;
int milliseconds = 0;
//pin led
int led1 = 9;
int led2 = 8;
//lacak status button dan pin
const int buttonGreen = 12; // Pin hijau untuk putaran
bool greenButtonState = LOW;
bool lastGreenButtonState = LOW;
int currentTimerPosition = 1; // Variable untuk melacak posisi timer saat ini
void setup() {
// Inisialisasi LCD dengan jumlah kolom dan baris
lcd.begin(20, 4);
// Tampilkan pesan sambutan
lcd.print(" Timer 00:00:00 ");
lcd.setCursor(0, 1);
lcd.print(" by Farhan Januar K ");
delay(1000); // Tahan selama 1 detik
lcd.clear();
// Set pin-mode untuk push button
pinMode(buttonGreen, INPUT);
}
void loop() {
updateButtons();
updateTimer();
displayTimer();
delay(10); // Delay kecil untuk stabilitas
}
//fungsi dari button dan logikanya
void updateButtons() {
// Baca status push button hijau
greenButtonState = digitalRead(buttonGreen);
// Check jika push button hijau ditekan
if (greenButtonState != lastGreenButtonState && greenButtonState == HIGH) {
// Tombol hijau ditekan, tambahkan data ke baris (0, currentTimerPosition)
lcd.setCursor(0, currentTimerPosition);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
lcd.print(" > Lap ");
lcd.print(minutes < 10 ? "0" : "");
lcd.print(minutes);
lcd.print(":");
lcd.print(seconds < 10 ? "0" : "");
lcd.print(seconds);
lcd.print(":");
lcd.print(milliseconds < 100 ? "0" : "");
lcd.print(milliseconds < 10 ? "0" : "");
lcd.print(milliseconds);
// Pindah ke posisi timer berikutnya (loop ke posisi awal jika sudah di posisi terakhir)
currentTimerPosition++;
if (currentTimerPosition > 4) {
currentTimerPosition = 1;
}
}
// Check jika push button hijau ditekan dan data sudah penuh
if (greenButtonState != lastGreenButtonState && greenButtonState == HIGH && currentTimerPosition == 1) {
// Tombol hijau ditekan, hapus data dari baris (0, 1) - (0, 3)
lcd.setCursor(0, 1);
lcd.print(" "); // Menghapus data pada baris 1
lcd.setCursor(0, 2);
lcd.print(" "); // Menghapus data pada baris 2
lcd.setCursor(0, 3);
lcd.print(" "); // Menghapus data pada baris 3
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
// Update status tombol hijau terakhir
lastGreenButtonState = greenButtonState;
}
//fungsi dari timer atau update timer setiap looping
void updateTimer() {
milliseconds += 10;
if (milliseconds == 1000) {
milliseconds = 0;
seconds++;
if (seconds == 60) {
seconds = 0;
minutes++;
if (minutes == 60) {
minutes = 0;
}
}
}
}
//fungsi untuk memunculkan output pada LCD
void displayTimer() {
lcd.setCursor(0, 0);
lcd.print(" Timer ");
lcd.print(minutes < 10 ? "0" : "");
lcd.print(minutes);
lcd.print(":");
lcd.print(seconds < 10 ? "0" : "");
lcd.print(seconds);
lcd.print(":");
lcd.print(milliseconds < 100 ? "0" : "");
lcd.print(milliseconds < 10 ? "0" : "");
lcd.print(milliseconds);
}