Perbedaan Delay dan Millis pada Arduino dan Contoh Penggunaan

Dipublikasikan oleh Admin pada

Perbedaan delay dan millis pada Arduino

Pada Arduino, menunda atau menjeda eksekusi program bisa menggunakan 2 fungsi, yaitu delay() dan millis(). Kedua fungsi ini sama-sama berhubungan dengan waktu, tetapi mempunyai tujuan yang berbeda.

Perbedaan Fungsi Delay dan Millis pada Arduino

Delay

Fungsi delay() bertujuan untuk menunda eksekusi program dalam satuan millidetik. Fungsi delay() bersifat blocking, artinya apabila perintah delay() dituliskan sebuah program, maka perintah di bawahnya tidak akan dieksekusi sebelum waktu yang ditentukan dalam parameter telah tercapai. Contoh penggunaan fungsi delay() pada Arduino:

Millis

Fungsi millis() pada dasarnya bukan untuk melakukan jeda program, akan tetapi sebuah fungsi yang mengembalikan nilai waktu sejak chip Arduino menyala Рdalam satuan millidetik. Walaupun demikian, fungsi millis() ini adalah sebuah counter, oleh karena itu bisa digunakan untuk melakukan jeda program dengan menggunakan alur logika yang semestinya.

Mengganti Delay dengan Millis

Kalau melihat core Arduino di file wiring.c, fungsi delay() sebenarnya adalah sebuah loop while yang akan berulang selama waktu yang ditentukan pada parameter. Cara kerja delay() ini adalah mencatat waktu start, kemudian while berulang terus sambil memeriksa apakah selisih waktu sekarang sudah mencapai waktu yang ditentukan. Misalnya delay(1000), maka while akan memeriksa apakah selisih waktu sekarang sudah mencapai 1000 millidetik, bila ya maka loop while akan keluar dan mikrokontroler akan melakukan eksekusi perintah-perintah di bawahnya.

Menggunakan millis() sebagai pengganti delay() pada program blink 1 LED tidak akan terasa perbedaan nya. Tetapi kalau digunakan pada blink beberapa LED dengan jeda masing-masing berbeda atau untuk membuat scheduler, maka sudah seharusnya menggunakan millis().

Contoh Penggunaan millis Sederhana

Di bawah ini adalah sebuah contoh program blink menggunakan millis() sebagai pengganti delay().

Contoh Penggunaan millis sebagai Scheduler

Di bawah ini adalah contoh mengirimkan data via serial dalam interval tertentu. Berguna misalnya untuk mengirimkan hasil pembacaan suhu, potensiometer atau nilai apapun secara berkala tanpa menjeda eksekusi program di bawahnya. Jadi pembacaan tombol atau perintah lainnya tidak akan terhenti akibat adanya schedule pengiriman data via serial ini.

Contoh Menyalakan LED dengan Waktu Berbeda-beda

Di bawah ini adalah contoh menyalakan LED secara berurutan dengan waktu penyalaan yang berbeda-beda. LED1 akan menyala setelah 2 detik, LED2 akan menyala setelah 5 detik, LED3 akan menyala setelah 7.

Kesimpulan

Fungsi delay() digunakan untuk melakukan jeda program. Sifat dari fungsi delay() adalah blocking, artinya akan menghentikan eksekusi perintah di bawahnya sampai waktu yang sudah ditentukan pada parameter sudah tercapai.

Fungsi millis() adalah mengembalikan nilai counter dalam satuan millidetik sejak chip Arduino dinyalakan. Dengan menggunakan perintah if dan while, maka millis() bisa digunakan untuk melakukan jeda program yang sifatnya non-blocking, yaitu perintah di bawahnya akan tetap dijalankan – Asalkan logika if dan while nya benar.

Selamat mencoba dan mempraktekan.

 

Topik hangat:

Kategori: Android