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

ST7565 và ESP8266 - Màn hình LCD bự chà bá chưa đến 100k cho thế giới IoT

Mình rất thích LCD ST7565 này, và đã đặt liền 4 con mà mỗi con quá rẻ có 20k. Nhưng khổ một điều, điện áp hoạt động và IO của LCD ST7565 có 3.3V. Bản thân mình lại không thích việc chơi điện trở để chơi LCD này với Arduino. Lý do đơn giản là phải hàn quá nhiều, mình lại lười crying. Hổm nay, mình đang làm loạt bài về ESP8266 và cũng phải gặp vấn đề điện trở để làm cầu phân áp khi giao tiếp giữa ESP8266 và Arduino.

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

Thư viện ST7565 trên Arduino Create - Thử nghiệm đầu tiên: Hoàn hảo!

Mình rất tự hào và hãnh diện, khi thư viện made in Việt Nam đầu tiên của Thái Sơn (Nick Chung) được mình tải lên tại Arduino Create với mục đích thử nghiệm việc biên dịch code online trên Arduino Create đã hoàn thành công việc của nó ngay trong lần thử đầu tiên. Qua bài viết này, mình xin hướng dẫn các bạn lập trình Arduino với Arduino Create thông qua việc làm một ví dụ mẫu về việc cài thư viện và sử dụng nó trên Arduino Create.

lên
7 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ả

setup() và loop()

Những lệnh trong setup() sẽ được chạy khi chương trình của bạn khởi động. Bạn có thể sử dụng nó để khai báo giá trị của biến, khai báo thư viện, thiết lập các thông số,…

Sau khi setup() chạy xong, những lệnh trong loop() được chạy. Chúng sẽ lặp đi lặp lại liên tục cho tới khi nào bạn ngắt nguồn của board Arduino mới thôi.

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

Bạn có biết Arduino là gì không? Tìm hiểu thêm...

"Tử thuở còn cắp sách tới trường, có lẽ bạn cũng như tôi, rất thích chơi xe điện tử - nhất là xe điều khiển từ xa! Hồi ấy, tôi rất hay đòi ba mẹ mua một chiếc mỗi khi họ đi công tác xa. Và cứ như một thói quen, chơi được 1 tuần tôi lại "tháo banh" chiếc xe của mình và xem các mạch điện tử. Nói là xem vậy thôi, chứ chủ yếu là tôi lấy mô tơ ra làm quạt chơi (hehe). Lên lớp 11, thì tôi biết đến mạch Arduino từ lời giới thiệu của anh trai, và từ đây, câu chuyện về xe điều khiển của tôi còn dừng lại ở cái quạt mô - tơ nữa....!"

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