Dasar · 3 mnt baca

Cara Menghubungkan Push Button ke Arduino: Pull-up, Pull-down, dan Debounce

Bagaimana cara menghubungkan push button ke Arduino? Bagian dalam tombol 4 kaki, resistor pull-up dan pull-down, INPUT_PULLUP, debounce, dan contoh menyalakan-mematikan LED.

Tombol adalah komponen paling sederhana untuk membawa sentuhan pengguna ke proyek Arduino. Ketika ditekan, tombol menyambungkan dua kontak; ketika dilepas, keduanya terpisah. Kelihatannya sederhana, tapi kalau pengkabelannya salah, tombol akan membaca nilai acak atau menghitung satu tekanan beberapa kali. Di panduan ini kami bahas cara menghubungkan dan membaca tombol dengan benar.

Push button
Tombol taktil 4 kaki. Kaki-kakinya terhubung berpasangan di dalam.

Bagian dalam tombol 4 kaki

Tombol taktil 6×6 mm yang paling sering kamu pakai di breadboard punya 4 kaki, tapi hanya 2 titik sambungan: pasangan kaki yang berseberangan sudah terhubung di dalam. Menekan tombol akan menyambungkan kedua pasangan itu. Kalau kamu memasang tombol melintasi kanal tengah breadboard, setiap pasangan masuk ke baris yang berbeda dan arah yang benar jadi mudah ditentukan.

Kalau ragu soal arahnya, atur multimeter ke mode kontinuitas: kaki yang berbunyi bip tanpa ditekan adalah pasangan yang memang sudah terhubung. Kaki yang berbunyi hanya ketika ditekan adalah kaki yang disambungkan oleh tombol.

Kenapa butuh resistor pull-up atau pull-down?

Ketika tombol tidak ditekan, pin input Arduino tidak terhubung ke mana pun; kondisi ini disebut input mengambang (floating). Pin seperti itu menangkap derau listrik dan membaca nilai HIGH atau LOW secara acak. Solusinya adalah menarik pin ke level tetap lewat sebuah resistor:

MetodePengkabelanTidak ditekanDitekan
Pull-down10 kΩ pin → GND, tombol pin → 5VLOWHIGH
Pull-up (eksternal)10 kΩ pin → 5V, tombol pin → GNDHIGHLOW
INPUT_PULLUP (internal)Tombol pin → GND, tanpa resistorHIGHLOW

Cara paling praktis adalah pinMode(pin, INPUT_PULLUP): resistor internal Arduino sekitar 20–50 kΩ diaktifkan dan kamu cukup menghubungkan tombol di antara pin dan GND. Bedanya cuma logikanya terbalik: tombol yang ditekan terbaca LOW.

Debounce: kenapa satu tekanan terhitung beberapa kali?

Begitu kontak logam tombol bersentuhan, kontak itu bergetar selama beberapa milidetik dan rangkaian terbuka-tertutup berkali-kali. Karena Arduino membaca sangat cepat, satu tekanan bisa terlihat seperti 3–5 tekanan. Ini disebut pantulan kontak (bounce). Untuk mengatasinya lewat software, perubahan baru diabaikan selama sekitar 50 ms setelah perubahan terakhir.

C++ (Arduino IDE)
1const int BUTTON_PIN = 2;   // buton pin ile GND arasında / button between pin and GND
2const int LED_PIN = 13;     // karttaki LED / onboard LED
3
4bool ledOn = false;
5int lastReading = HIGH;
6int stableState = HIGH;
7unsigned long lastChange = 0;
8
9void setup() {
10  pinMode(BUTTON_PIN, INPUT_PULLUP); // dahili pull-up / internal pull-up
11  pinMode(LED_PIN, OUTPUT);
12}
13
14void loop() {
15  int reading = digitalRead(BUTTON_PIN);
16  if (reading != lastReading) lastChange = millis();   // değişti / changed
17  if (millis() - lastChange > 50 && reading != stableState) {
18    stableState = reading;                              // 50 ms kararlı / stable for 50 ms
19    if (stableState == LOW) {                           // basıldı / pressed
20      ledOn = !ledOn;                                   // LED'i değiştir / toggle LED
21      digitalWrite(LED_PIN, ledOn ? HIGH : LOW);
22    }
23  }
24  lastReading = reading;
25}

Kode ini menyalakan atau mematikan LED sekali per tekanan; menahan tombol tidak membuatnya terus berganti. Karena memakai millis(), bukan delay(), loop tidak pernah menunggu dan bisa mengerjakan tugas lain di waktu yang sama.

Kesalahan umum

  • Memasang tombol dengan arah yang salah: kalau kamu memakai pasangan kaki yang sudah terhubung, tombol selalu terbaca ditekan. Putar tombol 90°.
  • Tidak memakai resistor: tanpa pull-up atau pull-down, nilai yang terbaca berubah secara acak.
  • Mengharapkan logika yang salah dengan INPUT_PULLUP: tombol yang ditekan terbaca LOW, bukan HIGH; tulis kondisimu sesuai itu.
  • Memakai delay() panjang untuk debounce: program tidak bisa melakukan apa-apa selama waktu itu; pengaturan waktu dengan millis() lebih baik.
  • Memakai pin 34–39 di ESP32: pin-pin ini tidak punya pull-up internal; tambahkan resistor eksternal atau pilih pin lain.

