FLOW. CONNECT. INNOVATE.
← KEMBALI KE ARTIKEL
HARDWARE

Belajar logika matematika logika digital

Header Image

Belajar logika matematika/digital (**AND, OR, NOT**) adalah fondasi yang sangat penting dalam dunia mikrokontroler dan IoT. Untuk mempermudah pemahaman, kita akan membuat simulasi menggunakan:

a. 2pcs Tombol (sebagai Input A & B)** dan 

b. 3pcs LED (sebagai Output indikator hasil logika)**.

---

### ? Skema Koneksi Hardware

Sebelum masuk ke kode, hubungkan komponen kamu ke Arduino seperti ini:

**Input (Tombol):**
*   **Tombol A:** Pin Leg 1 -> **Pin 2**, Pin Leg 2 -> **GND**
*   **Tombol B:** Pin Leg 1 -> **Pin 3**, Pin Leg 2 -> **GND**

**Output (LED):**
*   **LED AND:** Anoda (+) -> Resistor 220Ω -> **Pin 8**, Katoda (-) -> **GND**
*   **LED OR:** Anoda (+) -> Resistor 220Ω -> **Pin 9**, Katoda (-) -> **GND**
*   **LED NOT:** Anoda (+) -> Resistor 220Ω -> **Pin 10**, Katoda (-) -> **GND** *(Menampilkan kebalikan dari Tombol A)*

---

### ? Kode C++ Arduino

Berikut adalah kode yang bersih dan mudah dipahami. Kamu juga bisa melihat hasilnya di **Serial Monitor** (Baud rate: 9600).

```cpp
/*
  ==============================================
  ArduFlow - Belajar Logika Dasar (AND, OR, NOT)
  ==============================================
  Dibuat oleh: Ardu Assistant
*/

// Definisi Pin Input (Tombol)
const int PIN_BUTTON_A = 2;
const int PIN_BUTTON_B = 3;

// Definisi Pin Output (LED)
const int PIN_LED_AND = 8;
const int PIN_LED_OR  = 9;
const int PIN_LED_NOT = 10;

void setup() {
  // Inisialisasi Serial Monitor
  Serial.begin(9600);

  // Menggunakan INPUT_PULLUP agar tidak perlu resistor eksternal untuk tombol.
  // Saat tombol ditekan, logika bernilai LOW (0). Saat dilepas, HIGH (1).
  pinMode(PIN_BUTTON_A, INPUT_PULLUP);
  pinMode(PIN_BUTTON_B, INPUT_PULLUP);

  // Mengatur pin LED sebagai OUTPUT
  pinMode(PIN_LED_AND, OUTPUT);
  pinMode(PIN_LED_OR, OUTPUT);
  pinMode(PIN_LED_NOT, OUTPUT);

  Serial.println("--- Pembelajaran Logika Arduino Siap! ---");
}

void loop() {
  // Read status tombol.
  // KARENA menggunakan INPUT_PULLUP, kita gunakan '!' (NOT) agar:
  // Ditekan = true (1 / HIGH), Dilepas = false (0 / LOW)
  bool inputA = !digitalRead(PIN_BUTTON_A);
  bool inputB = !digitalRead(PIN_BUTTON_B);

  // --- 1. LOGIKA AND (&&) ---
  // Hasil TRUE (1) HANYA JIKA kedua input bernilai TRUE.
  bool hasilAND = inputA && inputB;

  // --- 2. LOGIKA OR (||) ---
  // Hasil TRUE (1) JIKA SALAH SATU atau kedua input bernilai TRUE.
  bool hasilOR = inputA || inputB;

  // --- 3. LOGIKA NOT (!) ---
  // Mengembalikan nilai kebalikan dari inputA.
  bool hasilNOT = !inputA;

  // Output ke LED (HIGH = Menyala, LOW = Mati)
  digitalWrite(PIN_LED_AND, hasilAND);
  digitalWrite(PIN_LED_OR, hasilOR);
  digitalWrite(PIN_LED_NOT, hasilNOT);

  // Tampilkan Status di Serial Monitor untuk Pembelajaran
  Serial.print("Input A: "); Serial.print(inputA);
  Serial.print(" | Input B: "); Serial.print(inputB);
  Serial.print(" || [AND]: "); Serial.print(hasilAND);
  Serial.print(" | [OR]: "); Serial.print(hasilOR);
  Serial.print(" | [NOT A]: "); Serial.println(hasilNOT);

  delay(200); // Tunda sebentar agar pembacaan Serial Monitor stabil
}
``

### ? Penjelasan Singkat Cara Kerjanya

1. **Logika AND (`&&`)**:
   * Simbol di C++: `&&`
   * **LED AND** hanya akan **NYALA** jika kamu menekan **Tombol A DAN Tombol B secara bersamaan**.
2. **Logika OR (`||`)**:
   * Simbol di C++: `||`
   * **LED OR** akan **NYALA** jika kamu menekan **Tombol A, ATAU Tombol B, ATAU keduanya**.
3. **Logika NOT (`!`)**:
   * Simbol di C++: `!`
   * **LED NOT** akan **NYALA saat Tombol A LEPAS/TIDAK DITEKAN**, dan akan **MATI saat Tombol A DITEKAN** (kebalikan dari kondisi Tombol A).

Cobalah rakit dan unggah kodenya, lalu amati perbedaan nyala LED saat kamu menekan tombol satu per satu atau bersamaan.