Arduino Nút nhấn Khử rung
Khi một nút được nhấn/thả hoặc khi một công tắc được bật/tắt, người mới bắt đầu thường nghĩ đơn giản rằng trạng thái của nó được thay đổi từ LOW sang HIGH hoặc HIGH sang LOW. Trong thực tế, nó không phải lúc nào cũng đúng như vậy. Vì đặc tính cơ học và vật lý, trạng thái của nút (hoặc công tắc) có thể được thay đổi giữa LOW và HIGH nhiều lần liên tiếp. Hiện tượng này được gọi là chattering. Hiện tượng chattering khiến một lần nhấn có thể được đọc như nhiều lần nhấn, dẫn đến sự cố ở một số loại ứng dụng. Hướng dẫn này cho thấy cách loại bỏ hiện tượng này (gọi là debounce đầu vào).

Phần cứng cần chuẩn bị
| 1 | × | Arduino Uno R3 | ||
| 1 | × | USB 2.0 cable type A/B (for USB-A PC) | ||
| 1 | × | USB 2.0 cable type C/B (for USB-C PC) | ||
| 1 | × | breadboard-mount Button with Cap | ||
| 1 | × | breadboard-mount Button Kit | ||
| 1 | × | Panel-mount Push Button | ||
| 1 | × | mô-đun nút nhấn | ||
| 1 | × | breadboard | ||
| 1 | × | dây jumper | ||
| 1 | × | (Khuyến nghị) Screw Terminal Block Shield for Arduino Uno | ||
| 1 | × | (Khuyến nghị) Breadboard Shield for Arduino Uno | ||
| 1 | × | (Khuyến nghị) Enclosure for Arduino Uno | ||
| 1 | × | (Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO |
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về Nút
Nếu bạn chưa biết về nút nhấn (bố trí chân, cách nó hoạt động, cách lập trình ...), hãy tìm hiểu về chúng trong các bài hướng dẫn sau đây:
Sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image
Hãy xem và so sánh mã Arduino cho hai trường hợp: không có debounce và có debounce, cũng như hành vi của chúng.
Đọc nút nhấn mà không lọc nhiễu
Trước khi tìm hiểu về debouncing, hãy xem mã không có debouncing và hành vi của nó.
Hướng dẫn từng bước
- Kết nối Arduino với PC bằng cáp USB
- Mở Arduino IDE, chọn board và cổng đúng
- Sao chép đoạn mã dưới đây và mở bằng Arduino IDE
- Nhấp vào nút Tải lên trên Arduino IDE để tải mã lên Arduino

- Mở Serial Monitor
- Giữ nút nhấn trong vài giây rồi thả ra.
- Xem kết quả trên Serial Monitor
Như bạn có thể thấy, bạn đã nhấn và thả nút chỉ một lần duy nhất. Tuy nhiên, Arduino coi đó như nhiều lần nhấn và thả.
Đọc Nút với Chống Rung
Hướng dẫn từng bước
- Sao chép mã dưới đây và mở bằng Arduino IDE
- Nhấn nút Tải lên trên Arduino IDE để tải mã lên Arduino
- Mở Serial Monitor
- Nhấn và giữ nút trong vài giây rồi thả ra.
- Xem kết quả trên Serial Monitor
⇒ Như bạn có thể thấy, bạn đã nhấn và thả nút đúng một lần. Arduino nhận diện nó là lần nhấn và thả duy nhất. Tiếng nhiễu được loại bỏ.
Chúng tôi đã làm cho nó đơn giản - Mã chống rung nút Arduino với thư viện
Để giúp người mới bắt đầu dễ dàng hơn nhiều, đặc biệt là khi sử dụng nhiều nút nhấn, chúng tôi đã tạo ra một thư viện có tên ezButton. Bạn có thể tìm hiểu về thư viện ezButton ở đây.
Mã chống rung cho nút Arduino cho một nút duy nhất
Mã khử rung nút Arduino cho nhiều nút
Sơ đồ mạch cho đoạn mã ở trên:

This image is created using Fritzing. Click to enlarge image
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.
Kiến thức bổ sung
- DEBOUNCE_DELAY giá trị phụ thuộc vào các ứng dụng. Các ứng dụng khác nhau có thể sử dụng các giá trị khác nhau.
Khả năng mở rộng
Phương pháp debounce có thể áp dụng cho công tắc, cảm biến cảm ứng ...