Pertemuan 2
Input Digital - Push Button & Touch Sensor (TTP223)
Tujuan Pembelajaran
- Memahami cara kerja push button dan touch sensor sebagai input digital.
- Memahami konsep pull-up resistor pada push button.
- Memahami prinsip kerja sensor sentuh kapasitif (TTP223).
- Mampu membaca status keduanya dan meresponnya lewat output sederhana.
Penjelasan Konsep
Cara kerja push button
Push button adalah saklar sederhana yang menghubungkan atau memutus jalur listrik saat ditekan. Masalahnya, ketika tombol tidak ditekan, pin input bisa berada dalam kondisi "mengambang" (floating) - nilainya tidak pasti HIGH atau LOW.
Pull-up resistor
Pull-up resistor menarik pin ke HIGH saat tombol tidak ditekan; saat ditekan, pin jadi LOW. Arduino Uno dan ESP32 punya pull-up internal yang bisa diaktifkan lewat kode (INPUT_PULLUP), sehingga tidak perlu resistor tambahan.
Sensor Sentuh TTP223
TTP223 adalah modul sensor sentuh kapasitif - mendeteksi sentuhan jari tanpa perlu tombol mekanik yang ditekan fisik. Modul ini punya 3 pin: VCC, GND, dan SIG/OUT/I (output HIGH saat disentuh). Beberapa modul TTP223 punya jumper solder untuk memilih mode:
- Momentary (A) - output HIGH hanya selama disentuh (seperti tombol biasa).
- Toggle (B) - output berganti HIGH/LOW setiap kali disentuh (seperti saklar lampu).
Sensor sentuh lebih tahan lama dibanding tombol mekanik karena tidak ada bagian yang bergerak/aus, dan cocok untuk panel kontrol yang ingin terlihat rapi/flat.
Debouncing
Secara fisik, saat tombol ditekan/dilepas, kontaknya bisa "bergetar" beberapa milidetik sehingga pembacaan jadi tidak stabil (disebut bouncing). Solusinya bisa dengan menambahkan sedikit delay() setelah pembacaan.
Kesalahan umum
- Lupa mengaktifkan pull-up (baik internal
INPUT_PULLUPmaupun resistor eksternal) - pin jadi floating, nilainya bisa berubah-ubah sendiri walau tombol tidak disentuh. - Tertukar logika HIGH/LOW - dengan
INPUT_PULLUP, tombol yang "ditekan" justru berartiLOW, bukanHIGH. Banyak siswa menulisif (digitalRead(pin) == HIGH)untuk kondisi "ditekan" dan bingung kenapa logikanya terbalik. - Salah jumper mode TTP223 - jika modul disolder ke mode Toggle (B) padahal kode mengasumsikan mode Momentary (A), perilaku LED jadi tidak sesuai harapan (menyala terus setelah disentuh sekali, bukan hanya selama disentuh).
- Mengabaikan debounce - tanpa jeda sedikit pun setelah pembacaan, satu kali tekan tombol mekanik bisa terbaca sebagai beberapa kali tekan akibat getaran kontak.
Komponen yang Dibutuhkan
- 1x Arduino Uno atau ESP32
- 1x Tactile Push Button
- 1x Modul Touch Sensor TTP223
- 1x LED + resistor 220Ω (untuk indikator)
- Breadboard, kabel jumper
Diagram / Skema Pengkabelan
Tactile Push Button:
Kaki 1 -> pin digital (mis. D2)
Kaki 2 -> GND
(Gunakan pinMode(D2, INPUT_PULLUP) sehingga tidak perlu resistor pull-up eksternal)
Modul TTP223:
VCC -> 5V (atau 3.3V untuk ESP32)
GND -> GND
SIG -> pin digital (mis. D3)
LED indikator:
Anoda (kaki panjang) -> resistor 220Ω -> pin digital (mis. D8)
Katoda (kaki pendek) -> GND
Contoh Kode Program
// Membaca push button (pull-up internal) dan touch sensor TTP223
const int pinTombol = 2;
const int pinTouch = 3;
const int pinLed = 8;
void setup() {
pinMode(pinTombol, INPUT_PULLUP); // HIGH saat tidak ditekan, LOW saat ditekan
pinMode(pinTouch, INPUT); // TTP223 output HIGH saat disentuh
pinMode(pinLed, OUTPUT);
Serial.begin(9600);
}
void loop() {
bool tombolDitekan = (digitalRead(pinTombol) == LOW);
bool disentuh = (digitalRead(pinTouch) == HIGH);
digitalWrite(pinLed, (tombolDitekan || disentuh) ? HIGH : LOW);
if (tombolDitekan) Serial.println("Push button ditekan!");
if (disentuh) Serial.println("Touch sensor disentuh!");
delay(50);
}Tugas / Latihan
- Bandingkan responsivitas push button dan TTP223 - mana yang terasa lebih cepat/nyaman dipakai berulang kali?
- Ubah program agar LED menyala bergantian ON/OFF setiap kali TTP223 disentuh (toggle), bukan hanya menyala selama disentuh.
- (Tantangan) Tambahkan penghitung (counter) yang mencatat berapa kali push button sudah ditekan sejak program mulai berjalan, lalu tampilkan angkanya ke Serial Monitor setiap kali bertambah. Pastikan satu kali tekan hanya dihitung satu kali (atasi masalah debounce/pembacaan berulang).