Trang chủ Điện - Điện tửArduinoĐỌC TÍN HIỆU VỚI NÚT NHẤN

ĐỌC TÍN HIỆU VỚI NÚT NHẤN

bởi Admin
14 lượt xem 3 Phút đọc

Mục tiêu bài học

  • Hiểu cách đọc tín hiệu từ nút nhấn bằng digitalRead().

  • Biết kết nối nút nhấn với Arduino.

  • Làm quen với hiện tượng "dội phím" và cách xử lý đơn giản (debounce).

1. Nút nhấn (Button) hoạt động như thế nào?

  • Nút nhấn là một công tắc tạm thời: khi nhấn sẽ nối mạch (ON), khi thả ra sẽ ngắt mạch (OFF).

  • Ta có thể đọc trạng thái nút bằng digitalRead(pin):

    • Trả về HIGH (5V) hoặc LOW (0V).

2. Kết nối mạch với Arduino

Cách nối phổ biến (nút kéo xuống GND - dùng điện trở kéo lên - INPUT_PULLUP):

+5V
 │
[R] 10kΩ (nội bộ)
 │
[Chân Digital 2] ----[Nút nhấn]---- GND

Lưu ý:

  • Arduino sẽ đọc HIGH khi không nhấn (dòng điện qua điện trở kéo lên).

  • Khi nhấn → nối GND → đọc được LOW.

Hướng dẫn nạp code

Bước 1: Kết nối Arduino Uno với máy tính

  • Sử dụng cáp USB (loại USB A to B, giống cáp máy in).

  • Cắm một đầu vào Arduino Uno, đầu còn lại vào cổng USB của máy tính.

Bước 2: Cài đặt phần mềm Arduino IDE

Bước 3: Mở Arduino IDE và thiết lập cấu hình

  1. Mở Arduino IDE.

  2. Vào menu Tools (Công cụ)Board (Bo mạch) → chọn Arduino Uno.

  3. Vào ToolsPort → chọn đúng cổng COM (thường là COM3, COM4,... tùy máy).

    Nếu không thấy cổng COM, hãy kiểm tra driver USB hoặc cài CH340 Driver nếu Arduino dùng chip CH340.

Bước 4: Cài đặt phần mềm Arduino IDE

  • Nhấn nút Upload (mũi tên →) trên thanh công cụ.

  • Quan sát thanh trạng thái, khi hiện "Done uploading" nghĩa là nạp thành công.

3. Code đơn giản đọc trạng thái nút

void setup() {
  pinMode(2, INPUT_PULLUP); // Sử dụng điện trở kéo lên nội bộ
  pinMode(13, OUTPUT);      // LED trên board (chân 13)
}

void loop() {
  int buttonState = digitalRead(2);

  if (buttonState == LOW) {
    digitalWrite(13, HIGH); // Bật LED khi nhấn nút
  } else {
    digitalWrite(13, LOW);  // Tắt LED khi thả nút
  }
}

4. Chống dội phím (Debounce cơ bản)

💡 Vấn đề:

  • Khi nhấn/thả nút, tiếp điểm có thể bật/tắt nhiều lần rất nhanh (nhiễu), gây nhấp nháy LED hoặc sai logic.

Giải pháp đơn giản: Thêm delay(50) để bỏ qua nhiễu

void loop() {
  int buttonState = digitalRead(2);
  
  if (buttonState == LOW) {
    delay(50); // đợi nhiễu dội hết
    if (digitalRead(2) == LOW) { // kiểm tra lại
      digitalWrite(13, HIGH);
    }
  } else {
    digitalWrite(13, LOW);
  }
}

5. Thử thách cho học viên

  • Thay đổi nút sang chân khác, tự cập nhật code.

  • Sử dụng nút để bật/tắt LED theo kiểu "nhấn 1 lần bật – nhấn lần nữa tắt".

  • Kết hợp thêm Serial.print() để hiển thị trạng thái nút.

Để lại bình luận

Focus Mode

Đã phát hiện trình chặn quảng cáo

Vui lòng hỗ trợ chúng tôi bằng cách tắt tiện ích chặn quảng cáo (AdBlocker) trên trình duyệt của bạn khi truy cập trang web của chúng tôi.