//#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
// กำหนดที่อยู่ I2C ของจอ LCD
LiquidCrystal_I2C lcd(0x27, 20, 4); // เปลี่ยนที่อยู่ถ้าจำเป็น
//KEYPAD
const int ROW_NUM = 4; //four rows
const int COLUMN_NUM = 4; //four columns
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3', 'A'},
{'4','5','6', 'B'},
{'7','8','9', 'C'},
{'*','0','#', 'D'}
};
byte pin_rows[ROW_NUM] = {35, 37, 39, 41}; //connect to the row pinouts of the keypad
byte pin_column[COLUMN_NUM] = {43, 45, 47, 49}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
// ตัวแปล เวลา
int countdownTime = 0; // เวลานับถอยหลัง (วินาที)
bool timeSet = false; // ใช้เพื่อตรวจสอบว่าเวลาถูกตั้งค่าแล้วหรือยัง
bool isCounting = false; // ใช้เพื่อตรวจสอบว่ากำลังนับเวลาหรือไม่
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Set time (s):");
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key >= '0' && key <= '9') {
// รับค่าเวลาจาก Keypad
if (!timeSet) {
countdownTime = countdownTime * 10 + (key - '0');
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(countdownTime);
lcd.print("s "); //ลบพื้นที่เก่า
}
} else if (key == '#') {
// กดยืนยัน
if (!timeSet) {
timeSet = true;
lcd.clear();
lcd.print("Counting down:");
isCounting = true;
}
} else if (key == '*') {
// รีเซ็ต
timeSet = false;
countdownTime = 0;
isCounting = false;
lcd.clear();
lcd.print("Set time (s):");
}
}
if (isCounting) {
if (countdownTime > 0) {
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(countdownTime);
lcd.print("s ");
delay(1000); // รอ 1 วินาที
countdownTime--;
} else {
lcd.setCursor(0, 1);
lcd.print("Time's up! ");
delay(2000); // แสดงข้อความ 2 วินาที
lcd.clear();
lcd.print("Set time (s):");
isCounting = false;
timeSet = false;
countdownTime = 0;
}
}
}