Arduino UNO R4 Nút Nhấn

Nút nhấn là một linh kiện đơn giản nhưng quan trọng được sử dụng trong nhiều dự án Arduino UNO R4. Có thể nó trông phức tạp vì các tính chất cơ học và vật lý của nó, điều này có thể thách thức đối với người mới bắt đầu. Hướng dẫn này được thiết kế để giúp người mới bắt đầu hiểu nó một cách dễ dàng. Hãy cùng bắt đầu!

Arduino UNO R4 nút nhấn

※ Lưu ý:

Trước khi chúng ta tìm hiểu về cách sử dụng nút nhấn với Arduino Uno R4, chúng tôi muốn nhấn mạnh hai lỗi phổ biến thường gặp phải đối với người mới bắt đầu:

  1. Vấn đề floating input (đầu vào trôi nổi):
    • Triệu chứng: Khi nút nhấn được kết nối với chân đầu vào Arduino UNO R4, trạng thái của chân đầu vào không thể dự đoán được và không phản ánh trạng thái của nút nhấn.
    • Nguyên nhân: Chân nút nhấn không được kết nối với điện trở pull-down hoặc pull-up.
    • Giải pháp: Kết nối điện trở pull-down hoặc pull-up với chân đầu vào. Chi tiết hơn sẽ được cung cấp sau trong hướng dẫn này.
  • Hiện tượng chattering (rung giật):
    • Triệu chứng: Code Arduino UNO R4 đọc trạng thái nút nhấn và cố gắng xác định sự kiện nhấn bằng cách phát hiện thay đổi trạng thái (từ HIGH sang LOW, hoặc LOW sang HIGH). Tuy nhiên, khi nút nhấn chỉ được nhấn một lần, Arduino Uno R4 có thể phát hiện nhiều lần nhấn.
    • Nguyên nhân: Tính chất cơ học khiến trạng thái chân đầu vào chuyển đổi nhanh giữa LOW HIGH nhiều lần chỉ với một lần nhấn.
    • Giải pháp: Thực hiện debounce. Chi tiết hơn sẽ có trong hướng dẫn Arduino UNO R4 - Button - Debounce.

    Chattering chỉ ảnh hưởng đến các ứng dụng yêu cầu đếm chính xác số lần nhấn nút. Trong các ứng dụng khác, nó có thể không phải là vấn đề.

    Linh Kiện Cần Thiết

    1×Arduino UNO R4 WiFi hoặc Arduino UNO R4 Minima
    1×(Tùy chọn) DIYables STEM V4 IoT, tương thích với Arduino Uno R4 WiFi
    1×Arduino UNO R4 Minima (Thay thế)
    1×Cáp USB Type-C
    1×Nút Nhấn Gắn Breadboard với Nắp
    1×Bộ Kit Nút Nhấn Gắn Breadboard
    1×Nút Nhấn Gắn Panel
    1×mô-đun nút nhấn
    1×breadboard
    1×Dây Jumper
    1×(Khuyến nghị) Screw Terminal Block Shield for Arduino UNO R4
    1×(Khuyến nghị) Breadboard Shield for Arduino UNO R4
    1×(Khuyến nghị) Enclosure for Arduino UNO R4
    1×(Khuyến nghị) Power Splitter for Arduino UNO R4
    1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

    Or you can buy the following kits:

    1×DIYables STEM V4 IoT Starter Kit (Arduino included)
    1×DIYables Sensor Kit (30 sensors/displays)
    1×DIYables Sensor Kit (18 sensors/displays)

    Giới Thiệu Về Nút Nhấn

    Nút nhấn, còn được gọi là tactile button hoặc momentary switch, là một công tắc được đóng khi bạn nhấn và giữ nó, và mở khi bạn thả ra. Nút nhấn có nhiều loại khác nhau, chủ yếu được chia thành hai nhóm:

    • Nút nhấn để gắn trên PCB (có thể sử dụng trên breadboard)
    • Nút nhấn để gắn trên panel
    Arduino UNO R4 push nút nhấn

    Sơ Đồ Chân

    Nút nhấn gắn PCB thường có bốn chân.

    nút nhấn sơ đồ chân

    Các chân này được kết nối với nhau bên trong theo từng cặp, vì vậy chúng ta chỉ cần sử dụng hai trong số bốn chân mà không được kết nối với nhau bên trong.

    Có bốn cách, nhưng thực sự là hai cách vì chúng tương tự nhau, để kết nối nút nhấn (tham khảo hình ảnh).

    how to use nút nhấn

    Một nút nhấn có bốn chân, nhưng tại sao chúng ta chỉ sử dụng hai? ⇒ Điều này để giữ nó ổn định trên PCB (board) và chịu được áp lực.

    Nút nhấn gắn panel thường có hai chân.

    two-pin push nút nhấn sơ đồ chân
    image source: diyables.io

    Button module bao gồm điện trở pull-down tích hợp, đảm bảo đầu ra duy trì ở mức LOW khi nút nhấn không được nhấn. Nó có ba chân:

    • GND: Kết nối chân này với ground.
    • VCC: Kết nối chân này với nguồn điện 5V hoặc 3.3V.
    • OUT: Kết nối chân này với một đầu vào digital trên Arduino của bạn.

    Với cấu hình này, module xuất ra LOW khi nút nhấn không được nhấn và xuất ra HIGH khi nút nhấn được nhấn.

    Cách Hoạt Động

    • Khi nút nhấn không được nhấn, chân A và chân B không được kết nối.
    • Khi nút nhấn được nhấn, chân A và chân B được kết nối.
    how nút nhấn works

    Arduino UNO R4 - Nút Nhấn

    Một chân nút nhấn kết nối với VCC hoặc GND, và chân còn lại kết nối với một chân trên Arduino UNO R4.

    Chúng ta có thể xác định nút nhấn có được nhấn hay không bằng cách kiểm tra trạng thái của một chân trên Arduino UNO R4 được đặt làm chân đầu vào.

    Trạng Thái Nút Nhấn và Trạng Thái Nhấn

    Mối quan hệ giữa trạng thái nút nhấn và trạng thái nhấn phụ thuộc vào cách chúng ta kết nối nút nhấn với Arduino UNO R4 và cài đặt chân của Arduino UNO R4.

    Có hai cách để sử dụng nút nhấn với Arduino UNO R4:

    1. Kết nối một chân nút nhấn với VCC và chân kia với một chân Arduino UNO R4 có điện trở pull-down.
      • Khi nút nhấn được nhấn, trạng thái chân Arduino UNO R4 là HIGH. Ngược lại, trạng thái chân Arduino UNO R4 là LOW.
      • Bạn PHẢI sử dụng điện trở bên ngoài.
  • Kết nối một chân nút nhấn với GND và chân kia với một chân Arduino UNO R4 có điện trở pull-up.
    • Khi nút nhấn được nhấn, trạng thái chân Arduino UNO R4 là LOW. Ngược lại, trạng thái chân Arduino UNO R4 là HIGH.
    • Bạn có thể sử dụng điện trở nội bộ hoặc bên ngoài. Điện trở nội bộ được tích hợp sẵn trong Arduino UNO R4 và có thể được kích hoạt thông qua code Arduino.

    ※ Lưu ý:

    Nếu chúng ta không sử dụng điện trở pull-down hoặc pull-up, chân đầu vào sẽ "trôi nổi" khi nút nhấn không được nhấn. Điều này có nghĩa là trạng thái của chân có thể thay đổi không thể dự đoán được thành HIGH hoặc LOW, gây ra việc đọc không chính xác.

    • Thực hành tồi tệ nhất: Thiết lập chân Arduino UNO R4 làm đầu vào bằng cách sử dụng pinMode(BUTTON_PIN, INPUT) mà không có bất kỳ điện trở pull-down hoặc pull-up nào.
    • Thực hành tốt nhất: Thiết lập chân Arduino UNO R4 với điện trở pull-up nội bộ bằng cách sử dụng pinMode(BUTTON_PIN, INPUT_PULLUP). Điều này không cần điện trở bên ngoài.

    Để làm cho nó dễ dàng cho người mới bắt đầu, hướng dẫn này sử dụng phương pháp đơn giản nhất: thiết lập chân Arduino UNO R4 làm đầu vào pull-up nội bộ mà không cần điện trở bên ngoài. Người mới bắt đầu không cần phải lo lắng về việc kết nối điện trở pull-up hoặc pull-down. Họ chỉ cần sử dụng code Arduino được cung cấp.

    Sơ Đồ Đấu Dây

    • Sơ đồ đấu dây cho Arduino UNO R4 và nút nhấn gắn PCB
    Arduino UNO R4 nút nhấn sơ đồ đấu dây

    This image is created using Fritzing. Click to enlarge image

    • Sơ đồ đấu dây cho Arduino UNO R4 và nút nhấn gắn panel
    Arduino UNO R4 two-pin push nút nhấn sơ đồ đấu dây

    This image is created using Fritzing. Click to enlarge image

    Cách Lập Trình Cho Nút Nhấn

    • Thiết lập chân 7 trên Arduino UNO R4 làm đầu vào pull-up nội bộ bằng hàm pinMode().
    pinMode(7, INPUT_PULLUP);
    • Sử dụng hàm digitalRead() để kiểm tra trạng thái của chân Arduino UNO R4.
    int button_state = digitalRead(BUTTON_PIN);

    ※ Lưu ý:

    Có hai trường hợp sử dụng phổ biến:

    • Thứ nhất: Khi đầu vào là HIGH, thực hiện một hành động. Khi đầu vào là LOW, thực hiện hành động ngược lại.
    • Thứ hai: Khi đầu vào thay đổi từ LOW sang HIGH (hoặc HIGH sang LOW), thực hiện một hành động.

    Dựa trên mục đích, chúng ta chọn một trong những tùy chọn này. Ví dụ, khi sử dụng nút nhấn để điều khiển LED:

    • Nếu chúng ta cần LED bật khi nút nhấn được nhấn và tắt khi nó không được nhấn, chúng ta nên chọn kịch bản đầu tiên.
    • Nếu chúng ta muốn LED chuyển đổi giữa BẬT và TẮT mỗi khi nút nhấn được nhấn, chúng ta nên chọn kịch bản thứ hai.

    Code Arduino UNO R4 - Đọc trạng thái của nút nhấn

    #define BUTTON_PIN 7 // The Arduino UNO R4 pin connected to the button void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as a pull-up input pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: int button_state = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(button_state); delay(500); }

    Các Bước Nhanh

    Thực hiện theo các hướng dẫn này từng bước:

    • Nếu đây là lần đầu tiên bạn sử dụng Arduino UNO R4 WiFi/Minima, hãy tham khảo hướng dẫn về Arduino UNO R4 - Cài Đặt Phần Mềm.
    • Kết nối nút nhấn với Arduino UNO R4 theo sơ đồ được cung cấp.
    • Kết nối bo mạch Arduino Uno R4 với máy tính của bạn bằng cáp USB.
    • Khởi động Arduino IDE trên máy tính của bạn.
    • Chọn bo mạch Arduino Uno R4 phù hợp (ví dụ: Arduino Uno R4 WiFi) và cổng COM.
    • Sao chép code trên và mở nó trong Arduino IDE
    • Nhấp vào nút Upload trong Arduino IDE để gửi code đến Arduino UNO R4 của bạn.
    Arduino ide - how to upload code
    • Mở Serial Monitor.
    • Nhấn và thả nút nhấn nhiều lần.
    • Kiểm tra kết quả trên Serial Monitor.
    COM6
    Send
    1 1 1 0 0 0 0 0 0 1 1 1
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    1 có nghĩa là BẬT, 0 có nghĩa là TẮT.

    Giải Thích Code

    Phần giải thích có trong phần comment của code Arduino ở trên.

    Code Arduino UNO R4 - Phát hiện sự kiện nhấn và thả nút

    Hãy thay đổi code để nhận biết khi nút nhấn được nhấn và thả.

    /* * Mã Arduino UNO R4 này được phát triển bởi newbiely.vn * Mã Arduino UNO R4 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino-uno-r4/arduino-uno-r4-button */ #define BUTTON_PIN 7 // The Arduino UNO R4 pin connected to the button int button_state; // the current state of button int prev_button_state = LOW; // the previous state of button void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as a pull-up input pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if (prev_button_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (prev_button_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the last state prev_button_state = button_state; }

    Các Bước Nhanh

    • Sao chép code trên và dán vào Arduino IDE
    • Nhấp vào nút Upload trong Arduino IDE để gửi code đến Arduino UNO R4.
    • Mở Serial Monitor.
    • Nhấn và thả nút nhấn.
    • Kiểm tra kết quả trên Serial Monitor.
    COM6
    Send
    The button is pressed The button is released
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    ※ Lưu ý:

    • Ngay cả khi bạn chỉ nhấn và thả nút nhấn một lần, Serial Monitor có thể hiển thị nhiều sự kiện nhấn và thả. Đây là hành vi thường gặp được gọi là "hiện tượng chattering". Bạn có thể tìm thêm chi tiết trong Arduino UNO R4 - Button - Debounce.
    • Để đơn giản hóa quy trình cho người mới bắt đầu sử dụng nhiều nút nhấn, chúng tôi đã phát triển một thư viện có tên ezButton. Bạn có thể tìm hiểu về thư viện ezButton tại đây.
    • Nếu bạn đang sử dụng button module, hãy đặt chân ở chế độ đầu vào bằng cách sử dụng pinMode(BUTTON_PIN, INPUT). Trong cấu hình này, module xuất ra LOW khi nút nhấn không được nhấn và HIGH khi nút nhấn được nhấn.

    Video Tutorial

    Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.