const int buttonPin = 16; // Khai báo chân được kết nối với nút nhấn
const int ledPin = 19; // Khai báo chân được kết nối với đèn
int ledState = HIGH; // Trạng thái ban đầu của đèn LED là High
int buttonState; // Biến lưu trữ trạng thái hiện tại của nút nhấn
int lastButtonState = LOW; // Lưu trữ trạng thái của nút nhân trong lần đọc trước đó
unsigned long lastDebounceTime = 0; // Thời gian cuối cùng khi trạng thái nút nhấn thay đổi
unsigned long debounceTimeDelay = 50; // Thời gian delay để làm sạch tính hiệu từ nút nhấn
void setup() {
pinMode(buttonPin, INPUT); // Cấu hình chân nút nhấn là chế độ Input
pinMode(ledPin, OUTPUT); // Cấu hình chân đèn LED là chế độ Output
digitalWrite(ledPin, ledState); // Đặt trạng thái LedPin theo giá trị LedState
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(buttonPin); // Đọc trạng thái hiện tại của nút nhấn từ chân buttonPin
// Kiểm tra xem trạng thái nút nhấn có thay đổi không
if (reading != lastButtonState) { //Kiểm tra xem nếu trạng thái của nút nhấn đã thay đổi so với lần đọc trước đó
lastDebounceTime = millis(); // Cập nhật thời gian cuối cùng khi trạng thái thay đổi
}
if ((millis() - lastDebounceTime) > debounceTimeDelay) { // Kiểm tra xem đã đủ thời gian debounce chưa
if (reading != buttonState) { // Nếu trạng thái nút nhấn thực sự thay đổi
buttonState = reading; // Cập nhật biến buttonState với trạng thái hiện tại của nút nhấn
if (buttonState == HIGH) { // Nếu nút nhấn được nhấn (HIGH)
ledState = !ledState; // Đảo ngược trạng thái của đèn LED
}
}
}
digitalWrite(ledPin, ledState); // Đặt trạng thái của đèn LED dựa trên trạng thái mới của ledState
lastButtonState = reading; // Cập nhật trạng thái cuối cùng của nút nhấn
// Xử lý lệnh từ Serial
if (Serial.available()) {
String command = Serial.readStringUntil('\n'); // Đọc lệnh từ Serial
command.trim(); // Xóa khoảng trắng đầu và cuối lệnh
if (command == "LED ON") {
ledState = true; // Bật LED
digitalWrite(ledPin, HIGH);
Serial.println("LED is now ON");
} else if (command == "LED OFF") {
ledState = false; // Tắt LED
digitalWrite(ledPin, LOW);
Serial.println("LED is now OFF");
} else {
Serial.println("Unknown command");
}
}
}