259 lines
5.5 KiB
Markdown
259 lines
5.5 KiB
Markdown
---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": "led",
|
|
"id": "led-builtin",
|
|
"x": 956.2066448009604,
|
|
"y": -15.285273464964305,
|
|
"rotation": 0,
|
|
"props": {
|
|
"color": "red",
|
|
"pin": 13,
|
|
"state": false,
|
|
"value": false
|
|
}
|
|
},
|
|
{
|
|
"type": "resistor",
|
|
"id": "resistor-1776299815587-z0q0jzny8",
|
|
"x": 808.6031046903261,
|
|
"y": 44.96592399354325,
|
|
"rotation": 0,
|
|
"props": {
|
|
"value": false,
|
|
"state": false
|
|
}
|
|
},
|
|
{
|
|
"type": "pushbutton",
|
|
"id": "pushbutton-1776299852057-07xh6qh7g",
|
|
"x": 829.2414304859469,
|
|
"y": 230.19576790585754,
|
|
"rotation": 0,
|
|
"props": {
|
|
"color": "red",
|
|
"pressed": false,
|
|
"label": "",
|
|
"xray": false
|
|
}
|
|
}
|
|
],
|
|
"wires": []
|
|
}
|
|
---END_VELXIO_CIRCUIT---
|
|
|
|
---EXPECTED_SERIAL_OUTPUT---
|
|
PRESSED
|
|
---END_EXPECTED_SERIAL_OUTPUT---
|
|
|
|
---EXPECTED_WIRING---
|
|
{
|
|
"wires": [
|
|
{
|
|
"start": {
|
|
"componentId": "resistor-1776299815587-z0q0jzny8",
|
|
"pinName": "2"
|
|
},
|
|
"end": {
|
|
"componentId": "led-builtin",
|
|
"pinName": "A"
|
|
}
|
|
},
|
|
{
|
|
"start": {
|
|
"componentId": "arduino-uno",
|
|
"pinName": "GND.1"
|
|
},
|
|
"end": {
|
|
"componentId": "led-builtin",
|
|
"pinName": "C"
|
|
}
|
|
},
|
|
{
|
|
"start": {
|
|
"componentId": "resistor-1776299815587-z0q0jzny8",
|
|
"pinName": "1"
|
|
},
|
|
"end": {
|
|
"componentId": "arduino-uno",
|
|
"pinName": "13"
|
|
}
|
|
},
|
|
{
|
|
"start": {
|
|
"componentId": "pushbutton-1776299852057-07xh6qh7g",
|
|
"pinName": "1.l"
|
|
},
|
|
"end": {
|
|
"componentId": "arduino-uno",
|
|
"pinName": "2"
|
|
}
|
|
},
|
|
{
|
|
"start": {
|
|
"componentId": "arduino-uno",
|
|
"pinName": "GND.3"
|
|
},
|
|
"end": {
|
|
"componentId": "pushbutton-1776299852057-07xh6qh7g",
|
|
"pinName": "2.l"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
---END_EXPECTED_WIRING---
|
|
|
|
---KEY_TEXT---
|
|
digitalRead
|
|
INPUT_PULLUP
|
|
digitalWrite
|
|
Serial
|
|
---END_KEY_TEXT---
|