#include <Arduino.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
const byte ROWS = 4; // Số hàng của keypad
const byte COLS = 4; // Số cột của keypad
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {14, 27, 26, 25}; // Chân hàng kết nối với ESP32
byte colPins[COLS] = {33, 32, 18, 19}; // Chân cột kết nối với ESP32 //COL
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Địa chỉ I2C và kích thước LCD (16x2)
const int ledPin = 4; // Chân kết nối với LED
const int buttonPin = 15; // Chân kết nối với button
bool ledOn = false; // Trạng thái của LED
bool buttonPressed = false; // Trạng thái của button
int cursorColum = 0;
char lastKey = '\0'; // Lưu phím cuối cùng được bấm
void setup() {
lcd.init();
lcd.backlight();
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW); // Ban đầu LED tắt
pinMode(buttonPin, INPUT_PULLUP); // Sử dụng pull-up nội bộ cho button
}
void loop() {
// Đọc trạng thái từ keypad
char key = keypad.getKey();
if (key) {
lcd.setCursor(cursorColum, 0);
lcd.print(key);
cursorColum++;
lastKey = key; // Lưu phím cuối cùng
if (cursorColum == 16) {
lcd.clear();
cursorColum = 0;
}
}
// Kiểm tra trạng thái của button
int buttonState = digitalRead(buttonPin);
// Nếu button được nhấn và phím bấm là từ '1' đến '9'
if (buttonState == LOW && !buttonPressed && lastKey >= '1' && lastKey <= '9') {
int delayTime = (lastKey - '0') * 1000; // Tính thời gian delay tương ứng với phím bấm (số nhân với 1000ms)
delay(delayTime); // Chờ số giây tương ứng với phím
digitalWrite(ledPin, HIGH); // Bật LED
ledOn = true;
buttonPressed = true; // Đánh dấu là button đã được nhấn
}
// Kiểm tra nếu button được thả ra
if (buttonState == HIGH && buttonPressed) {
digitalWrite(ledPin, LOW); // Tắt LED
ledOn = false;
buttonPressed = false; // Đánh dấu là button đã được thả
}
}