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.