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
ifyang keduanya bisa benar sekaligus sehingga hasilnya ambigu. - Lupa
else- jika hanya menulisif (kondisi) { aktifkan aktuator }tanpaelseyang 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
- Rancang logika if-else lengkap untuk project-mu: kapan tepatnya aktuator harus bereaksi terhadap nilai sensor?
- Jika project-mu punya lebih dari 2 kondisi/mode, coba susun sebagai state machine sederhana seperti contoh di atas.
- Uji logika tersebut dan catat apakah ada kondisi "aneh"/tidak terduga yang perlu diperbaiki.
- (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.