Có, việc gỡ rối theo cả hai hướng là cần thiết nếu bạn muốn một cạnh duy nhất được đảm bảo mỗi khi công tắc thay đổi trạng thái.
May mắn thay, bạn không cần bất kỳ phần cứng bổ sung nào để gỡ lỗi nếu công tắc được kết nối với vi điều khiển. Nếu micro có pullup bên trong, điều mà nhiều người làm, bạn không cần gì bên ngoài hơn là chuyển đổi giữa pin micro và mặt đất.
Tôi thấy 50 ms là thời gian gỡ lỗi tốt. Hầu hết các công tắc bật lên ít hơn thế, nhưng một số ít có thể dài gần như vậy. Nhưng, 50 ms vẫn sẽ cảm thấy tức thời với người dùng, vì vậy bạn cũng có thể đáng tin cậy hơn. Sự khác biệt duy nhất là số bạn đếm trong phần sụn, vì vậy không có chi phí thêm ở đó. Tôi thường có một ngắt định kỳ 1 ms vì những lý do khác, vì vậy nếu công tắc ở trạng thái tương tự 50 lần liên tiếp trong lần gián đoạn đó, thì bạn tuyên bố nó đã được chuyển sang trạng thái mới.
Chi tiết về logic gỡ lỗi để phản hồi bình luận:
Nói chung, bạn sẽ có một bit toàn cục cho biết trạng thái được công bố chính thức của công tắc. Đây là điều mà bất kỳ logic nào cần biết cách thiết lập công tắc được sử dụng. Trạng thái bổ sung duy nhất bạn cần là một bộ đếm, thường là một byte đơn, trong thói quen ngắt. Giả sử ngắt là cứ sau 1 ms và thời gian gỡ lỗi là 50 ms. Đối với mỗi ngắt:
Nếu trạng thái tự nhiên phù hợp với trạng thái đã công bố:
Đặt lại bộ đếm thành 50
Làm xong
Nếu trạng thái tức thời khác với trạng thái được công bố:
Bộ đếm giảm
Nếu bộ đếm đạt 0:
Khai báo trạng thái mới được công bố
Đặt lại bộ đếm thành 50
Làm xong