Hallo, selamat datang kembali. Pada artikel ini, kita akan membahas tentang fungsi pada pemrograman arduino yang secara khusus digunakan untuk mengontrol waktu dan penjedaan pada program, fungsi itu adalah delay() dan delayMicroseconds(), millis() dan micros(), fungsi-fungsi ini sangat sering digunakan pada program, dan masing-masing memiliki kegunaan dan cara kerja yang berbeda-beda. mari kita bahas satu per satu :
delay()
Fungsi delay() digunakan untuk menjeda pembacaan baris program selama durasi yang kita tentukan pada parameternya dalam satuan milidetik, fungsi ini berguna untuk menghentikan program beberapa saat sebelum melanjutkan pembacaan baris program selanjutnya. berikut sintax nya:
delay(durasi)
- durasi : lama waktu jeda program dalam milidetik, tipe data yang digunakan adalah unsigned long
Fungsi delay() berguna dalam banyak kasus seperti debouncing tombol, blinking LED, menjeda saat perubahan arah putaran motor, dll. ketika fungsi delay() di eksekusi, fungsi ini akan menghentikan pembacaan sensor, operasi matematika dan manipulasi pin, sehingga menyebabkan bloking pada program, itu sebabnya fungsi delay() tidak cocok dengan algoritma yang multitasking (menjalankan beberapa instruksi dalam satu waktu).
delayMicroseconds()
Secara fungsi, delayMicroseconds() sama dengan fungsi delay(), yaitu menjeda pembacaan baris program, bedanya ada pada kepresisiannya, fungsi delay() satuan parameter adalah milidetik sedangkan delayMicroseconds() satuan parameter adalah mikrodetik (1 mikrodetik = 1/1.000.000 detik). berikut syntaxnya :
delayMicroseconds(durasi)
Batasan akurasi fungsi ini yaitu 3 – 16383 mikrodetik, jadi saat menggunakan fungsi delayMicroseconds(), usahakan parameternya ada pada rentang nilai tersebut, jika kita perlu nilai durasi yang lebih besar, sebaiknya gunakan fungsi delay().
millis()
Berfungsi untuk menjalankan waktu internal setiap milidetik secara intedepende, ketika fungsi millis() dibaca, arduino akan terus menghitung waktu meskipun arduino sedang mengeksekusi perintah lain. Fungsi millis() memberikan return value (nilai balik) berupa nilai waktu (dalam milidetik) sejak arduino mulai menjalankan program, kita bisa menyimpan nilai balik dari fungsi ini kedalam variabel dengan tipe data unsigned long, fungsi ini sangat berguna untuk melacak waktu tanpa menghentikan pembacaaan baris program (tidak menyebabkan blocking program) sehingga fungsi ini sering digunakan untuk membuat algoritma yang multitaksing dan membuat program yang lebih kompleks dan responsif. berikut syntaxnya :
unsigned long time = millis()
Parameter
- time : nama variabel untuk menyimpan nilai balik dari fungsi millis dengan tipe data unsigned long
Nilai balik dari fungsi millis() akan kembali ke 0 dalam waktu kurang lebih 50 hari
micros()
Secara fungsi sama dengan millis() yaitu memberikan return value (nilai balik) berupa nilai waktu sejak arduino mulai menjalankan program, bedanya adalah, nilai balik yang diberikan fungsi micros() satuannya adalah mikrodetik (micros() melakukan perhitungan waktu lebih presisi), kita bisa menyimpan nilai balik dari fungsi ini kedalam variabel dengan tipe data unsigned long. berikut sintaxnya :
unsigned long time = micros();
Parameter
- time : nama variabel untuk menyimpan nilai balik dari fungsi micros dengan tipe data unsigned long
Nilai balik dari fungsi micros() akan kembali ke 0 dalam waktu kurang 70 menit
Experiment
Sekarang kita coba membuat program yang bisa mendemonstrasikan kegunaan dari fungsi-fungsi diatas. bahan yang diperlukan hanya arduino UNO saja, coba ketik sketch dibawah :
/* delay, millis, micros --- purwarupa3d --- */
void setup() {
Serial.begin(9600);
}
void loop() {
unsigned long time_millis = millis();
unsigned long time_micros = micros ();
Serial.print ("time millis = ");
Serial.println(time_millis);
Serial.println("");
Serial.print ("time micros = ");
Serial.println(time_micros);
//delay(1000);
}
Biarkan dulu fungsi delay dalam keadaan tidak dibaca (tanda slash 2 kali “//” membuat compiler tidak akan membaca baris kode), saya menggunakan simulator wokwi pada experiment, jika ingin mencoba silahkan klik disini. upload program dan buka serial monitor. hasil yang muncul akan seperti ini
Dari serial monitor terlihat bahwa fungsi millis() dan micros() menghitung waktu yang berjalan sejak arduino menjalankan program, nilai balik dari fungsi micros secara angka lebih besar dari fungsi millis, itu karena fungsi micros menghitung waktu dalam satuan miktodetik.
Selanjutnya, hapus tanda slash 2x (“//”) pada baris program delay, kemudian upload ulang programnya, buka serial monitor dan perhatikan, di simulator saya hasilnya seperti ini
Terlihat bahwa serial monitor menampilkan pembacaan waktu setiap 1 detik, ini disebabkan fungsi delay menjeda pengulangan program, sehingga baris program Serial.print() hanya menampilkan nilai variabel time_micros dan time_millis setiap 1 detik. Sekian pengenalan tentang fungsi kontrol waktu, semoga bisa dipahami dan semoga bermanfaat.