Menu
CoddyTech

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.

challenge icon

Tantangan

Sedang

Perbaiki penghitung agar setiap tekanan dihitung satu kali:

  • ketika reading berbeda dari lastReading, hitung jika itu adalah tekanan (LOW), lalu tunggu 20 ms
  • tetap simpan lastReading di akhir loop()

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;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Input

Latihan sendiri: Playground Arduino