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

Xe điều khiển bằng tay game Dual Shock3 thông qua Bluetooth

Vừa bắt đầu với arduino được hơn 1 tuần, có tham khảo qua các nguồn từ "trung ương đến địa phương", nắm được 1 số kiến thức cơ bản nên mình bắt đầu thực hiện 1 sản phẩm để đúc kết kinh nghiệm. Trong số đó thì xe điều khiển là dễ nhất. Kết hợp với cái tay game ps3 nằm lăn lóc ở góc nhà. Thế là có 1 chiếc xe điều khiển từ xa. Bắt đầu nhé.

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

Làm xe điều khiển từ xa bằng Bluetooth - Điều khiển bằng Android với App Inventor

Mình rất thích điện tử nhưng không học về ngành điện tử. Rất may là có Adruino, rồi có cộng đồng Adruino Việt Nam, đặc biệt là sự nhiệt tình của tất cả các bạn trong cộng đồng, mình đã làm được 1 chiếc xe điều khiển từ xa. Cho con chơi là lí do phụ thôi, còn tìm hiểu, học tập là chính. Hôm nay chia sẻ cùng các bạn, cùng gửi lời cảm ơn đến tất cả các bạn trong cộng đồng. Có bạn thì giúp đỡ trực tiếp, có bạn thì viết bài, rồi có bạn thì bình luận, nêu câu hỏi. Tất cả đều có giá trị đối với mình.

Ngại viết bài nên mình đăng dưới dạng ảnh.

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

KeySweeper - Keylogger trên nền tảng Arduino cho bàn phím không dây

Đây là một bài báo được mình dịch lại từ The Hacker News đăng vào ngày 13/01/2015. Mình dịch bài này là để các bạn thấy được một điều rằng ứng dụng Arduino không phải chỉ dừng ở việc điều khiển đèn LED nhấp nháy, điều khiển động cơ hay hiển thị/truyền phát thông tin đơn thuần,... nó còn làm được những thứ to lớn hơn thế.

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

[Intel Galileo] Vài mẹo với Intel Galileo và hệ điều hành Linux Yocto (iot-devkit)

Trên đây là một số mẹo nhỏ giúp bạn có thể làm việc hiệu quả hơn với hệ điều hành Linux Yocto (iot-devkit) trên Galileo mà mình đã tìm hiểu được. Bài viết này cũng tổng hợp lại các bài viết trước đó đã được đăng tại Arduino.vn

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