elemes/examples/content/button_input_arduino.md

4.6 KiB

---LESSON_INFO--- Pelajaran Arduino: Membaca input tombol dan mengontrol LED.

Learning Objectives:

  • Memahami fungsi digitalRead() untuk membaca input digital
  • Menggunakan INPUT_PULLUP untuk push button
  • Menerapkan logika kondisional (if-else) berdasarkan input
  • Menghubungkan push button dan LED ke Arduino

Prerequisites:

  • Hello, World!
  • LED Blink
  • Hello Serial ---END_LESSON_INFO---

Button Input — Membaca Tombol

Setelah belajar output (menyalakan LED) dan serial (mengirim teks), sekarang kita belajar input — membaca tombol yang ditekan oleh pengguna.

Konsep Digital Input

Setiap pin digital Arduino bisa dikonfigurasi sebagai INPUT atau OUTPUT:

pinMode(13, OUTPUT);    // Pin 13 = output (LED)
pinMode(2, INPUT_PULLUP); // Pin 2 = input dengan pullup

Apa itu INPUT_PULLUP?

Tanpa resistor, pin input Arduino bisa membaca nilai acak (mengambang). INPUT_PULLUP mengaktifkan resistor internal Arduino yang menarik pin ke HIGH (5V).

Tanpa pullup:  Pin ──?──  (nilai acak: HIGH atau LOW)
Dengan pullup: Pin ──R──► 5V  (default HIGH, jadi LOW saat ditekan)

Saat tombol tidak ditekan: digitalRead() = HIGH (1) Saat tombol ditekan: digitalRead() = LOW (0)

Perhatikan: Logikanya terbalik! Tombol ditekan = LOW, tidak ditekan = HIGH.

Fungsi digitalRead()

int nilai = digitalRead(2);  // Baca pin 2
if (nilai == LOW) {
  // Tombol sedang ditekan
}

Rangkaian

Hubungkan push button dan LED ke Arduino:

Pin 2  ──► Button pin 1.l (input)
Button pin 2.l ──► GND    (ground)

Pin 13 ──► LED Anode (A)
LED Cathode (C) ──► GND

Push button menggunakan INPUT_PULLUP, jadi hanya perlu 2 kabel: dari pin Arduino ke tombol, dan dari tombol ke GND. Tidak perlu resistor eksternal!

Contoh Program

const int BUTTON_PIN = 2;
const int LED_PIN = 13;

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int state = digitalRead(BUTTON_PIN);
  
  if (state == LOW) {
    digitalWrite(LED_PIN, HIGH);
    Serial.println("PRESSED");
  } else {
    digitalWrite(LED_PIN, LOW);
    Serial.println("RELEASED");
  }
  
  delay(100);
}

---EXERCISE---

Tantangan

Kode Arduino: Tulis program yang membaca tombol di pin 2 dan mengontrol LED di pin 13:

  • Saat tombol ditekan → LED menyala, cetak PRESSED ke Serial Monitor
  • Saat tombol dilepas → LED mati, cetak RELEASED ke Serial Monitor

Gunakan INPUT_PULLUP agar tidak perlu resistor tambahan untuk tombol.

Rangkaian: Hubungkan komponen berikut di simulator:

  • Pin 2 Arduino → Button (pin 1.l)
  • Button (pin 2.l) → GND Arduino
  • Pin 13 Arduino → LED Anode (A)
  • LED Cathode (C) → GND Arduino

Setelah selesai, tekan Compile & Run, lalu klik tombol di simulator untuk menguji.

---INITIAL_CODE_ARDUINO--- // Button Input - Membaca Tombol // Tekan tombol untuk menyalakan LED

const int BUTTON_PIN = 2; const int LED_PIN = 13;

void setup() { // Setup pin mode pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(LED_PIN, OUTPUT); Serial.begin(9600); }

void loop() { int buttonState = digitalRead(BUTTON_PIN);

if (buttonState == LOW) { // Tombol ditekan digitalWrite(LED_PIN, HIGH); Serial.println("PRESSED"); } else { // Tombol dilepas digitalWrite(LED_PIN, LOW); Serial.println("RELEASED"); }

delay(100); } ---END_INITIAL_CODE_ARDUINO---

---VELXIO_CIRCUIT--- { "board": "arduino:avr:uno", "components": [ { "type": "wokwi-pushbutton", "id": "button-1", "x": 400, "y": -100, "rotation": 0, "props": {} }, { "type": "wokwi-led", "id": "led-1", "x": 400, "y": -250, "rotation": 0, "props": { "color": "green", "pin": 13 } } ], "wires": [] } ---END_VELXIO_CIRCUIT---

---EXPECTED_SERIAL_OUTPUT--- PRESSED ---END_EXPECTED_SERIAL_OUTPUT---

---EXPECTED_WIRING--- { "wires": [ { "start": { "componentId": "arduino-uno", "pinName": "2" }, "end": { "componentId": "button-1", "pinName": "1.l" } }, { "start": { "componentId": "button-1", "pinName": "2.l" }, "end": { "componentId": "arduino-uno", "pinName": "GND" } }, { "start": { "componentId": "arduino-uno", "pinName": "13" }, "end": { "componentId": "led-1", "pinName": "A" } }, { "start": { "componentId": "led-1", "pinName": "C" }, "end": { "componentId": "arduino-uno", "pinName": "GND" } } ] } ---END_EXPECTED_WIRING---

---KEY_TEXT--- digitalRead INPUT_PULLUP digitalWrite Serial ---END_KEY_TEXT---