Gerbang Logika Pemrograman

Mempelajari penggunaan operator logika AND (&&), OR (||), dan NOT (!) untuk membuat kondisi yang kompleks pada sistem multi-sensor.

90 Menit
Modul 4: Logika Pemrograman Menengah
Pertemuan 10

TPTujuan Pembelajaran

  1. Peserta didik dapat menggunakan operator logika && (AND), || (OR), dan ! (NOT) dengan benar
  2. Peserta didik dapat membangun kondisi kompleks menggunakan kombinasi operator logika
  3. Peserta didik dapat memahami truth table untuk AND, OR, NOT
  4. Peserta didik dapat mengimplementasikan logika kompleks pada sistem multi-sensor

Pengantar Gerbang Logika

Hingga saat ini, kita baru belajar mengecek satu kondisi pada satu waktu, misalnya if (suhu > 30). Namun bagaimana jika di dalam robot kita ingin sebuah aksi terjadi HANYA BILA ada beberapa syarat yang terpenuhi bersamaan?

Bayangkan brankas bank. Brankas itu baru mau terbuka JIKA manajer bank memasukkan PIN (syarat 1) DAN kasir menempelkan kartu (syarat 2). Inilah yang disebut dengan Gerbang Logika atau Logic Gates.

Operator AND, OR, NOT

Dalam bahasa pemrograman C++ (Arduino), kita menggunakan simbol-simbol khusus untuk gerbang logika:

  • AND (&&): Semua kondisi harus BENAR. Jika salah satu saja SALAH, maka hasilnya SALAH.
  • OR (||): Minimal satu kondisi harus BENAR. Hanya akan SALAH jika semuanya SALAH.
  • NOT (!): Pembalik keadaan. Jika BENAR menjadi SALAH, dan sebaliknya.

Tabel Kebenaran (Truth Table)

Tabel Kebenaran membantu kita melihat semua kemungkinan hasil dari operator logika. Di pemrograman, 1 berarti BENAR (true/HIGH) dan 0 berarti SALAH (false/LOW).

Membuat Kondisi Kompleks

Kita dapat menggabungkan banyak kondisi sekaligus.

if (suhu > 30 && kelembaban < 50 && !hujan) {
  nyalakanPenyiramTanaman();
}

Sistem Multi-Sensor

Sekarang, mari kita bangun sistem keamanan cerdas (Smart Security) yang menggabungkan pembacaan sensor Gerak (PIR), sensor Cahaya (LDR), dan tombol aktivasi.

security_system.ino
cpp
const int PIR_PIN    = 2;   // Sensor gerak
const int LDR_PIN    = A0;  // Sensor cahaya
const int TOMBOL_PIN = 7;   // Tombol arm/disarm
const int LED_ALARM  = 13;
const int LED_STATUS = 12;
const int BUZZER_PIN = 8;

bool sistemArmed = false;
const int AMBANG_GELAP = 400; // LDR threshold

void setup() {
  pinMode(PIR_PIN, INPUT);
  pinMode(TOMBOL_PIN, INPUT_PULLUP);
  pinMode(LED_ALARM, OUTPUT);
  pinMode(LED_STATUS, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  bool adaGerakan = digitalRead(PIR_PIN) == HIGH;
  bool gelap = analogRead(LDR_PIN) < AMBANG_GELAP;
  bool tombolDitekan = digitalRead(TOMBOL_PIN) == LOW;
  
  // Toggle arm dengan tombol
  if (tombolDitekan) {
    sistemArmed = !sistemArmed;
    Serial.println(sistemArmed ? "Sistem: ARMED" : "Sistem: DISARMED");
    delay(500); // Debounce sederhana
  }
  
  // Alarm berbunyi HANYA jika:
  // Sistem aktif (armed) AND ada gerakan AND kondisi gelap
  bool alarming = sistemArmed && adaGerakan && gelap;
  
  // Juga alarm jika sistem aktif AND ada gerakan (siang atau malam)
  // bool alarming = sistemArmed && adaGerakan; // Versi alternatif
  
  digitalWrite(LED_ALARM, alarming);
  digitalWrite(LED_STATUS, sistemArmed);
  
  if (alarming) {
    tone(BUZZER_PIN, 1200, 500);
    Serial.println("⚠ INTRUSI TERDETEKSI! (Gelap + Ada Gerakan)");
  } else {
    noTone(BUZZER_PIN);
  }
  
  delay(200);
}

Kuis

Sebuah bel rumah diprogram seperti ini: if (tombolDitekan || sensorGerakAktif). Kapan bel tersebut akan berbunyi?

Mudah

Jika var x = true, dan var y = false, maka apa hasil dari (!x && !y)?

Sedang

Latihan Praktik

Sistem Penyiram Cerdas

Kalian sedang membuat robot penyiram tanaman otomatis. Robot ini harus memutuskan apakah akan memompa air atau tidak.

Syarat pompa menyala:

  1. Sensor tanah (moisture) terbaca "kering" (bernilai kurang dari 300)
  2. Dan (AND) Sensor cahaya (LDR) terbaca "gelap" (menyiram saat sore/malam hari)
  3. Namun, pompa TIDAK BOLEH menyala jika tendon air dalam keadaan "kosong" (sensor tinggi air bernilai LOW).

Tugas: Buatlah pernyataan if(...) menggunakan operator AND (&&) dan NOT (!) berdasarkan kondisi di atas!

Kesimpulan Pertemuan 10
  • AND (&&): Mengharuskan SEMUA kondisi bernilai benar (ketat/strict).
  • OR (||): Membolehkan SALAH SATU kondisi saja bernilai benar (fleksibel).
  • NOT (!): Membalik nilai kebenaran.
  • Operator logika memungkinkan kita menggabungkan berbagai data dari banyak sensor sekaligus untuk membuat keputusan kompleks.

RRefleksi Belajar

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

Kejutan & Penemuan

Apa yang paling mengejutkan atau menarik hari ini?

Contoh nyata apa yang baru kamu sadari ternyata menggunakan gerbang logika (AND/OR) dalam kehidupan sehari-hari?

Masih Membingungkan

Apa yang masih membingungkan atau ingin kamu pahami lebih dalam?

Apakah membaca Truth Table membingungkan bagimu?

Rencana Selanjutnya

Apa yang ingin kamu coba atau pelajari minggu depan?

Buatlah truth table singkat (coret-coret di buku) untuk dua kondisi dalam robot karyamu sendiri!

Refleksi tidak dinilai — ini adalah ruang jujurmu untuk berpikir.