Membuat Arduino Seolah-olah Multitasking

Pada postingan kali ini saya akan menulis tentang cara membuat arduino seolah-olah bekerja secara Multitasking. Pasti sudah tahu kan apa itu multitasking? Secara sederhana multitasking adalah kemampuan untuk mengerjakan beberapa tugas / pekerjaan dalam satu waktu (secara bersamaan). Dalam hal ini kita akan membahas multitasking pada arduino, artinya kemampuan mikroprosesor yang digunakan arduino untuk menjalankan beberapa instruksi / perintah dalam waktu yang bersamaan. Mungkin yang akan dibahas disini bukanlah multitasking yang sesungguhnya, mengingat keterbatasan spesifikasi dari arduino itu sendiri, seperti keterbatasan ram, memori, kecepatan dan sebagainya. Disini kita anggap multitasking karena instruksi dijalankan hanya dalam sepersekian detik sehingga seolah-olah berjalan dalam waktu yang bersamaan.
Untuk melakukan nya kita harus menghilangkan penggunaan delay(). Mungkin pada saat awal-awal belajar arduino kita sering menggunakan delay, misalnya ketika membuat program led blinking. Sebenarnya tidak ada salahnya, namun ketika menggunakan katakanlah perintah delay(500), ini artinya memerintahkan prosesor untuk menunda semua instruksi 500 milidetik. Sehingga tidak akan merespon perintah lainnya, selama waktu tersebut. Hal ini mengakibatkan masalah ketika kita perlu menjalankan instruksi lainnya misalnya mengakses input dari push button, sensor. Nah untuk mengatsinya tentu kita harus menghilangkan penggunaan delay. Tapi kita memerlukan fungsi waktu penundaan tersebut bukan? Maka kita perlu menggunakan penjadwalan sehingga prosesor menjalankan suatu instruksi pada waktu yang terjadwal dan tidak memblok dari proses lainnya. Tentu saja kita memerlukan timer untuk melakukan hal ini. Tapi untuk pemula seperti saya mempelajari timer pada arduino tidaklah mudah. Untungnya pada arduino terdapat fungsi millis() dan micros() yang dapat digunakan untuk menghitung waktu.  Perbedaannya millis dalam satuan waktu milidetik sedangkan micros dalam micro detik. 
Jadi intinya kita akan memastikan prosesor untuk menjalankan suatu perintah ketika waktu nya telah tercapai. 
Sebagai contoh kita akan buat suatu percobaan berupa simulasi rangkaian di proteus. Adapun skenarionya adalah, rangkaian terdiri dari arduino dan 3 buah led serta 1 push button. Dimana nyala nya led tersebut memiliki aturan yang berbeda beda. Led pertama (LED 1) akan berkedip (blinking) dengan interval waktu 300 mili detik, Led kedua (LED 2) akan berkedip dengan interval 1000 mili detik. Sedangkan led terakhir (LED 3) diatur oleh push button yang ketika ditekan akan menyalakan LED 3. Jika menggunakan delay, maka akan sangat sulit untuk merealisasikan kode seperti itu. Karena ketika menggunakan delay, prosesor tidak menjalankan perintah lainnya. Maka disini kita akan menerapkan nya dengan millis.
Rangkaian yang dibuat sebagai berikut:

Adapun source code nya adalah sebagai berikut:

Program diatas menunjukan penggunaan millis, dimana millis digunakan untuk menghitung interval waktu led blinking. Jadi program ini tidak menggunakan delay seperti biasanya. Seperti terlihat pada program variabel millis_led1 dan millis_led2 merupakan penampung yang berisi waktu dari perubahan status LED terakhir. Dengan menggunakan tag kondisional IF, kita akan membuat program mengerjakan intruksi tertentu (dalam hal ini merubah status/toggling LED) ketika waktu interval tercapai.  Sebagai contoh pada LED 1 akan menyala ketika interval tercapai yaitu 300 mili detik. Interval ini dihitung dari selisih antara waktu saat ini dikurangi waktu millis_led1 terakhir sehingga kodenya  : 

if(millis()-millis_led1>300) digitalWrite(13, !digitalRead(13)); millis_led1=millis(); }

bagian millis_led1=millis(); adalah untuk menset millis_led1 dengan waktu terakhir ketika instruksi toggling led di eksekusi. Ini dibutuhkan untuk penghitungan interval selanjutnya. Begitu pun pada LED 2, cara kerjanya sama hanya saja interval nya 1000 mili detik. Sedangkan pada LED 3, akan menyala ketika push button ditekan. Karena tidak menggunakan dellay, maka ketika ditekan akan langsung mengontrol LED 3 dengan hampir tidak ada penundaan. Berbeda jika menggunakan delay, kemungkinan program tidak akan langsung merespon karena adanya penundaan dari sub program lainya.

Berikut adalah video dari hasil simulasi rangkaian dan program diatas:



Sekali lagi ini bukanlah multitasking yang sesungguhnya, melainkan hanya pendekatan multitasking pada arduino dengan penggunaan millis. Sekian tulisan kali ini, semoga bermanfaat dan mohon maaf apabila ada kesalahan. Jangan lupa, terus kunjungi blog ini untuk membaca tulisan yang lainya.






Bagikan Ke:

Komentar:

Komentar

Posting Komentar

berkomentarlah dengan bijak