Xác định trạng thái của một nút nhấn (button)

Bài viết này sẽ giúp bạn hiểu cách xác định trạng thái của một nút nhấn và sử dụng công cụ giao tiếp giữa Arduino và máy tính để xem trạng thái của nút nhấn.

Giới thiệu

Bạn đã bao giờ tự hỏi làm thế nào để xác định trạng thái của một nút nhấn? Trong bài viết này, chúng ta sẽ khám phá cách mà nút nhấn hoạt động, cũng như cách sử dụng Arduino để đọc trạng thái của nút nhấn.

Cấu tạo của nút nhấn

Hãy tưởng tượng rằng nút nhấn hoạt động giống như công tắc đóng/mở. Tuy nhiên, nút nhấn có 4 chân chia thành 2 cặp. Hai chân trong cùng một cặp được nối với nhau, và hai chân khác cặp lại được nối với nhau. Khi bạn nhấn nút, cả 4 chân của nút nhấn được nối với nhau, cho phép dòng điện đi qua từ một chân bất kỳ tới 3 chân còn lại.

Bạn cần những gì?

  • Mạch Arduino (ở đây mình sử dụng Arduino UNO).
  • Breadboard (một số nơi gọi là Test Board).
  • Điện trở 10 kΩ.
  • Nút nhấn (hoặc công tắc tương đương).

Lắp mạch

Lắp mạch

Sơ đồ nguyên lý

Sơ đồ nguyên lý

Khi bạn chưa nhấn nút, chân D2 được nối với GND qua một điện trở 10 kΩ. Do đó, khi đọc giá trị của chân D2 bằng lệnh digitalRead(2), bạn sẽ nhận được giá trị 0 (LOW). Khi bạn nhấn nút, chân D2 sẽ được nối trực tiếp với 5V và nối với GND thông qua một điện trở 10kΩ. Lúc này, lệnh digitalRead(2) sẽ trả về giá trị 1 (HIGH).

Bạn có thể thử áp dụng định luật Ôm học ở lớp 9 để kiểm tra sự chính xác của giá trị này.

Khi chưa nhấn nút, nếu bạn nối chân D2 với GND qua một điện trở, người ta gọi điện trở này là điện trở pulldown. Trái lại, nếu bạn nối D2 với chân 5V qua một điện trở, người ta gọi nó là điện trở pullup. Trong sơ đồ lắp mạch, chúng ta sử dụng cách nối điện trở pulldown.

Vậy tại sao lại cần đến điện trở này? Hãy tiếp tục đọc bước tiếp theo để khám phá.

Lập trình

int button = 2;

void setup() {
  Serial.begin(9600); // Mở cổng Serial để giao tiếp với máy tính
  pinMode(button, INPUT); // Cài đặt chân D2 ở trạng thái đọc dữ liệu
}

void loop() {
  int buttonStatus = digitalRead(button); // Đọc trạng thái của nút nhấn
  Serial.println(buttonStatus); // Xuất trạng thái của nút nhấn
  delay(200); // Chờ 200ms
}

Sau khi upload code lên mạch Arduino, bạn có thể bấm Ctrl + Shift + M để mở cửa sổ Serial Monitor và xem trạng thái của nút nhấn được gửi về máy tính.

Hãy thử tháo điện trở 10 kΩ trên breadboard và quan sát lại cửa sổ Serial Monitor…

Gợi ý cho bạn

Trong câu lệnh:

pinMode(button, INPUT);

Bạn có thể sửa INPUT thành INPUT_PULLUP, sau đó tải code lên mạch Arduino. Bạn có thể tháo điện trở 10 kΩ ra và quan sát kết quả. Điều này bởi vì vi điều khiển ATmega328 của Arduino UNO đã tích hợp điện trở pullup tương tự như điện trở pulldown mà bạn đã sử dụng. Tuy nhiên, nếu bạn không khai báo INPUT_PULLUP, điện trở pullup này sẽ không hoạt động. Thay vào đó, nếu bạn sử dụng INPUT_PULLUP, điện trở pullup sẽ được kích hoạt.