Integrasi Mikrokontroler & Input Digital

Memahami cara Arduino membaca sinyal digital dari tombol, konsep pull-up/pull-down, dan penggunaannya dalam sistem peringatan/alarm.

90 Menit
Modul 3 & 4: Ekosistem Arduino, Tinkercad, & Elektronika
Pertemuan 9

TPTujuan Pembelajaran

  1. Peserta didik dapat menjelaskan konsep INPUT_PULLUP dan mengapa digunakan
  2. Peserta didik dapat membuat program yang membaca status tombol dan merespons dengan LED
  3. Peserta didik dapat menggunakan Serial Monitor untuk debugging state input
  4. Peserta didik dapat membangun mini-project: sistem alarm sederhana dengan tombol dan LED merah

Input Digital: Arduino Mendengarkan

Bayangkan Arduino sebagai manusia. Di pertemuan sebelumnya, Arduino kita tugaskan untuk "berbicara" menggunakan cahaya (menyalakan LED melalui OUTPUT). Nah, sekarang kita akan mengajari Arduino untuk "mendengarkan" sekitarnya.

Komponen yang paling sering kita gunakan untuk memberi input digital adalah Pushbutton (tombol tekan). Tombol ini berfungsi seperti jembatan yang bisa menyambung (saat ditekan) dan memutus (saat dilepas) arus listrik.

Pull-Up vs Pull-Down: Menghilangkan Sinyal Noise

Jika kita hanya menyambungkan pin Arduino dengan tombol dan Ground, ada masalah besar! Saat tombol dilepas, pin Arduino tidak tersambung kemana-mana. Kondisi ini disebut Floating (Mengambang).

Solusinya adalah menggunakan Resistor Pull-Up atau Pull-Down:

  • Pull-Down: Memaksa pin menjadi LOW saat tombol tidak ditekan. Membutuhkan resistor tambahan di rangkaian.
  • Pull-Up Internal (INPUT_PULLUP): Memaksa pin menjadi HIGH saat tidak ditekan. Arduino punya resistor pull-up kecil di dalamnya yang bisa kita aktifkan dengan kode pinMode(pin, INPUT_PULLUP). Ini cara paling praktis!

Serial Monitor sebagai Jendela Debug

Bagaimana kita tahu apa yang dibaca oleh Arduino? Di sinilah Serial Monitor berperan. Serial Monitor seperti "layar chat" antara kita dengan Arduino di komputer.

Kita bisa meminta Arduino "mengetik" hasil bacaan tombolnya ke layar menggunakan perintah Serial.println(). Ini sangat berguna untuk debugging (mencari kesalahan) saat tombol kita tidak merespons seperti yang diharapkan.

Konsep State Machine Sederhana

Jika kita membuat kode "LED menyala selama tombol ditekan, mati saat dilepas", itu sangat mudah. Tapi bagaimana jika kita ingin membuat "Sistem Toggle" seperti saklar lampu senter? Tekan sekali nyala, lepas tetap nyala. Tekan lagi mati.

Untuk melakukannya, Arduino perlu punya "ingatan". Arduino harus tahu apakah sebelumnya tombol sudah ditekan atau belum. Kita menggunakan konsep State Machine sederhana dengan menggunakan variabel bool (True/False).

Diagram State Toggle Alarm

Kita juga harus mendeteksi yang namanya Falling Edge: momen spesifik ketika tombol baru saja berubah dari tidak ditekan (HIGH) menjadi ditekan (LOW).

Mini Project: Sistem Alarm Sederhana

Mari kita gabungkan semuanya! Kita akan membuat sistem alarm yang menggunakan tombol. Jika tombol ditekan, alarm aktif (LED Merah menyala dan Serial Monitor memberi peringatan). Jika ditekan lagi, alarm mati.

sistem_alarm.ino
cpp
const int BTN_PIN = 7;
const int LED_RED = 13;

bool alarmAktif = false;
bool tombolSebelumnya = HIGH;

void setup() {
  pinMode(BTN_PIN, INPUT_PULLUP);
  pinMode(LED_RED, OUTPUT);
  Serial.begin(9600);
  Serial.println("Sistem Alarm Siap.");
}

