unsigned long startMillis; // Waktu saat Arduino dihidupkan
bool timerStarted = false; // Status timer (mulai atau belum)
bool timerPaused = false; // Status timer (berjalan atau di-pause)
unsigned long pausedTime = 0; // Waktu terakhir saat timer di-pause
const int startSwitchPin = 2; // Pin untuk switch start
const int pauseSwitchPin = 4; // Pin untuk switch pause
const int resetButton = 3; // Pin untuk reset timer
void setup() {
Serial.begin(9600);
pinMode(startSwitchPin, INPUT_PULLUP); // Tambahkan resistor pull-up internal pada pin startSwitchPin
pinMode(pauseSwitchPin, INPUT_PULLUP); // Tambahkan resistor pull-up internal pada pin pauseSwitchPin
pinMode(resetButton, INPUT_PULLUP); // Tambahkan resistor pull-up internal pada pin 4 (tombol reset)
attachInterrupt(digitalPinToInterrupt(resetButton), resetTimer, FALLING); // Menambahkan interrupt pada pin 4 (tombol reset)
startMillis = millis(); // Catat waktu saat Arduino dihidupkan
}
void loop() {
// Periksa apakah switch start ditekan dan timer belum dimulai
if (digitalRead(startSwitchPin) == LOW && !timerStarted) {
startMillis = millis();
timerStarted = true;
Serial.println("Timer Started!");
}
// Periksa keadaan switch pause
if (digitalRead(pauseSwitchPin) == HIGH) {
// Jika switch pause tidak aktif, resume timer jika sedang di-pause
if (timerPaused) {
unsigned long currentMillis = millis();
startMillis += (currentMillis - pausedTime); // Atur ulang waktu mulai dengan menambahkan waktu ter-pause
timerPaused = false;
Serial.println("Timer Resumed!");
}
} else {
// Jika switch pause aktif, pause timer jika sedang berjalan
if (timerStarted && !timerPaused) {
pausedTime = millis();
timerPaused = true;
Serial.println("Timer Paused!");
}
}
// Periksa apakah timer sedang berjalan
if (timerStarted && !timerPaused) {
unsigned long currentMillis = millis(); // Waktu saat ini
unsigned long uptime = currentMillis - startMillis; // Hitung lama waktu Arduino telah menyala
Serial.print("Uptime: ");
Serial.print(uptime / 1000); // Konversi waktu dari milidetik ke detik
Serial.println(" seconds");
}
delay(100); // Tunggu sebentar sebelum membaca ulang tombol start dan pause
}
void resetTimer() {
// Atur ulang waktu saat tombol reset ditekan
startMillis = millis();
timerStarted = false; // Kembalikan timer ke status belum dimulai
timerPaused = false; // Kembalikan timer ke status berjalan
Serial.println("Timer Reset!");
}