Atasi Pantulan Tombol
Termasuk bagian Input dalam perjalanan Arduino di Coddy. Pelajaran 6 dari 22.
Tombol dalam pelajaran ini adalah tombol sungguhan, dan kode awalnya adalah penghitungmu dari pelajaran sebelumnya. Jalankan dan tekan tombol sekali: hitungannya bertambah lebih dari satu.
Di dalam tombol, dua kontak logam saling bersentuhan. Saat keduanya bertemu, kontak itu memantul: selama sekitar satu milidetik, keduanya bersentuhan, terpisah karena pegas, lalu bersentuhan lagi. Saat kamu melepaskan tombol, hal yang sama terjadi. loop() membaca pin berkali-kali dalam milidetik itu dan menghitung setiap pantulan sebagai satu kali tekan.
Solusinya disebut debouncing: saat pembacaan berubah, tanggapi sekali, lalu tunggu sekitar 20 ms agar kontak stabil sebelum membaca lagi. Orang tidak akan menyadari jeda 20 ms.
if (reading != lastReading) {
if (reading == LOW) {
presses++;
Serial.println(presses);
}
delay(20);
}
lastReading = reading;Tunggu setelah setiap perubahan, bukan hanya setelah tombol ditekan: saat dilepas, kontak juga memantul, dan setiap pantulan saat tombol terangkat terlihat seperti tekanan baru.
Tantangan
SedangPerbaiki penghitung agar setiap tekanan dihitung satu kali:
- ketika
readingberbeda darilastReading, hitung jika itu adalah tekanan (LOW), lalu tunggu 20 ms - tetap simpan
lastReadingdi akhirloop()
Tekan Run, tekan tombol beberapa kali dan perhatikan hitungannya, lalu Check.
Coba sendiri
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;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Input
Latihan sendiri: Playground Arduino