const unsigned long interval = 1000; // Interval of 1 second
unsigned long previousMillis = 0;
unsigned long countdown = 0; // Countdown duration in seconds (1 hour)
unsigned long inputjam,inputmenit,inputdetik;
int button=5;
int buttonState=0;
int button2=18;
int button2State=0;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int LCD_ADDRESS = 0x27;
const int LCD_COLUMNS = 16;
const int LCD_ROWS = 2;
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);
unsigned long hours = countdown / 3600;
unsigned long minutes = (countdown % 3600) / 60;
unsigned long seconds = (countdown % 3600) % 60;
void setup() {
pinMode(button, INPUT);
pinMode(button2, INPUT);
Wire.begin();
lcd.begin(LCD_COLUMNS, LCD_ROWS);
Serial.begin(9600); // Initialize serial communication for debugging
Serial.println("Masukkan timer untuk jam: ");
while (Serial.available()==0){};
inputjam = strtoul(Serial.readStringUntil('\n').c_str(),NULL,10);
Serial.print("Timer telah diatur menjadi: ");
Serial.print(inputjam);
Serial.println(" jam");
countdown=inputjam*3600;
Serial.println("Masukkan timer untuk menit: ");
while (Serial.available()==0){};
inputmenit = strtoul(Serial.readStringUntil('\n').c_str(),NULL,10);
Serial.print("Timer telah diatur menjadi: ");
Serial.print(inputmenit);
Serial.println(" menit");
countdown+=inputmenit*60;
Serial.println("Masukkan timer untuk detik: ");
while (Serial.available()==0){};
inputdetik = strtoul(Serial.readStringUntil('\n').c_str(),NULL,10);
Serial.print("Timer telah diatur menjadi: ");
Serial.print(inputdetik);
Serial.println(" detik");
countdown+=inputdetik;
// Serial.print("TIMER = ");
// Serial.print(inputjam);
// Serial.print(" : ");
// Serial.print(inputmenit);
// Serial.print(" : ");
// Serial.println(inputdetik);
Serial.println("START TIMER");
lcd.print("Hello, World!");
delay(2000);
lcd.clear();
hours = countdown / 3600;
minutes = (countdown % 3600) / 60;
seconds = (countdown % 3600) % 60;
}
void loop() {
buttonState=digitalRead(button);
button2State=digitalRead(button2);
lcd.setCursor(0,0);
if(button2State==1){
countdown=0;
}
if (hours < 10) {
lcd.print("0");
}
lcd.print(hours);
lcd.print(":");
if (minutes < 10) {
lcd.print("0");
}
lcd.print(minutes);
lcd.print(":");
if (seconds < 10) {
lcd.print("0");
}
lcd.print(seconds);
if (buttonState==1){
lcd.setCursor(0,0);
unsigned long currentMillis = millis(); // Get the current time
// Check if the specified interval has elapsed
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Update the previous time
// Decrease the countdown value
if (countdown > 0) {
countdown--;
}
// Convert countdown to hours, minutes, and seconds
hours = countdown / 3600;
minutes = (countdown % 3600) / 60;
seconds = (countdown % 3600) % 60;
// Output the countdown value in HH:MM:SS format
if (hours < 10) {
Serial.print("0");
lcd.print("0");
}
Serial.print(hours);
lcd.print(hours);
Serial.print(":");
lcd.print(":");
if (minutes < 10) {
Serial.print("0");
lcd.print("0");
}
Serial.print(minutes);
lcd.print(minutes);
Serial.print(":");
lcd.print(":");
if (seconds < 10) {
Serial.print("0");
lcd.print("0");
}
Serial.println(seconds);
lcd.print(seconds);
// Check if the countdown has reached 0
if (countdown == 0) {
// Countdown is finished, do something
Serial.println("Countdown finished!");
}
lcd.setCursor(0,1);
lcd.print(" ");
}
}else{
lcd.setCursor(0,1);
lcd.print("click to start");
}
}