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

Shortcut02 - Điều khiển Servo từ xa thông qua biến trở

Đây là loạt bài vắn tắt chia sẻ kinh nghiệm giúp các bạn có thể sử dụng các mudule cũng như tiếp cận code một cách ngắn gọn và dễ hiểu hơn smiley

Mục đích bài viết: Hướng dẫn điều khiển một Servo trong các dự án robot từ xa thông qua module NRF24 bằng biến trở cool

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

Dùng ATTiny13 để shiftOut ra IC 595 điều khiển nhiều LED

Qua bài viết Bài 2: Attiny13 - Trợ thủ đắc lực của Arduino - Lập trình nó?, chúng ta đã biết được cách lập trình một bé ATTiny13 để làm nhấp nháy một chú đèn LED. Hôm nay, chúng ta sẽ nâng cao một tí nữa, chúng ta sẽ lập trình chú ATTiny13 này để shiftOut ra 8 LED và hơn thế nữa!

Nếu bạn chưa biết về shiftOut, bạn có thể xem bài viết này và thực hiện nó trước!

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

HackadayPrize 2017 - Cuộc thi sáng tạo hàng đầu thế giới - Trị giá lên đến 250.000 Mỹ cành

Bạn muốn thử sức mình ở một cuộc thi tầm cỡ thế giới với giải thưởng lên đến 250.000 USD? Bạn muốn đưa ý tưởng của mình tiếp cận những quỹ đầu tư mạo hiểm về công nghệ? Hãy tham gia cuộc thi HackdayPrize 2017. Đây là một cuộc thi sẽ biến ý tưởng của bạn thành những làn sóng công nghệ quét qua hành tình trái đất. Tìm hiểu hoy.

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