Khử dội nút nhấn
Thuộc phần Đầu vào trong hành trình Arduino của Coddy. Bài học 6 trên 22.
Nút trong bài học này là nút thật, còn chương trình khởi đầu là bộ đếm của bạn từ bài học trước. Chạy chương trình rồi nhấn nút một lần: số đếm tăng hơn một đơn vị.
Bên trong nút có hai tiếp điểm kim loại. Khi chúng chạm nhau, chúng nảy: trong khoảng một mili giây, chúng chạm nhau, bật ra rồi lại chạm nhau. Khi nhả nút cũng vậy. loop() đọc chân nhiều lần trong khoảng một mili giây đó và tính mỗi lần nảy như một lần nhấn.
Giải pháp này gọi là khử dội: khi giá trị đọc thay đổi, xử lý thay đổi đó một lần, rồi đợi khoảng 20 ms để các tiếp điểm ổn định trước khi đọc lại. Người dùng không bao giờ nhận ra khoảng 20 ms.
if (reading != lastReading) {
if (reading == LOW) {
presses++;
Serial.println(presses);
}
delay(20);
}
lastReading = reading;Hãy đợi sau mỗi lần thay đổi, không chỉ sau khi nhấn: khi nhả nút, tiếp điểm cũng nảy, và mỗi lần nảy trong lúc nhả trông như một lần nhấn mới.
Thử thách
Trung bìnhSửa bộ đếm để mỗi lần nhấn chỉ được tính một lần:
- khi
readingkháclastReading, hãy tính nếu đó là một lần nhấn (LOW), sau đó chờ 20 ms - tiếp tục lưu
lastReadingở cuốiloop()
Nhấn Chạy, nhấn nút vài lần và theo dõi số đếm, sau đó nhấn Kiểm tra.
Tự làm thử
const int buttonPin = 2;
int presses = 0;
int lastReading = HIGH;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading == LOW && lastReading == HIGH) {
presses++;
Serial.println(presses);
}
lastReading = reading;
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Đầu vào
3Nhập liệu qua cổng nối tiếp
Đọc một ký tự qua cổng nối tiếpLệnh bằng từĐiều chỉnh tốc độ nhấp nháy qua cổng nối tiếpNhấp nháy theo lệnhTự luyện tập: Playground Arduino