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

Nội dung chính, cần nắm

Tại bài viết Bài 3: Xác định trạng thái của một nút nhấn (button), bạn đã biết được cách để đọc tín hiệu từ một button bằng cách thiết đặt chân digital là INPUT. Hôm nay, ta cũng đào xới vấn đề đọc trạng thái của một nút nhấn, nhưng đi theo một hướng khác (không dùng điện trở như trong Bài 3). Cách làm này đơn giản hơn và thực tế thường được ứng dụng.

Phần cứng

Lắp mạch

Click vào ảnh để xem kích thước thật và lắp mạch bạn nhé

Lập trình và giải thích

Trước tiên, ta cần phải biết sự khác nhau của INPUT_PULLUPINPUT, nếu bạn chưa rõ thì cần tham khảo đường dẫn sau. Thực chất INPUT_PULLUP cũng như là INPUT thôi, nhưng cái điện trở mắc ngoài như ở INPUT được "thiết đặt sẵn" bên trong con vi điều khiển của Arduino và khi bạn pinMode một chân là INPUT_PULLUP thì bạn đã kích hoạt cái điện trở này lên. Và sau khi pinMode các chân digital là INPUT_PULLUP, nếu bạn digitalRead các chân này thì sẽ nhận được giá trị HIGH (điều này ngược lại với hướng dẫn tại bài 3). Nếu bạn nhấn button xuống thì chân  digitalRead sẽ trả về LOW. Bởi vì nguyên lý chỉ rất đơn giản như vầy thôi, nếu trong khuôn khổ bài viết này, tôi giải thích cặn cẽ tại sao lại như thế thì sẽ làm rối các bạn và không cần thiết. Để hiểu rõ nó hoạt động trong thực tế như thế nào thì hãy chạy đoạn mã dưới đây!

void setup(){
  // khởi động cổng Serial ở baudrate 9600
  Serial.begin(9600);
  // Cài đặt các chân digital
  pinMode(8, INPUT_PULLUP); //INPUT_PULLUP chân button
  pinMode(3, OUTPUT); // OUTPUT chân led

}

void loop(){
  //đọc tín hiệu chân digital
  int sensorVal = digitalRead(8);
  //Xuất tín hiệu ra serial
  Serial.println(sensorVal);
 

  if (sensorVal == HIGH) { //nếu chưa nhấn
    digitalWrite(3, LOW); // tắt đèn
  }  else {  // nếu đã nhấn 
    digitalWrite(3, HIGH);// bật đèn
  }
}
lên
28 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

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Lưu các biến CHỈ ĐỌC với PROGMEM

Trong bài Tiết kiệm RAM trong Arduino?, chúng ta đã biết cách lưu chuỗi hằng vào bộ nhớ FLASH thay cho việc lưu hết bọn chúng vào RAM. Như vậy, một hằng chuỗi có thể được lưu vào bộ nhớ FLASH thay vì lưu vào RAM. Vậy, câu hỏi đặt ra là, những biến hằng khác (hằng số, hẳng mảng, hẳng số thực) có thể được lưu vào FLASH thay vì vào RAM hay không?

Trong thực tế, các biến hằng (trừ hằng chuỗi) hầu hết chỉ tốn vài chục byte để lưu trữ nên RAM, nên chúng ta cũng chưa gặp vấn đề gì trong việc lưu trữ hằng số hay hằng mảng cả. Nhưng thỉnh thoảng, có những lúc, ta phải tìm cách lưu trữ chúng ở một nơi khác, ví dụ Bài 12: Phát nhạc bằng Arduino với một cái loa hoặc buzzer.

Chần chừ gì nữa, biết muốn phám khá khả năng của Arduino - hay không?

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

ESP8266 kết nối Internet - Phần 1: Cài đặt ESP8266 làm một socket client kết nối tới socket server trong mạng LAN

Hiện nay, nhu cầu nghiên cứu ESP8266 và điều khiển từ xa qua Internet ngày càng lớn. Có rất nhiều cách để kêt nối ESP8266 vào Internet, và mình sẽ chọn phương pháp giao tiếp qua Socket để hướng dẫn mọi người cách tiếp cận vào thế giới Internet Of Things. Đây là phương pháp theo mình đánh giá là dễ dàng nhất. Tất cả đều hướng theo sự kiện, nghĩa là bạn có thể bắt (catch) và xử lý nó một cách dễ dàng. Hôm nay, chúng ta hãy cùng tìm hiểu một cách kỹ lưỡng về nó.

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