Blok Jika di Coding Blok: Tombol dan LED Arduino dengan If/Else
Blok jika (if) di coding blok untuk tombol dan LED Arduino: membaca pin, if/else, =, ≠, <, >, if bersarang, nyala/mati dengan satu tombol, debounce, dan lampu tidur LDR.
Blok jika di coding blok membuat program memilih salah satu dari dua jalur berdasarkan sebuah pertanyaan: “Apakah tombol ditekan? Kalau ya, nyalakan LED; kalau tidak, matikan.” Di C++ Arduino, struktur ini disebut if/else, dan blok “jika … lakukan … jika tidak” di BlueGrays adalah padanan persisnya. Di tulisan ini kamu memakai proyek tombol dan LED Arduino untuk belajar cara menjadikan pin sebagai input dan membacanya, lalu blok jika, operator perbandingan, kondisi bersarang, dan cara menggabungkan dua kondisi dengan “dan”, blok demi blok dan baris demi baris.
Sejauh ini program kita selalu melakukan hal yang sama: LED menyala, menunggu, mati, lalu menunggu lagi. Program itu tidak pernah mendengarkan dunia luar. Begitu kondisi ikut berperan, board mengambil keputusan dengan melihat tombol, sensor cahaya, atau jarak yang diukurnya, dan di situlah keseruan sebenarnya dari coding robotik dimulai. Setiap contoh di sini berasal dari proyek blok gratis, jadi kamu bisa membuka blok dan kodenya di halaman coding blok atau di aplikasi lalu mengikutinya berdampingan dengan tulisan ini.
Input dan output: ke arah mana pin bekerja?
Pin digital Arduino melakukan salah satu dari dua tugas. Pin yang diatur sebagai output mengeluarkan 5 V (HIGH) atau 0 V (LOW); begitulah cara mengendalikan LED, buzzer, atau relay. Pin yang diatur sebagai input tidak mengeluarkan apa pun dan hanya “mendengarkan” tegangan di pin itu: di Arduino Uno, tegangan di atas sekitar 3 V dibaca HIGH dan di bawah 1,5 V dibaca LOW. Di blok, pilihan ini dibuat di bagian setup: blok “atur pin 13 sebagai INPUT” menjadi pinMode(13, INPUT); di C++, dan “atur pin 7 sebagai OUTPUT” menjadi pinMode(7, OUTPUT);. Untuk membaca pin, kamu memakai blok “baca pin 13”. Bentuknya berbeda dari blok lain: blok ini bukan perintah yang disusun bertumpuk, melainkan blok nilai bersudut bulat yang dipasang ke slot di dalam blok lain. Padanannya di C++ adalah digitalRead(13), yang mengembalikan HIGH atau LOW. Karena di Arduino HIGH sama dengan 1 dan LOW sama dengan 0, kamu juga bisa menyimpan hasilnya di variabel seperti angka. Singkatnya, blok perintah melakukan sesuatu, blok nilai memberi hasil, dan slot kondisi blok jika hanya bisa diisi dengan hasil seperti itu.
| Blok | Padanan C++ | Fungsinya |
|---|---|---|
| atur pin 13 sebagai INPUT | pinMode(13, INPUT); | Membuat pin masuk mode mendengarkan (sekali, di setup) |
| atur pin 7 sebagai OUTPUT | pinMode(7, OUTPUT); | Membuat pin bisa mengeluarkan tegangan |
| baca pin 13 | digitalRead(13) | Mengembalikan HIGH (1) atau LOW (0) |
| tulis HIGH ke pin 7 | digitalWrite(7, HIGH); | Memberi 5 V ke pin, LED menyala |
| baca analog A0 | analogRead(A0) | Mengembalikan angka dari 0 sampai 1023 |
| jika … lakukan … jika tidak | if (…) { … } else { … } | Menjalankan salah satu dari dua jalur tergantung kondisinya |
Rangkaian: tombol di 13, LED di 7, resistor pull-down wajib
Di proyek Kendali LED dengan Tombol Tekan (Tekan), tombol terhubung ke D13 dan LED ke D7. Satu kaki tombol ke 5V dan kaki lainnya ke D13, lalu sebuah resistor pull-down 10 kΩ dipasang di antara D13 dan GND. Ketika tombol dilepas, resistor menarik pin ke GND sehingga terbaca LOW. Ketika kamu menekannya, 5V langsung sampai ke pin dan terbaca HIGH. Karena resistornya besar, hanya sekitar setengah miliampere yang mengalir dari 5V ke GND selama tombol ditekan. Kaki panjang LED terhubung ke D7 lewat resistor 220 Ω dan kaki pendeknya ke GND.
| Komponen | Terhubung ke | Pin Arduino Uno |
|---|---|---|
| Tombol, kaki 1 | Langsung | 5V |
| Tombol, kaki 2 (diagonal) | Langsung | D13 |
| Resistor 10 kΩ (pull-down) | Di antara D13 dan GND | D13 – GND |
| Kaki panjang LED (anoda) | Lewat resistor 220 Ω | D7 |
| Kaki pendek LED (katoda) | Langsung | GND |
Blok jika dan if/else: LED menyala selama tombol ditekan
Versi blok proyek ini punya dua bagian. Di “setup (jalan sekali)”, pin 13 diatur sebagai INPUT dan pin 7 sebagai OUTPUT. Di “ulangi selamanya” hanya ada satu blok besar: jika … lakukan … jika tidak. Slot kondisinya yang berbentuk segi enam berisi perbandingan “baca pin 13 = HIGH”. Kalau kondisinya benar, blok “tulis HIGH ke pin 7” di cabang “lakukan” dijalankan; kalau salah, blok “tulis LOW ke pin 7” di cabang “jika tidak” yang dijalankan.

1void setup() {
2 pinMode(13, INPUT); // Buton girişi (harici pull-down) / Button input (external pull-down)
3 pinMode(7, OUTPUT); // LED çıkışı / LED output
4}
5
6void loop() {
7 if (digitalRead(13) == HIGH) { // Buton basılı mı? / Is the button pressed?
8 digitalWrite(7, HIGH); // Basılı: LED yanar / Pressed: LED on
9 } else {
10 digitalWrite(7, LOW); // Bırakıldı: LED söner / Released: LED off
11 }
12}
13Letakkan kode di samping blok dan pasangannya langsung terlihat. Kata if sesuai dengan “jika”, kondisi digitalRead(13) == HIGH di dalam tanda kurung sesuai dengan slot kondisi, pasangan kurung kurawal pertama sesuai dengan cabang “lakukan”, dan else beserta kurung kurawalnya sesuai dengan cabang “jika tidak”. Setiap blok yang kamu taruh di sebuah cabang menjadi satu baris di dalam kurung kurawal yang sesuai di kode. Karena loop() berjalan puluhan ribu kali per detik, board membaca tombol berulang-ulang; begitu kamu mengangkat jari, kondisinya salah pada putaran berikutnya dan LED mati. Itulah sebabnya proyek ini diberi nama “Tekan” (Push): LED hanya menyala selama kamu menahan tombol. Cabang “jika tidak” bersifat opsional; blok jika yang hanya punya cabang “lakukan” menjadi if tanpa else. Tapi kalau cabang “jika tidak” dihapus di sini, LED tidak akan pernah mati lagi setelah menyala, karena tidak ada baris yang mematikannya. Memikirkan kedua cabang untuk setiap kondisi adalah kebiasaan yang baik.
Blok perbandingan: =, ≠, < dan >
| Simbol di blok | C++ | Arti | Contoh dari proyek |
|---|---|---|---|
| = | == | sama dengan | digitalRead(13) == HIGH (Kendali LED dengan Tombol Tekan) |
| ≠ | != | tidak sama dengan | button != lastButton (Nyala/Mati LED dengan Tombol) |
| < | < | kurang dari | value < 50 (Lampu Tidur dengan LDR) |
| > | > | lebih dari | distance > minDistance (Pengukuran Jarak HC-SR04) |
Nyala/mati dengan tombol: if bersarang dan variabel status
Di proyek Tekan, LED hanya menyala selama kamu menahan tombol. Kalau kamu ingin tombol bekerja seperti sakelar lampu sungguhan, “tekan sekali untuk menyala, tekan lagi untuk mati”, program harus mengingat dua hal: apakah LED sedang menyala sekarang, dan apa yang dibaca tombol pada putaran sebelumnya. Proyek Nyala/Mati LED dengan Tombol (On/Off) mendeklarasikan dua bilangan bulat untuk ini di bagian “variabel global (paling atas)”: ledState (0 = mati, 1 = menyala) dan lastButton (pembacaan sebelumnya). Rangkaiannya sama seperti sebelumnya: tombol di D13 dengan pull-down eksternal, LED di D7.

1int ledState = 0; // LED durumu: 0 = sönük, 1 = yanık / LED state: 0 = off, 1 = on
2int lastButton = 0; // Butonun önceki okuması / Previous button reading
3
4void setup() {
5 pinMode(13, INPUT); // Buton girişi (harici pull-down) / Button input (external pull-down)
6 pinMode(7, OUTPUT); // LED çıkışı / LED output
7}
8
9void loop() {
10 int button = digitalRead(13); // Butonu oku / Read the button
11 if (button != lastButton) { // Buton durumu değişti / Button state changed
12 if (button == 1) { // Yalnız basış anında (LOW -> HIGH) / Only at the press (LOW -> HIGH)
13 ledState = !ledState; // Durumu ters çevir / Flip the state
14 digitalWrite(7, ledState);
15 }
16 delay(50); // Sıçramayı atlamak için kısa bekleme / Short wait to skip the bounce
17 lastButton = button; // Bu okumayı sakla / Store this reading
18 }
19}
20| Blok | Baris C++ | Fungsinya |
|---|---|---|
| deklarasikan bilangan bulat (int) ledState = 0 | int ledState = 0; | Menyimpan status LED |
| deklarasikan bilangan bulat (int) lastButton = 0 | int lastButton = 0; | Menyimpan pembacaan tombol sebelumnya |
| atur button ke baca pin 13 | int button = digitalRead(13); | Membaca status tombol sekarang |
| jika button ≠ lastButton | if (button != lastButton) { | Masuk kalau status tombol berubah |
| jika button = 1 | if (button == 1) { | Masuk kalau perubahannya adalah tekanan (0 ke 1) |
| atur ledState ke bukan ledState | ledState = !ledState; | Mengubah 0 jadi 1 dan 1 jadi 0 |
| tulis ledState ke pin 7 | digitalWrite(7, ledState); | Mengatur LED ke status baru |
| tunggu 50 ms | delay(50); | Melewati pantulan kontak |
| atur lastButton ke button | lastButton = button; | Menyimpan pembacaan ini untuk putaran berikutnya |
Inti program ini adalah sepasang blok jika bersarang. Kondisi luar button ≠ lastButton hanya benar pada putaran ketika status tombol berubah; selama ribuan putaran ketika kamu menahan tombol atau tidak menyentuhnya, tidak terjadi apa-apa. Perubahan bisa terjadi dua arah: tekanan (0 ke 1) atau lepasan (1 ke 0). Kondisi dalam button = 1 hanya memilih tekanan. Jadi LED berubah sekali setiap kali tombol ditekan dan sama sekali tidak berubah ketika tombol dilepas. Di kode, if bersarang terlihat sebagai kurung kurawal di dalam kurung kurawal. Di blok, blok jika dalam duduk di cabang “lakukan” milik blok jika luar, jadi kamu bisa melihat sekilas baris mana yang bergantung pada kondisi mana.
Blok bukan ledState ditulis !ledState di C++. Tanda seru mengambil kebalikan logikanya: kebalikan 0 adalah 1, dan kebalikan angka apa pun yang bukan nol adalah 0. Mengisi ledState dengan kebalikannya sendiri membalik status di setiap tekanan. Blok berikutnya, “tulis ledState ke pin 7”, adalah baris digitalWrite(7, ledState); karena HIGH sama dengan 1 dan LOW sama dengan 0, nilai variabel bisa langsung ditulis ke pin. Terakhir, lastButton diisi pembacaan putaran ini supaya perbandingan di putaran berikutnya benar. Kalau penugasan ini terlupa, lastButton tetap 0; selama kamu menahan tombol, kondisi luar benar di setiap putaran dan LED berkedip cepat.
Kondisi analog: lampu tidur LDR
Kondisi tidak hanya soal HIGH dan LOW. Di proyek Lampu Tidur dengan LDR, blok “atur value ke baca analog A0” mengubah tegangan di A0, tempat LDR terhubung, menjadi angka antara 0 dan 1023; di C++ itu adalah baris value = analogRead(A0);. Lalu blok jika memeriksa value < 50. Kalau nilainya di bawah 50, keadaan dianggap gelap dan LED di D13 menyala; kalau tidak, LED mati. Strukturnya sama dengan proyek Tekan; hanya perbandingan di slot kondisinya yang berbeda.

1int value; // Işık okuması (0-1023) / Light reading (0-1023)
2
3void setup() {
4 pinMode(13, OUTPUT); // LED çıkışı / LED output
5}
6
7void loop() {
8 value = analogRead(A0); // Işık seviyesini oku / Read the light level
9
10 // Eşik 50: altı karanlık sayılır, hassasiyeti bu sayıyla ayarla
11 // Threshold 50: anything below counts as dark. Tune the sensitivity with this number
12 if (value < 50) {
13 digitalWrite(13, HIGH); // Karanlık: LED yanar / Dark: LED on
14 } else {
15 digitalWrite(13, LOW); // Aydınlık: LED söner / Bright: LED off
16 }
17}
18Tergantung LDR dan resistor di rangkaianmu, ambang 50 bisa terlalu rendah atau terlalu tinggi untuk ruanganmu. Untuk menemukan angka yang tepat, pakai dulu proyek Mengukur Intensitas Cahaya dengan LDR untuk melihat nilai terang dan gelap di Serial Monitor, lalu taruh ambangnya di antara keduanya. Kalau nilainya naik-turun tepat di sekitar ambang, LED bisa berkedip-kedip; memakai dua ambang terpisah untuk menyalakan dan mematikan adalah solusi yang rapi. Cara kerja LDR bisa kamu temukan di tulisan sensor cahaya LDR.
Menggabungkan kondisi: blok “dan” serta &&
Kadang satu kondisi tidak cukup. Di proyek Pengukuran Jarak HC-SR04 (Tampilan Serial), jarak yang diukur hanya dicetak ke Serial Monitor kalau nilainya di antara 3 cm dan 100 cm. Di blok, dua perbandingan digabungkan berdampingan dengan blok dan: “distance > minDistance dan distance < maxDistance”. Di C++, baris itu menjadi if (distance > minDistance && distance < maxDistance). Operator && membuat hasilnya benar hanya kalau kedua sisi benar; kalau satu saja salah, kondisinya salah. Dengan begitu, nilai tak bermakna di luar jangkauan sensor tidak pernah sampai ke layar. Di C++, “atau” ditulis ||, dan satu kondisi yang benar sudah cukup. Kamu bisa mencoba tabel kebenaran AND, OR, dan NOT di alat gerbang logika.
Kondisi yang sama di ESP32: pull-up internal dan logika terbalik
Proyek Kendali LED dengan Tombol Tekan ESP32 (Tekan) memakai blok jika yang sama di ESP32, dengan dua perbedaan. LED ada di GPIO 5, tombol di GPIO 4, dan pin tombol memakai opsi INPUT_PULLUP di blok “atur pin … sebagai …”. Di C++ itu adalah pinMode(BUTTON_PIN, INPUT_PULLUP);: resistor di dalam chip menarik pin ke HIGH, jadi tidak perlu resistor eksternal. Kali ini tombol terhubung ke GND, sehingga pin terbaca LOW ketika ditekan, dan kondisinya menjadi “baca pin BUTTON_PIN = LOW”. Proyek Kendali LED dengan Tombol Tekan ESP32 (Toggle) menangani nyala/mati dengan blok “milidetik sejak mulai”, yaitu millis(), alih-alih tunggu 50 ms, dan sekali lagi menggabungkan dua kondisi dengan blok “dan”. Pin ESP32 bekerja pada 3,3 V; jangan hubungkan tombol ke 5 V.
Kesalahan umum dan cara memperbaikinya
| Kesalahan | Gejala | Solusi |
|---|---|---|
| Tidak ada resistor pull-down | LED berkedip-kedip sendiri dan menyala ketika tanganmu mendekat | Pasang 10 kΩ di antara D13 dan GND, atau pakai INPUT_PULLUP dan balik logikanya |
| Satu tanda sama dengan di kondisi: if (button = 1) | LED selalu menyala dan tidak peduli tombol | Pakai == untuk perbandingan |
| Titik koma di akhir baris if | Kode di dalam kurung kurawal berjalan di setiap putaran apa pun kondisinya | Hapus ; setelah if (…) |
| Memakai kaki tombol di sisi yang sama | Pin selalu terbaca HIGH atau selalu LOW | Pakai kaki yang diagonal |
| lastButton tidak diperbarui atau tidak ada waktu tunggu di program nyala/mati | LED berkedip selama tombol ditahan atau berakhir acak | Tambahkan lastButton = button dan tunggu 50 ms |
| Menganggap HIGH sebagai ditekan dengan INPUT_PULLUP | LED bekerja terbalik dan menyala ketika tombol dilepas | Dengan pull-up internal, LOW berarti ditekan |
| Ambang LDR tidak cocok dengan ruangan | LED tidak pernah menyala atau menyala terus | Pantau nilainya di Serial Monitor dan pilih ambang baru |
Membuka blok dan kode berdampingan di aplikasi
Setiap proyek di tulisan ini termasuk proyek blok gratis di aplikasi BlueGrays. Nyalakan sakelar Tampilkan sebagai blok di bagian kode sebuah proyek, maka kodenya diganti dengan program yang sama dalam bentuk blok; ketuk gambarnya untuk membukanya layar penuh. Tab Pahami blok menjelaskan program langkah demi langkah: setiap langkah hanya menampilkan blok langkah itu beserta fungsinya, jadi kamu bisa mengikuti blok jika bersarang satu per satu. Contoh if/else dan digitalRead di Panduan kode juga ditampilkan sebagai blok. Blok tidak di-upload langsung ke board, dan untuk sekarang kamu belum bisa membuat program sendiri dengan menyusun blok; kamu selalu menyalin kode C++ asli proyeknya ke Arduino IDE lalu meng-upload-nya. Kalau kamu ingin mengulang apa yang sudah dipelajari, Soal harian memberimu 5 soal setiap hari dengan level dari A1 sampai C2.
Setelah memahami kondisi, langkah berikutnya adalah menangani pengulangan dan penghitung: di bagian perulangan dan variabel kamu akan melihat hubungan “ulangi selamanya” dengan loop() dan hubungan blok hitung dengan perulangan for. Sambil menunggu, kamu bisa melihat skema rangkaian dan kode proyek tombol dan LED, lampu tidur LDR, dan tombol ESP32 di aplikasi BlueGrays, beralih ke tampilan blok dengan Tampilkan sebagai blok, dan ke penjelasan langkah demi langkah dengan Pahami blok.
Pertanyaan umum
Apa fungsi blok jika di coding blok?
Blok jika membuat program bisa mengambil keputusan: kalau kondisinya benar, blok di cabang “lakukan” dijalankan; kalau salah, blok di cabang “jika tidak” yang dijalankan. Di proyek Arduino, blok ini biasanya dipakai untuk memeriksa apakah tombol ditekan atau apakah nilai sensor sudah melewati ambang. Padanannya di C++ adalah pernyataan if/else.
Apa beda if dan else di Arduino?
if menjalankan kode di dalam kurung kurawalnya ketika kondisi di dalam tanda kurung benar. else bersifat opsional dan berisi kode yang hanya berjalan ketika kondisinya salah. Tanpa else, tidak terjadi apa-apa ketika kondisinya salah dan program lanjut ke baris berikutnya.
Apa beda = dan == di Arduino?
Satu tanda sama dengan (=) mengisi nilai ke variabel, sedangkan dua tanda sama dengan (==) membandingkan dua nilai. Menulis if (x = 1) mengisi x dengan 1 dan membuat kondisinya selalu benar; bentuk yang benar adalah if (x == 1). Di blok, tanda “=” di blok perbandingan diterjemahkan menjadi == di kode.
Kenapa LED Arduino-ku menyala padahal tombol tidak ditekan?
Kemungkinan besar pin tombolnya mengambang (floating), artinya tidak ada resistor pull-down atau pull-up. Pin lalu membaca derau di sekitarnya dan terlihat HIGH atau LOW secara acak. Pasang resistor 10 kΩ di antara pin dan GND, atau pakai pinMode(pin, INPUT_PULLUP) dan hubungkan tombol ke GND.
Bagaimana cara menyalakan dan mematikan LED dengan satu tombol di Arduino?
Simpan status LED di satu variabel (ledState) dan pembacaan tombol sebelumnya di variabel lain (lastButton). Ketika status tombol berubah dan status barunya adalah ditekan, balik statusnya dengan ledState = !ledState lalu tulis ke LED dengan digitalWrite. Tambahkan waktu tunggu singkat, misalnya 50 ms, untuk melewati pantulan kontak; proyek Nyala/Mati LED dengan Tombol (On/Off) melakukan persis hal ini.
Bisakah aku meng-upload blok BlueGrays ke Arduino-ku?
Tidak, blok tidak di-upload langsung ke board. Blok sesuai satu per satu dengan kode asli proyeknya dan ada untuk membantumu memahami program. Kamu selalu menyalin kode C++ proyeknya ke Arduino IDE lalu meng-upload-nya ke board.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
Kendali LED dengan Tombol Tekan (Tekan)
Persis seperti bel pintu: lampu tetap menyala selama kamu menekan, dan mati ketika kamu melepasnya. Arduino terus mendengarkan tombol; selama ditekan LED menyala, dan begitu jarimu terangkat LED mati.

Nyala/Mati LED dengan Tombol (On/Off)
Tekan tombol sekali dan lampu menyala, tekan lagi dan lampu mati, persis seperti sakelar lampu di kamarmu. Arduino menyadari setiap tekanan dan membalik LED ke keadaan sebaliknya, sambil menunggu sebe

Lampu Tidur dengan LDR
Lampu tidur kecil yang menyala sendiri ketika gelap dan mati ketika pagi tiba. Sensor cahaya mengukur seberapa terang ruangan, dan Arduino menyalakan LED ketika cukup gelap lalu mematikannya lagi keti

Pengukuran Jarak HC-SR04 (Tampilan Serial)
Sensor HC-SR04 bekerja persis seperti kelelawar yang mencari jalan dalam gelap: ia mengirim suara yang tidak bisa kamu dengar, mendengarkan pantulannya, dan mengukur seberapa jauh benda di depannya. A

Kendali LED dengan Tombol Tekan ESP32 (Tekan)
LED menyala ketika tombol ditekan dan mati ketika dilepas. Menunjukkan cara memakai pin input digital ESP32 dan resistor pull-up internalnya. Mode INPUT_PULLUP membuat resistor eksternal tidak diperlukan.

Kendali LED dengan Tombol Tekan ESP32 (Toggle)
Setiap kali tombol ditekan, keadaan LED berubah: jika menyala jadi mati, jika mati jadi menyala. Pola toggle klasik. Dengan debounce, kita membersihkan derau mekanis tombol tekan agar satu tekanan menghasilkan satu kali toggle.

Mengukur Intensitas Cahaya dengan LDR
Ingin melihat seberapa terang kamarmu dalam bentuk angka? LDR, komponen kecil yang bereaksi terhadap cahaya, mengukur cahaya di sekitarnya, dan Arduino menulis nilainya ke layar komputermu setiap sete

LED Berkedip
"Halo" pertama di dunia elektronika: menyalakan dan mematikan satu LED. Arduino menyalakan dan mematikan LED dengan jeda singkat, sehingga cahayanya berkedip cepat. Kamu melihat dengan cara paling sed
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

