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ả

Kết nối điều khiển từ xa sử dụng ESP8266 và Arduino với hệ thống firmware iNut Cảm biến CloudMQTT - 1000 firmware miễn phí

Chuyện kể rằng, có 02 sinh viên Việt Nam, trong lúc làm đồ án đại học kết nối điều khiển từ xa qua Internet. Một người thì chọn phương án truyền thống sử dụng máy tính làm máy chủ và demo các tính năng theo yêu cầu đồ án. Người còn lại biết đến iNut Sensor và tìm cách tối ưu hóa phần mềm và phần cứng nhằm chau chuốt cho đồ án của mình trở nên "xịn" và "nhiều tính năng bá đạo". Đến lúc bảo vệ đồ án, cậu sinh viên 01 cảm thấy choáng ván với muôn vàn vấn đề từ việc nơi trình bày đồ án không có wifi, mạng chập chờn, máy tính mở không lên, đứt cáp biển,... Cuối cùng cũng bảo vệ được với điểm số không ưng ý lắm dù tốn rất nhiều thời gian và công sức. Cậu còn lại nhờ vào việc chau chuốt phần mềm, tối ưu hóa và comment kĩ từng lệnh trong dòng code, viết báo cáo bài bản chuẩn bị slide như ý, dùng điện thoại cài wifi, quét mã QRcode để chia sẻ quyền truy cập đến phần mềm rất chuyên nghiệp, mọi thứ cậu chủ động hoàn toàn mà không bị các vấn đề "học tài thi phận" bủa vây mà kết quả hết sức mĩ mãn, điểm số mĩ miều, kiến thức IoT được chuẩn hóa. Thực vậy, các dự án, đồ án sử dụng nền tảng iNut Platform bên dưới cho phép các bạn sinh viên làm các dự án hết sức hoàn hảo: từ xe điều khiển, bãi giữ xe thông minh, hệ thống máy lạnh, máy bơm, điều hòa thông minh,... do chinh các bạn tự làm nên đã đạt được những điểm số tốt và tuyệt đối. Cũng chính vì thế, iNut JSC (công ty chủ quản của iNut Platform) đã kết hợp với Khu Công nghệ phần mềm - ĐHQGHCM để tổ chức những khóa đào tạo ngắn hạn cho sinh viên Việt Nam sử dụng nền tảng IoT do iNut JSC phát triển. Và để mở con đường tri thức tiếp cận IoT trong nháy mắt, iNut JSC đã tạo ra một phiên bản firmware trị giá 50.000 đồng sử dụng clouding của CloudMQTT và tài trợ 1000 firmware cho tất cả các bạn học sinh, sinh viên Việt Nam có thể tiếp cận IoT một cách dễ dàng và nhanh chóng nhất!

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

Phạm vi biến

Ngôn ngữ Arduino được xây dựng trên ngôn ngữ lập trình C. Các biến của Arduino, cũng như C, có một phạm trù được gọi là phạm vi biến. Điều này trái ngược với ngôn ngữ BASIC, ở ngôn ngữ BASIC này, mọi biến đều là biến toàn cục.

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