Hướng dẫn này sẽ chỉ cho bạn cách sử dụng Arduino UNO R4 với nhiều button cùng lúc mà không cần hàm delay() để debounce. Hướng dẫn cung cấp code theo hai phương pháp khác nhau:
Code Arduino UNO R4 debounce nhiều button mà không sử dụng hàm delay().
Code Arduino UNO R4 debounce nhiều button sử dụng mảng mà không sử dụng hàm delay().
Chúng ta sẽ sử dụng năm button làm ví dụ. Bạn có thể dễ dàng thay đổi cho hai button, bốn button, hoặc thậm chí nhiều hơ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
Tiết lộ: Một số liên kết trong bài viết này là liên kết tiếp thị Amazon và có thể nhận hoa hồng theo chính sách của chương trình.
Về Button
Chúng tôi cung cấp hướng dẫn chi tiết về button, bao gồm kết nối phần cứng, cách hoạt động, đấu dây với Arduino UNO R4, và cách viết code. Tìm hiểu thêm tại đây:
This image is created using Fritzing. Click to enlarge image
Code Arduino UNO R4 - Nhiều Button với debounce
Khi sử dụng nhiều button, tình huống có thể trở nên phức tạp.
Ứng dụng cần debouncing button
Ứng dụng phải xác định khi button được nhấn hoặc thả
Thư viện ezButton giúp đơn giản hóa việc làm việc với button bằng cách xử lý debounce và các sự kiện button bên trong. Người dùng không cần lo lắng về việc quản lý thời gian và biến khi sử dụng thư viện này. Ngoài ra, việc sử dụng nhiều button có thể làm cho code rõ ràng và ngắn gọn hơn.
/* * 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-multiple-button */#include <ezButton.h>#define BUTTON_NUM 5 // the number of buttons#define BUTTON_PIN_1 2 // The Arduino UNO R4 pin connected to the button 1#define BUTTON_PIN_2 3 // The Arduino UNO R4 pin connected to the button 2#define BUTTON_PIN_3 4 // The Arduino UNO R4 pin connected to the button 3#define BUTTON_PIN_4 5 // The Arduino UNO R4 pin connected to the button 4#define BUTTON_PIN_5 6 // The Arduino UNO R4 pin connected to the button 5ezButtonbutton1(BUTTON_PIN_1); // create ezButton object for button 1ezButtonbutton2(BUTTON_PIN_2); // create ezButton object for button 2ezButtonbutton3(BUTTON_PIN_3); // create ezButton object for button 3ezButton button4(BUTTON_PIN_4); // create ezButton object for button 4ezButton button5(BUTTON_PIN_5); // create ezButton object for button 5voidsetup() {Serial.begin(9600);button1.setDebounceTime(100); // set debounce time to 100 millisecondsbutton2.setDebounceTime(100); // set debounce time to 100 millisecondsbutton3.setDebounceTime(100); // set debounce time to 100 milliseconds button4.setDebounceTime(100); // set debounce time to 100 milliseconds button5.setDebounceTime(100); // set debounce time to 100 milliseconds}voidloop() {button1.loop(); // MUST call the loop() function firstbutton2.loop(); // MUST call the loop() function firstbutton3.loop(); // MUST call the loop() function first button4.loop(); // MUST call the loop() function first button5.loop(); // MUST call the loop() function first// get button state after debounceint button1_state = button1.getState(); // the state after debounceint button2_state = button2.getState(); // the state after debounceint button3_state = button3.getState(); // the state after debounceint button4_state = button4.getState(); // the state after debounceint button5_state = button5.getState(); // the state after debounce/* Serial.print("The button 1 state: "); Serial.println(button1_state); Serial.print("The button 2 state: "); Serial.println(button2_state); Serial.print("The button 3 state: "); Serial.println(button3_state); Serial.print("The button 4 state: "); Serial.println(button4_state); Serial.print("The button 5 state: "); Serial.println(button5_state); */if (button1.isPressed())Serial.println("The button 1 is pressed");if (button1.isReleased())Serial.println("The button 1 is released");if (button2.isPressed())Serial.println("The button 2 is pressed");if (button2.isReleased())Serial.println("The button 2 is released");if (button3.isPressed())Serial.println("The button 3 is pressed");if (button3.isReleased())Serial.println("The button 3 is released");if (button4.isPressed())Serial.println("The button 4 is pressed");if (button4.isReleased())Serial.println("The button 4 is released");if (button5.isPressed())Serial.println("The button 5 is pressed");if (button5.isReleased())Serial.println("The button 5 is released");}
Kết nối Arduino Uno R4 với các button 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.
Nhấp vào biểu tượng Libraries ở phía bên trái của Arduino IDE.
Tìm kiếm ezButton và tìm thư viện button được tạo bởi ArduinoGetStarted.com.
Nhấp vào nút Install để cài đặt thư viện ezButton.
Sao chép code và dán vào Arduino IDE.
Nhấp nút Upload trong Arduino IDE để biên dịch và tải code lên bo mạch Arduino UNO R4.
Mở Serial Monitor trong Arduino IDE.
Nhấn và thả từng button một cách tuần tự.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
The button 1 is pressed
The button 1 is released
The button 2 is pressed
The button 2 is released
The button 3 is pressed
The button 3 is released
The button 4 is pressed
The button 4 is released
The button 5 is pressed
The button 5 is released
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
Code Arduino UNO R4 - Nhiều Button sử dụng mảng
Chúng ta có thể cải thiện code trên bằng cách sử dụng mảng button.
/* * 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-multiple-button */#include <ezButton.h>#define BUTTON_NUM 5 // the number of buttons#define BUTTON_PIN_1 2 // The Arduino UNO R4 pin connected to the button 1#define BUTTON_PIN_2 3 // The Arduino UNO R4 pin connected to the button 2#define BUTTON_PIN_3 4 // The Arduino UNO R4 pin connected to the button 3#define BUTTON_PIN_4 5 // The Arduino UNO R4 pin connected to the button 4#define BUTTON_PIN_5 6 // The Arduino UNO R4 pin connected to the button 5ezButtonbuttonArray[] = {ezButton(BUTTON_PIN_1),ezButton(BUTTON_PIN_2),ezButton(BUTTON_PIN_3),ezButton(BUTTON_PIN_4),ezButton(BUTTON_PIN_5)};voidsetup() {Serial.begin(9600);for (byte i = 0; i < BUTTON_NUM; i++) {buttonArray[i].setDebounceTime(100); // set debounce time to 100 milliseconds }}voidloop() {for (byte i = 0; i < BUTTON_NUM; i++) buttonArray[i].loop(); // MUST call the loop() function firstfor (byte i = 0; i < BUTTON_NUM; i++) {// get button state after debounceint button_state = buttonArray[i].getState(); // the state after debounce/* Serial.print("The button "); Serial.print(i + 1); Serial.print(": "); Serial.println(button_state); */if (buttonArray[i].isPressed()) {Serial.print("The button ");Serial.print(i + 1);Serial.println(" is pressed"); }if (buttonArray[i].isReleased()) {Serial.print("The button ");Serial.print(i + 1);Serial.println(" is released"); } }}
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.