Saat belajar Arduino, banyak pemula menggunakan fungsi delay() untuk membuat LED berkedip. Cara ini memang mudah dipahami, tetapi memiliki kekurangan besar: selama proses delay berlangsung, Arduino tidak dapat mengerjakan tugas lain. Akibatnya, beberapa perintah atau input bisa terlewat, misalnya saat tombol ditekan terlalu cepat. Pada artikel ini, kita akan belajar cara membuat LED berkedip tanpa delay menggunakan fungsi millis(). Metode ini memungkinkan Arduino menjalankan beberapa tugas secara bersamaan, seperti menyalakan LED sambil membaca tombol, tanpa saling mengganggu.
Perangkat Keras yang Dibutuhkan
Siapkan beberapa komponen berikut:
- Arduino UNO
- DIYables STEM V3 (kompatibel dengan Arduino UNO R3)
- Kabel USB (sesuai jenis port PC/laptop)
- Breadboard
- Kabel jumper
- LED
- Resistor 220 Ohm
- Push button / tombol
- LED module (opsional)
Kenapa delay() Kurang Efektif?
Fungsi delay() membuat Arduino berhenti sementara sesuai waktu yang ditentukan.
Contoh:
delay(1000);
Artinya Arduino akan “diam” selama 1 detik.
Masalahnya:
- Arduino tidak bisa membaca sensor
- Tidak bisa mendeteksi tombol
- Tidak bisa menjalankan tugas lain
Jadi, jika tombol ditekan saat proses delay berlangsung, Arduino bisa saja melewatkan input tersebut.
Cara Kerja millis()
Fungsi millis() digunakan untuk menghitung waktu sejak Arduino mulai menyala.
Berbeda dengan delay(), fungsi ini:
- Tidak menghentikan program
- Membiarkan Arduino tetap menjalankan tugas lain
- Cocok untuk multitasking sederhana
Karena itulah metode ini sering disebut sebagai teknik non-blocking.
Wiring Diagram
Contoh 1: LED Berkedip Menggunakan delay()
const int LED_PIN = 3;
const int BUTTON_PIN = 7;
const long BLINK_INTERVAL = 1000;
int ledState = LOW;
int previousButtonState = LOW;
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
}
void loop() {
ledState = (ledState == LOW) ? HIGH : LOW;
digitalWrite(LED_PIN, ledState);
delay(BLINK_INTERVAL);
int currentButtonState = digitalRead(BUTTON_PIN);
if(currentButtonState != previousButtonState) {
Serial.println(currentButtonState);
previousButtonState = currentButtonState;
}
}
Cara Menjalankan
1. Hubungkan Arduino ke komputer
2. Buka Arduino IDE
3. Upload kode ke Arduino
4. Buka Serial Monitor
5. Tekan tombol beberapa kali
Hasil yang Terjadi
- LED berkedip setiap 1 detik
- Namun beberapa penekanan tombol tidak terdeteksi
Hal ini terjadi karena Arduino sedang “sibuk menunggu” saat menjalankan delay.
Contoh 2: LED Berkedip Tanpa delay() Menggunakan millis()
Sekarang kita akan menggunakan metode yang lebih baik.
Kode Program
const int LED_PIN = 3;
const int BUTTON_PIN = 7;
const long BLINK_INTERVAL = 1000;
int ledState = LOW;
int previousButtonState = LOW;
unsigned long previousMillis = 0;
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= BLINK_INTERVAL) {
ledState = (ledState == LOW) ? HIGH : LOW;
digitalWrite(LED_PIN, ledState);
previousMillis = currentMillis;
}
int currentButtonState = digitalRead(BUTTON_PIN);
if(currentButtonState != previousButtonState) {
Serial.println(currentButtonState);
previousButtonState = currentButtonState;
}
}
Apa Perbedaannya?
Pada kode ini:
- Arduino tetap bisa membaca tombol
- LED tetap berkedip normal
- Tidak ada input tombol yang terlewat
Karena program tidak berhenti seperti saat menggunakan delay().
Penjelasan Cara Kerja millis()
Bagian penting dari kode:
unsigned long currentMillis = millis();
Kode di atas mengambil waktu saat ini sejak Arduino menyala.
Lalu:
if (currentMillis - previousMillis >= BLINK_INTERVAL)
Arduino akan memeriksa apakah waktu interval sudah tercapai atau belum.
Jika sudah:
- LED diubah ON/OFF
- Waktu sebelumnya diperbarui
Dengan cara ini Arduino tetap bisa menjalankan tugas lain secara bersamaan.
Keuntungan Menggunakan millis()
Menggunakan millis() memiliki banyak keuntungan:
- Program menjadi lebih responsif
- Tombol tidak mudah terlewat
- Bisa menjalankan banyak tugas sekaligus
- Cocok untuk proyek yang lebih kompleks
Metode ini sangat sering digunakan dalam project Arduino profesional.
Contoh 3: Menjalankan Banyak Tugas Sekaligus
Berikut contoh Arduino yang:
- Mengedipkan 2 LED dengan kecepatan berbeda
- Tetap membaca tombol secara bersamaan
Kode Program
const int LED_PIN_1 = 3;
const int LED_PIN_2 = LED_BUILTIN;
const int BUTTON_PIN = 7;
const long BLINK_INTERVAL_1 = 1000;
const long BLINK_INTERVAL_2 = 500;
int ledState_1 = LOW;
int ledState_2 = LOW;
int previousButtonState = LOW;
unsigned long previousMillis_1 = 0;
unsigned long previousMillis_2 = 0;
void setup() {
Serial.begin(9600);
pinMode(LED_PIN_1, OUTPUT);
pinMode(LED_PIN_2, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis_1 >= BLINK_INTERVAL_1) {
ledState_1 = (ledState_1 == LOW) ? HIGH : LOW;
digitalWrite(LED_PIN_1, ledState_1);
previousMillis_1 = currentMillis;
}
if (currentMillis - previousMillis_2 >= BLINK_INTERVAL_2) {
ledState_2 = (ledState_2 == LOW) ? HIGH : LOW;
digitalWrite(LED_PIN_2, ledState_2);
previousMillis_2 = currentMillis;
}
int currentButtonState = digitalRead(BUTTON_PIN);
if(currentButtonState != previousButtonState) {
Serial.println(currentButtonState);
previousButtonState = currentButtonState;
}
}
Hasil Program
Pada program ini:
- LED pertama berkedip setiap 1 detik
- LED kedua berkedip setiap 0,5 detik
- Tombol tetap bisa dibaca kapan saja
Semua tugas berjalan bersamaan tanpa saling mengganggu.
Tips untuk Pemula
Agar lebih mudah memahami teknik ini:
- Pahami dulu perbedaan delay() dan millis()
- Jangan langsung menghafal kode
- Fokus memahami alur waktunya
- Coba ubah interval LED untuk melihat perbedaannya
Kapan Harus Menggunakan millis()?
Gunakan metode ini jika proyek Anda:
- Membaca banyak sensor
- Mengontrol beberapa LED
- Menggunakan tombol
- Membutuhkan respon cepat
- Menjalankan beberapa tugas sekaligus
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino



0 on: "Arduino LED Blink Tanpa Delay - Cara Menjalankan Banyak Tugas Sekaligus"