Bài 08: Điều Khiển LED Bằng Nút Nhấn Trên Arduino

điều khiển LED bằng nút nhấn

Giới Thiệu: Điều Khiển LED Bằng Nút Nhấn Trên Arduino

Trong bài này, chúng ta sẽ học cách sử dụng nút nhấn để điều khiển LED bằng nút nhấn trên Arduino – một ứng dụng cơ bản nhưng vô cùng quan trọng trong lập trình IoT và điện tử. Bạn sẽ hiểu cách đọc trạng thái nút nhấn và điều khiển LED theo ý muốn.

✅ Bạn sẽ học được:
✔ Cách kết nối nút nhấn với Arduino
✔ Phương pháp đọc tín hiệu digital từ nút nhấn
✔ Cách viết chương trình điều khiển LED bằng nút nhấn
✔ Kỹ thuật chống nhiễu phím (debounce)


1. Nguyên Lý Hoạt Động Của Nút Nhấn Với Arduino

Nút nhấn (button) là linh kiện cơ học:

  • Khi nhấn: Mạch kín (kết nối 2 chân)

  • Khi thả: Mạch hở (ngắt kết nối)

Arduino đọc trạng thái nút nhấn qua hàm digitalRead().


2. Chuẩn Bị Linh Kiện

Linh Kiện Số Lượng Ghi Chú
Arduino Uno 1 Có thể dùng Nano, Mega
Nút nhấn 1 Loại thường mở (NO)
LED 1 Màu tùy chọn
Điện trở 220Ω 2 1 cho LED, 1 cho nút nhấn
Dây cắm 5 Kết nối mạch

3. Sơ Đồ Đấu Nối

điều khiển LED bằng nút nhấn

  • Nút nhấn:

    • Một chân → 5V

    • Chân đối diện → D2 qua điện trở 10kΩ (pull-down) → GND

  • LED:

    • Dương → D13 qua 220Ω

    • Âm → GND

💡 Mẹo: Dùng INPUT_PULLUP để giảm điện trở bên ngoài


4. Code Mẫu Điều Khiển LED Bằng Nút Nhấn

Phiên Bản Cơ Bản

const int buttonPin = 2;  // Nút nhấn ở D2
const int ledPin = 13;    // LED ở D13

void setup() {
  pinMode(buttonPin, INPUT_PULLUP); // Dùng điện trở pull-up nội
  pinMode(ledPin, OUTPUT);
}

void loop() {
  if (digitalRead(buttonPin) == LOW) { // Nếu nút được nhấn
    digitalWrite(ledPin, HIGH);       // Bật LED
  } else {
    digitalWrite(ledPin, LOW);        // Tắt LED
  }
}

Phiên Bản Nâng Cao (Có Debounce)

const int buttonPin = 2;
const int ledPin = 13;
int ledState = LOW;
int lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, ledState);
}

void loop() {
  int reading = digitalRead(buttonPin);
  
  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }
  
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading == LOW) {
      ledState = !ledState;
    }
  }
  
  digitalWrite(ledPin, ledState);
  lastButtonState = reading;
}

Giải thích code:

  • INPUT_PULLUP: Sử dụng điện trở pull-up nội

  • debounceDelay: Thời gian chống nhiễu (50ms)

  • millis(): Hàm đếm thời gian chính xác


5. Ứng Dụng Thực Tế điều khiển LED bằng nút nhấn

a. Công Tắc Đèn Thông Minh

  • Nhấn 1 lần → Bật đèn

  • Nhấn lần nữa → Tắt đèn

b. Hệ Thống Báo Động

  • Nhấn giữ 3 giây → Kích hoạt báo động

c. Điều Khiển Bằng Nhiều Nút

  • Nút 1: Bật LED

  • Nút 2: Tắt LED


6. Sửa Lỗi Thường Gặp

❌ LED sáng không ổn định
→ Thêm điện trở pull-up/pull-down
→ Áp dụng kỹ thuật debounce

❌ Nút nhấn không hoạt động
→ Kiểm tra đấu nối đúng chân
→ Test bằng đồng hồ đo thông mạch

❌ LED không tắt hẳn
→ Dùng digitalWrite(ledPin, LOW) thay vì analogWrite(ledPin, 0)


Kết Luận

Bạn đã thành thạo:
✔ Cách đọc tín hiệu nút nhấn với Arduino
✔ Phương pháp điều khiển LED bằng button
✔ Kỹ thuật chống nhiễu phím (debounce)

➤ Bài tiếp theo: Bài 9 – Đọc Giá Trị Analog Từ Cảm Biến Ánh Sáng

CHÚC CÁC BẠN THÀNH CÔNG

Có thể bạn quan tâm

  1. TOP 5 Bộ KIT học tập Arduino cho người học lập trình
  2. Tài liệu học điện tử miễn phí
  3. Kênh YouTobe hay về điện tử, mạch điện
  4. Fanpage cùng nhau học điện tử
  5. Chia sẻ kiến thức điện tử cơ bản

NƠI MUA LINH KIỆN GIÁ TỐT

  1. Linh kiện điện tử giá siêu rẻ : Shop Ristina.vn
  2. Linh kiện điện tử, nhà thông minh : Shop Làm Chủ Công Nghệ
  3. Chuyên mạch nguồn, sạc dự phòng chỉ từ 1K: Shop Điện Tử AT
  4. Chuyên pin sạc 18650, Pin sạc AA: Shop Linhkiengiatot
  5. Chuyên các thiết bị điện công nghiệp: Shop Linhkien123

Bài viết thuộc chuỗi học lập trình Arduino cơ bản trên dientu5ngay.com.

Hãy để lại đánh giá cho chúng tớ nếu bài viết hữu ích nhé

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *