Percabangan Multi-Kondisi

Mempelajari penggunaan switch-case dan state machine dengan enum untuk mengatur percabangan kondisi yang kompleks dan rapi.

90 Menit
Modul 4: Logika Pemrograman Menengah
Pertemuan 9

TPTujuan Pembelajaran

  1. Peserta didik dapat menggunakan switch-case untuk percabangan multi-kondisi yang bersih
  2. Peserta didik dapat membandingkan if-else-if vs switch-case dan memilih yang tepat
  3. Peserta didik dapat membangun state machine dengan multiple state menggunakan enum
  4. Peserta didik dapat mengimplementasikan menu interaktif via Serial Monitor

Batasan If-Else-If

Kita sering menggunakan if-else untuk membuat keputusan. Jika kita punya dua atau tiga pilihan, if-else sangat cocok. Tapi bayangkan jika kita harus membuat menu dengan 10 pilihan?

Bayangkan kalian sedang di restoran padang. Jika kalian menggunakan if-else, pelayan restoran akan bertanya satu per satu: "Apakah mau rendang? (Tidak) Apakah mau ayam pop? (Tidak) Apakah mau gulai tunjang? (Tidak)..." Sangat lama dan merepotkan bukan?

Mengenal Switch-Case

Solusi dari if-else yang terlalu panjang adalah switch-case. Struktur ini bekerja seperti kalian menunjuk langsung menu di restoran padang, tanpa perlu ditanya satu per satu.

State Machine dengan Enum

Dalam robotika, sistem kita sering berada dalam satu "keadaan" (State) pada satu waktu. Misalnya: "State Tidur", "State Berjalan", "State Menghindar". Untuk memodelkan ini, kita menggunakan gabungan enum dan switch-case.

Enum (Enumeration) adalah cara kita membuat tipe data sendiri yang isinya adalah daftar kata-kata. Ini jauh lebih mudah dibaca daripada menggunakan angka 0, 1, 2.

enum_contoh.ino
cpp
enum ModeLampu {
  MATI,
  KEDIP_CEPAT,
  KEDIP_LAMBAT
};

ModeLampu modeSekarang = KEDIP_CEPAT; // Inisialisasi awal

Menu via Serial Monitor

Kita dapat menggunakan switch-case untuk membuat menu interaktif melalui Serial Monitor. User dapat mengetikkan karakter tertentu (misal: '1' untuk opsi A, '2' untuk opsi B) untuk memberi perintah ke Arduino.

Proyek: Smart Mode System

Mari kita gabungkan semuanya! Kita akan membuat sistem dengan 4 mode yang bisa dikendalikan melalui Serial Monitor. Sistem ini menggunakan gabungan Enum, Switch-Case, dan Serial Monitor.

smart_system.ino
cpp
// Mode sistem berbasis enum
enum ModeSistem {
  MODE_STANDBY,
  MODE_MONITORING,
  MODE_ALARM,
  MODE_HEMAT
};

ModeSistem modeAktif = MODE_STANDBY;
const int LED_STATUS = 13;
const int BUZZER = 8;

void jalankanMode(ModeSistem mode) {
  switch (mode) {
    case MODE_STANDBY:
      digitalWrite(LED_STATUS, LOW);
      noTone(BUZZER);
      Serial.println("[STANDBY] Sistem menunggu perintah.");
      break;
      
    case MODE_MONITORING:
      // LED berkedip pelan
      digitalWrite(LED_STATUS, HIGH); delay(100);
      digitalWrite(LED_STATUS, LOW);
      Serial.println("[MONITORING] Memantau sensor...");
      break;
      
    case MODE_ALARM:
      tone(BUZZER, 1500, 500);
      digitalWrite(LED_STATUS, HIGH);
      Serial.println("[ALARM] PERINGATAN AKTIF!");
      break;
      
    case MODE_HEMAT:
      digitalWrite(LED_STATUS, LOW);
      noTone(BUZZER);
      Serial.println("[HEMAT] Mode daya rendah aktif.");
      break;
  }
}

void setup() {
  pinMode(LED_STATUS, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  Serial.begin(9600);
  Serial.println("=== Smart System Controller ===");
  Serial.println("Ketik: 0=Standby, 1=Monitor, 2=Alarm, 3=Hemat");
}

void loop() {
  if (Serial.available()) {
    char input = Serial.read();
    switch (input) {
      case '0': modeAktif = MODE_STANDBY; break;
      case '1': modeAktif = MODE_MONITORING; break;
      case '2': modeAktif = MODE_ALARM; break;
      case '3': modeAktif = MODE_HEMAT; break;
    }
  }
  jalankanMode(modeAktif);
  delay(500);
}
Serial Monitor Output
=== Smart System Controller === Ketik: 0=Standby, 1=Monitor, 2=Alarm, 3=Hemat [STANDBY] Sistem menunggu perintah. [STANDBY] Sistem menunggu perintah. [MONITORING] Memantau sensor... [MONITORING] Memantau sensor... [ALARM] PERINGATAN AKTIF!

Troubleshooting

Masalah:Saat memasukkan angka, mode berubah tapi langsung kembali ke awal atau bertingkah aneh.

Solusi:Pastikan opsi "Line Ending" di pojok kanan bawah Serial Monitor diset ke "No line ending". Jika diset ke "Newline", karakter enter juga akan masuk sebagai input dan diproses oleh switch-case.


Masalah:Muncul pesan error saat menulis enum.

Solusi:Pastikan diakhiri dengan titik koma (;) setelah tanda kurung kurawal tutup `};` dari enum.

Kuis

Apa yang terjadi jika kamu lupa menulis perintah 'break;' di akhir sebuah case dalam switch-case?

Mudah

Kapan saat yang TEPAT menggunakan if-else-if dibandingkan switch-case?

Sedang

Latihan Praktik

Kalkulator Sederhana via Serial

Buatlah program kalkulator sederhana yang menerima input via Serial Monitor.

  • Gunakan enum Operasi { TAMBAH, KURANG, KALI }
  • Sediakan 2 variabel global int A = 10; int B = 5;
  • Jika dikirim huruf 't', Arduino melakukan TAMBAH (10+5=15)
  • Jika dikirim huruf 'k', Arduino melakukan KURANG (10-5=5)
  • Jika dikirim huruf 'x', Arduino melakukan KALI (10*5=50)
  • Gunakan struktur switch-case untuk menyeleksi input dan eksekusi!
Kesimpulan Pertemuan 9
  • switch-case lebih rapi dan efisien daripada if-else-if untuk multi-kondisi dengan nilai spesifik (angka bulat/karakter).
  • Keyword break sangat penting untuk menghentikan switch-case.
  • enum membantu kita membuat kumpulan kata-kata yang mudah dibaca sebagai ganti angka untuk State Machine.

RRefleksi Belajar

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

Kejutan & Penemuan

Apa yang paling mengejutkan atau menarik hari ini?

Kapan menurutmu kamu akan menggunakan struktur Enum di robotmu?

Masih Membingungkan

Apa yang masih membingungkan atau ingin kamu pahami lebih dalam?

Apakah konsep State Machine (mesin status) masih membingungkan bagimu?

Rencana Selanjutnya

Apa yang ingin kamu coba atau pelajari minggu depan?

Coba rancang (di atas kertas) state apa saja yang mungkin ada di robot line follower!

Refleksi tidak dinilai — ini adalah ruang jujurmu untuk berpikir.