void loop() {
  bool tombolSekarang = digitalRead(BTN_PIN);
  
  // Deteksi tepi turun (falling edge) = momen tombol baru ditekan
  if (tombolSebelumnya == HIGH && tombolSekarang == LOW) {
    alarmAktif = !alarmAktif; // Toggle state alarm
    
    if (alarmAktif) {
      Serial.println("⚠ ALARM AKTIF!");
      digitalWrite(LED_RED, HIGH);
    } else {
      Serial.println("✓ Alarm dimatikan.");
      digitalWrite(LED_RED, LOW);
    }
    delay(50); // Debounce
  }
  
  tombolSebelumnya = tombolSekarang;
}
Serial Monitor Output
Sistem Alarm Siap. ⚠ ALARM AKTIF! ✓ Alarm dimatikan. ⚠ ALARM AKTIF!

Troubleshooting

Masalah:Serial Monitor mencetak banyak pesan sekaligus saat saya menekan tombol sekali.

Solusi:Ini disebut fenomena 'Bouncing'. Tombol fisik memiliki per mekanik yang memantul. Pastikan delay(50) untuk 'Debounce' sudah ditambahkan di kode.


Masalah:Tombol sama sekali tidak mengubah LED, padahal kode sudah benar.

Solusi:Periksa sambungan tombol. Pastikan kabel pin 7 tersambung secara diagonal terhadap kabel GND pada pushbutton 4 kaki.


Masalah:LED Merah redup atau tidak nyala.

Solusi:Pastikan pinMode(LED_RED, OUTPUT) sudah ada di setup. Jika tidak di-set OUTPUT, pin Arduino tidak bisa mengeluarkan arus yang cukup.

Cek Pemahaman

Jika sebuah pin diatur sebagai INPUT_PULLUP dan tersambung ke tombol tekan yang menyambung ke Ground, nilai apa yang akan dibaca oleh digitalRead() saat tombol TERSEBUT DITEKAN?

Sedang

Tantangan: Multi-Tombol

Tantangan: Alarm Dua Tombol

Modifikasi kode di atas dengan menambahkan satu tombol lagi di Pin 6. Buatlah agar:

  • Tombol 1 (Pin 7) HANYA untuk MENYALAKAN alarm.
  • Tombol 2 (Pin 6) HANYA untuk MEMATIKAN alarm.

Petunjuk: Kamu tidak perlu variabel toggle (!alarmAktif) lagi. Cukup atur nilai alarmAktif menjadi true saat tombol 1 ditekan, dan false saat tombol 2 ditekan.

Kesimpulan Pertemuan 9
  • digitalRead() digunakan untuk membaca sinyal digital (HIGH atau LOW) dari luar.
  • Pin input tidak boleh mengambang (floating). INPUT_PULLUP adalah solusi praktis menggunakan resistor internal Arduino.
  • Dalam konfigurasi Pull-Up, logika tombol menjadi terbalik: Ditekan = LOW, Dilepas = HIGH.
  • State Machine dan variabel bantuan dibutuhkan agar Arduino mengingat kondisi sistem (seperti saklar toggle).
  • Debounce (jeda waktu kecil, misalnya delay(50)) berguna untuk mengatasi sinyal palsu akibat pantulan fisik tombol.

RRefleksi Pembelajaran

Luangkan 2–3 menit untuk menjawab pertanyaan di bawah secara jujur.

Kejutan & Penemuan

Apa yang paling mengejutkan atau menarik hari ini?

Apa hal baru yang kamu pelajari tentang cara kerja tombol tekan dan logika Arduino hari ini?

Masih Membingungkan

Apa yang masih membingungkan atau ingin kamu pahami lebih dalam?

Apakah konsep 'logika terbalik' pada INPUT_PULLUP masih membingungkan bagimu?

Rencana Selanjutnya

Apa yang ingin kamu coba atau pelajari minggu depan?

Bagaimana sistem logika toggle alarm ini bisa diaplikasikan di alat-alat sekitarmu?

Refleksi tidak dinilai — ini adalah ruang jujurmu untuk berpikir.