Untuk menempatkan tombol dan resistor dengan benar di breadboard, lihat Apa Itu Breadboard?, dan untuk memahami nilai resistor pull-up, baca Apa Itu Resistor?.

Pertanyaan umum

Resistor berapa yang dibutuhkan untuk tombol?

10 kΩ adalah nilai standar untuk pull-up atau pull-down. Dengan INPUT_PULLUP, kamu sama sekali tidak butuh resistor eksternal.

Kenapa tombol terbaca LOW ketika ditekan?

Dengan INPUT_PULLUP atau pull-up eksternal, pin dalam kondisi normal bernilai HIGH; tombol menghubungkannya ke GND, jadi terbaca LOW ketika ditekan. Itu memang perilaku yang diharapkan.

Berapa lama waktu debounce yang sebaiknya dipakai?

20–50 ms sudah cukup untuk sebagian besar tombol. Tombol lama atau berkualitas rendah mungkin butuh 80–100 ms.

Bagaimana cara membaca beberapa tombol?

Hubungkan setiap tombol ke pinnya sendiri dan atur semuanya ke INPUT_PULLUP. Untuk banyak tombol, pakai keypad atau baca semuanya di satu pin analog dengan resistor yang berbeda-beda.

Lihat semua proyek
Kendali LED dengan Tombol Tekan (Tekan)
#9Pemula

Kendali LED dengan Tombol Tekan (Tekan)

Persis seperti bel pintu: lampu tetap menyala selama kamu menekan, dan mati ketika kamu melepasnya. Arduino terus mendengarkan tombol; selama ditekan LED menyala, dan begitu jarimu terangkat LED mati.

4.8(113)
229
Nyala/Mati LED dengan Tombol (On/Off)
#10Pemula

Nyala/Mati LED dengan Tombol (On/Off)

Tekan tombol sekali dan lampu menyala, tekan lagi dan lampu mati, persis seperti sakelar lampu di kamarmu. Arduino menyadari setiap tekanan dan membalik LED ke keadaan sebaliknya, sambil menunggu sebe

4.8(100)
167
Piano Sederhana dengan Buzzer dan Tombol
#26Mahir
Premium

Piano Sederhana dengan Buzzer dan Tombol

Buat piano kecilmu sendiri dengan delapan tombol. Setiap tombol adalah satu nada, dari rendah ke tinggi: do, re, mi, fa, sol, la, si, dan do tinggi. Nada dimainkan lewat buzzer selama tombol ditahan d

4.9(66)
88
Penghitung dengan Layar 7 Segmen dan Tombol
#43Mahir
Premium

Penghitung dengan Layar 7 Segmen dan Tombol

Penghitung sederhana dengan tiga tombol: tekan satu dan angka di layar naik satu, tekan yang lain dan turun satu, dan yang ketiga mengembalikannya ke nol. Layar 7 segmen satu digit menghitung dari 0 s

4.6(35)
47
Kendali LED dengan Tombol Tekan ESP32 (Tekan)
#104Pemula

Kendali LED dengan Tombol Tekan ESP32 (Tekan)

LED menyala ketika tombol ditekan dan mati ketika dilepas. Menunjukkan cara memakai pin input digital ESP32 dan resistor pull-up internalnya. Mode INPUT_PULLUP membuat resistor eksternal tidak diperlukan.

4.6(36)
55
Kendali LED dengan Tombol Tekan ESP32 (Toggle)
#105Pemula

Kendali LED dengan Tombol Tekan ESP32 (Toggle)

Setiap kali tombol ditekan, keadaan LED berubah: jika menyala jadi mati, jika mati jadi menyala. Pola toggle klasik. Dengan debounce, kita membersihkan derau mekanis tombol tekan agar satu tekanan menghasilkan satu kali toggle.

4.6(39)
57
LED Toggle dengan Tombol Raspberry Pi Pico
#156Pemula

LED Toggle dengan Tombol Raspberry Pi Pico

Tombol + LED, level berikutnya! Berbeda dengan proyek tombol dasar, tombol tidak perlu ditahan. Tekan dan lepas → LED menyala. Tekan dan lepas lagi → LED mati (toggle). Rangkaiannya sama (LED GP14, Tombol GP2), tetapi kodenya sangat berbeda. Pelajari deteksi tepi (menangkap momen turun 1→0), pelacakan status, dan debounce (penyaring pantulan mekanis). led.toggle() MicroPython menukar status dalam satu baris. Dasar semua proyek tombol interaktif (pengganti mode, IRQ, klik ganda).

0.0(0)
9
Debounce Tombol Raspberry Pi Pico: IRQ vs Polling Perangkat Lunak
#159Menengah
Premium

Debounce Tombol Raspberry Pi Pico: IRQ vs Polling Perangkat Lunak

Tekan tombol sekali, kode menghitung 3-4? Itu pantulan kontak: kontak logam bergetar beberapa mikrodetik! Bandingkan 2 metode di Serial: polling MENTAH (ikut menghitung pantulan) vs IRQ + debounce perangkat lunak (akurat). Pelajari pantulan kontak, debounce perangkat lunak (ticks_diff() > 50ms), interrupt Pin.irq(), pemicu IRQ_FALLING, handler ISR, serta global + keamanan ISR. LED berbalik lewat IRQ, dan Serial menampilkan kedua penghitung.

0.0(0)
12