Elektronika & Robotika Dasar

Pertemuan 7

Pemrograman Logika Kontrol (if-else, state machine sederhana)

Tujuan Pembelajaran

  • Mampu menyusun logika kontrol menggunakan struktur if-else bertingkat.
  • Memahami konsep dasar state machine (mesin status) sederhana.
  • Mampu menggabungkan pembacaan sensor dengan pengambilan keputusan otomatis.

Penjelasan Konsep

Dari sensor & aktuator terpisah menuju logika utuh

Setelah sensor dan aktuator masing-masing bekerja (pertemuan 4-6), pertemuan ini fokus menyusun logika pengambilan keputusan: kapan aktuator harus bereaksi berdasarkan nilai sensor?

If-else bertingkat

Untuk logika sederhana, if-else sudah cukup:

if (nilaiSensor > ambangBatas) {
  // aktifkan aktuator
} else {
  // matikan aktuator
}

Untuk kondisi lebih kompleks (lebih dari 2 kemungkinan), gunakan if-else if-else berurutan.

Konsep state machine sederhana

Ketika sistem punya beberapa mode/status berbeda (misalnya: SIAGA, AKTIF, ALARM), akan lebih rapi jika disusun sebagai state machine - variabel status yang menentukan perilaku sistem saat ini, dan berpindah status berdasarkan kondisi tertentu.

enum StatusSistem { SIAGA, AKTIF, ALARM };
StatusSistem status = SIAGA;

// di dalam loop():
switch (status) {
  case SIAGA: /* ... pindah ke AKTIF jika kondisi terpenuhi ... */ break;
  case AKTIF: /* ... */ break;
  case ALARM: /* ... */ break;
}

Pendekatan ini membuat program lebih mudah dibaca dan dikembangkan dibanding banyak variabel boolean terpisah.

Kesalahan umum

  • Kondisi if-else yang tumpang tindih atau bolong - misalnya lupa menangani kasus "sama dengan" ambang batas persis, atau dua kondisi if yang keduanya bisa benar sekaligus sehingga hasilnya ambigu.
  • Lupa else - jika hanya menulis if (kondisi) { aktifkan aktuator } tanpa else yang mematikannya, aktuator yang sudah menyala bisa tetap menyala terus meski kondisi sudah tidak terpenuhi lagi.
  • State machine yang tidak punya jalan keluar - status bisa "macet" selamanya di satu kondisi jika tidak ada logika yang memindahkannya ke status lain (mirip pintu yang hanya bisa dibuka tapi tidak pernah ditutup lagi).
  • Ambang batas tunggal yang menyebabkan berkedip-kedip (chattering) - sama seperti kasus relay di Semester 1, logika yang aktif/nonaktif di nilai persis sama bisa membuat aktuator "gemetar" kalau nilai sensor sedikit naik-turun di sekitar ambang batas; pertimbangkan histeresis (dua ambang batas berbeda untuk ON dan OFF).

Komponen yang Dibutuhkan

  • Rangkaian sensor + aktuator project yang sudah terpasang dari pertemuan sebelumnya

Diagram / Skema Pengkabelan

Tidak ada perubahan wiring baru - fokus pertemuan ini murni pada logika program berdasarkan rangkaian yang sudah ada.

Contoh Kode Program

// Contoh logika kontrol sederhana dengan if-else + konsep state machine ringan

const int PIN_SENSOR = A0;
const int PIN_AKTUATOR = 8;
const int AMBANG_BATAS = 500;

enum StatusSistem { SIAGA, AKTIF };
StatusSistem status = SIAGA;

void setup() {
  pinMode(PIN_AKTUATOR, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int nilaiSensor = analogRead(PIN_SENSOR);

  if (status == SIAGA && nilaiSensor > AMBANG_BATAS) {
    status = AKTIF;
    Serial.println("Status berubah: AKTIF");
  } else if (status == AKTIF && nilaiSensor <= AMBANG_BATAS) {
    status = SIAGA;
    Serial.println("Status berubah: SIAGA");
  }

  digitalWrite(PIN_AKTUATOR, status == AKTIF ? HIGH : LOW);
  delay(200);
}

Tugas / Latihan

  1. Rancang logika if-else lengkap untuk project-mu: kapan tepatnya aktuator harus bereaksi terhadap nilai sensor?
  2. Jika project-mu punya lebih dari 2 kondisi/mode, coba susun sebagai state machine sederhana seperti contoh di atas.
  3. Uji logika tersebut dan catat apakah ada kondisi "aneh"/tidak terduga yang perlu diperbaiki.
  4. (Tantangan) Tambahkan histeresis (dua ambang batas berbeda untuk masuk dan keluar dari suatu status) pada salah satu transisi state machine-mu, lalu bandingkan perilakunya dengan versi ambang batas tunggal.