LKPD 04: MERANCANG PROGRAM KENDALI (DJ CONTROLLER)
A. SKENARIO (Misi)
Kamu harus membuat program untuk sistem "Smart DJ".
1. Input: Ada Tombol (Pin 2) dan Potensiometer (Pin A0).
2. Output: Ada LED (Pin 9) dan Buzzer (Pin 8).
3. Logika:
○ Sistem hanya menyala jika Tombol Ditekan.
○ Jika tombol ditekan, putaran Potensiometer akan mengatur terang-redup LED dan tinggi-rendah
nada Buzzer.
○ Jika tombol dilepas, semua mati.
B. TAHAP 1: PERENCANAAN VARIABEL & TIPE DATA
Sebelum menulis kode, tentukan dulu nama panggilan (Variabel) dan jenis datanya untuk setiap
komponen.
Tips:
● Gunakan const int untuk angka pin yang tidak akan berubah.
● Gunakan int untuk nilai sensor yang bisa berubah-ubah.
● Penting: Nama variabel bebas (contoh: lampu, ledPin, tombol), tapi harus konsisten dipakai di seluruh
kode!
C. TAHAP 2: PENULISAN KODE (CODING)
Salinlah struktur di bawah ini ke Arduino IDE. Isilah bagian kosong ( _______ ) menggunakan Nama Variabel
yang sudah kamu buat di tabel atas, serta tentukan Logika dan Mode Pin yang tepat.
Komponen Pin Tipe Data (const int / Nama Variabel (Tentukan
int) Sendiri!)
LED 9 ____________________ ____________________
Buzzer 8 ____________________ ____________________
Tombol 2 ____________________ ____________________
Potensio A0 ____________________ ____________________
// --- 1. DEKLARASI VARIABEL (Gunakan Tabel B) --- statusTombol = digitalRead(_______);
_______ _______ = 9; // Variabel untuk LED // Baca nilai analog potensiometer (0 s/d 1023)
_______ _______ = 8; // Variabel untuk Buzzer nilaiPotensio = analogRead(_______);
_______ _______ = 2; // Variabel untuk Tombol
_______ _______ = A0; // Variabel untuk Potensio // C. PENGAMBILAN KEPUTUSAN (Logic If-Else)
// Ingat: Karena pakai INPUT_PULLUP, tombol
void setup() { DITEKAN nilainya adalah LOW.
// --- 2. SETUP (Menentukan Siapa Input & Siapa
Output) --- if (statusTombol == _______) {
// --- JIKA TOMBOL DITEKAN (SISTEM NYALA) ---
// LED dan Buzzer adalah komponen yang
DIKENDALIKAN // 1. Logika Mapping: Ubah rentang 0-1023 menjadi
pinMode(_______, _______); // Atur Variabel LED 0-255 (untuk LED)
sebagai OUTPUT int levelCahaya = map(nilaiPotensio, 0, 1023, 0, 255);
pinMode(_______, _______); // Atur Variabel Buzzer
sebagai OUTPUT // 2. Logika Mapping: Ubah rentang 0-1023 menjadi
100-1000 (untuk Buzzer)
// Tombol adalah PENGENDALI (Gunakan Resistor int nadaSuara = map(nilaiPotensio, 0, 1023, 100, 1000);
Internal)
pinMode(_______, _______); // 3. Eksekusi ke Hardware
analogWrite(_______, levelCahaya); // Nyalakan
// (Opsional) Potensiometer tidak perlu pinMode di LED (PWM)
setup karena Analog Input tone(_______, nadaSuara); // Bunyikan Buzzer
}
} else {
void loop() { // --- JIKA TOMBOL DILEPAS (SISTEM MATI) ---
// --- 3. LOGIKA UTAMA (Looping) ---
digitalWrite(_______, LOW); // Matikan LED
// A. Siapkan wadah (int) untuk menyimpan hasil noTone(_______); // Matikan Buzzer
bacaan }
int statusTombol = 0;
int nilaiPotensio = 0; // D. DELAY (Untuk kestabilan pembacaan)
delay(_______);
// B. BACA SENSOR (Input) }
// Baca status digital tombol (0 atau 1)
D. EKSPLORASI MANDIRI (Critical Thinking)
Variabel: Mengapa untuk nomor Pin (seperti 9, 8, 2) kita disarankan menggunakan const int sedangkan untuk
statusTombol kita menggunakan int biasa?
○ Jawaban: ____________________________________________________
1. Logika: Jika kamu lupa menulis baris delay(10); atau delay-nya dihapus, apakah alat masih berfungsi?
Mengapa delay kecil itu penting?
○ Jawaban: ____________________________________________________
Kunci Jawaban (Untuk Guru) 🗝️
Bagian B (Tabel):
● Tipe Data Pin: const int (karena nomor pin tidak berubah selamanya).
● Nama Variabel: (Bebas, misal: led, buzzer, btn, pot).
Bagian C (Kode):
● Deklarasi:
○ const int [nama_led] = 9;
○ const int [nama_buzzer] = 8;
○ const int [nama_tombol] = 2;
○ const int [nama_pot] = A0;
● Setup:
○ pinMode([nama_led], OUTPUT);
○ pinMode([nama_buzzer], OUTPUT);
○ pinMode([nama_tombol], INPUT_PULLUP);
● Loop:
○ digitalRead([nama_tombol]);
○ analogRead([nama_pot]);
○ if (statusTombol == LOW)
○ analogWrite([nama_led], levelCahaya);
○ tone([nama_buzzer], nadaSuara);
○ digitalWrite([nama_led], LOW);
○ noTone([nama_buzzer]);
○ delay(10); (atau angka kecil lainnya misal 50).
Bagian D (Analisis):
1. const int (Constant Integer) mengunci nilai agar tidak bisa diubah secara tidak sengaja oleh program di
tengah jalan, dan menghemat memori. int biasa dipakai untuk nilai yang dinamis/berubah-ubah seperti
hasil bacaan sensor.
2. Alat tetap berfungsi, tetapi pembacaan sensor mungkin menjadi sangat sensitif atau bergetar (jitter).
Delay kecil memberikan waktu "napas" bagi prosesor Arduino agar pembacaan lebih stabil (debouncing
sederhana).