Blog Archive

Arduino Indonesia. Gambar tema oleh Storman. Diberdayakan oleh Blogger.

Supported by Electronics 3 in 1

1. Jasa pencetakan PCB single layer dengan harga paling murah.

(Metode Pembuatan dengan Transfer Toner)
>PCB design sendiri (siap cetak) : Rp.150,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

(Metode Sablon Full Masking dan Silk Screen minimal pemesanan 100 Pcs)
>PCB design sendiri (siap cetak) : Rp.200,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

2. Jasa perancangan, perakitan, dan pembuatan trainer pembelajaran elektronika untuk SMK dan Mahasiswa.

3. Jasa perancangan, perakitan, dan pembuatan berbagai macam kontroller, sensor, aktuator, dan tranduser.
>Design Rangkaian / Sistem Elektronika
>Design Rangkaian / Sistem Instrumentasi
>Design Rangkaian / Sistem Kendali
>Kerjasama Riset (data atau peralatan)
>Kerjasama Produksi Produk-Produk KIT Elektronika
>Produksi Instrumentasi Elektronika

4. Jasa Pembuatan Proyek, Tugas Akhir, Tugas Laboratorium, PKM, Karya Ilmiah, SKRIPSI, dll

Like My Facebook

Popular Posts

Rabu, 06 Mei 2026

Arduino LED Blink Tanpa Delay - Cara Menjalankan Banyak Tugas Sekaligus

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.  

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