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

Giới thiệu

Bài viết này sẽ hướng dẫn bạn cách xác định trạng thái của một nút nhấn (nhấn / thả), mô tả cách sử dụng một công cụ giao tiếp giữa Arduino với máy tính (cũng như với mạch Arduino khác) để xem trạng thái nút nhấn vừa đọc được.

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

 

Nếu bạn đã biết đến cái công tắc đóng / mở thì nút nhấn cũng hoạt động tương tự như vậy. Thay vì chỉ có 2 chân như công tắc, nút nhấn có 4 chân chia làm 2 cặp. Những chân trong cùng một cặp được nối với nhau, những chân khác cặp thì ngược lại. Khi bạn nhấn nút, cả 4 chân của nút nhấn đều được nối với nhau, cho phép dòng điện từ một chân bất kì có thể 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

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 đó lệnh digitalRead(2) sẽ trả về 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 1 điện trở 10kΩ, lệnh digitalRead(2) sẽ trả về giá trị 1 (HIGH).

Vì sao lại là 1 mà không phải là 0 ? Bạn hãy thử dùng định luật Ôm học ở lớp 9 để kiểm tra nhé.

Khi chưa nhấn nút, nếu bạn nối chân D2 với GND qua 1 điện trở thì 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ở thì người ta gọi nó là điện trở pullup. Cách nối ở trên hình sử dụng cách nối điện trở pulldown.

Vì sao ta lại cần đến điện trở này ? Mình sẽ để bạn tự khám phá ở bước tiếp theo ...

 

Lập trình

int button = 2;

void setup() {
  Serial.begin(9600);   //Mở cổng Serial ở baudrate 9600 để 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 button
  Serial.println(buttonStatus);              //Xuất trạng thái button
  delay(200);                                //Chờ 200ms
}

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

 

Hãy thử tháo điện trở 10 kΩ  trên breadboard ra 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 hãy sửa INPUT thành INPUT_PULLUP rồi tải lại code của bạn lên mạch Arduino. Bạn có thể tháo điện trở 10 kΩ ra và xem kết quả ... Đó là vì trong vi điều khiển ATmega328 của Arduino UNO đã có sẵn điện trở pullup tương tự điện trở pulldown mà bạn đang mắc, tuy nhiên nếu bạn khai báo là INPUT như mặc định thì nó sẽ không được sử dụng, trái lại việc khai báo INPUT_PULLUP sẽ kích hoạt điện trở này.

lên
59 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

lowByte()

lowByte() là hàm trả về byte cuối cùng (8 bit cuối cùng) của một chuỗi các bit. Một số nguyên bất kì cũng được xem như là một chuỗi các bit, vì bất kì số nguyên nào cũng có thể biểu diễn ở hệ nhị phân dưới dạng các bit "0" và "1".

lên
1 thành viên đã công nhận bài viết này hữu ích!

sq()

Giới thiệu

Hàm sq() được dùng để tính bình phường của một số bất kì, số này có thể thuộc bất kì kiểu dữ liệu biển diễn số nào. sq() trả về giá trị mà nó tính được với kiểu dữ liệu giống như kiểu dữ liệu của tham số ta đưa vào.

lên
2 thành viên đã đánh giá bài viết này hữu ích.