Background Task artinya adalah pekerjaan yang dikerjakan dibelakang layar. Jadi ada pekerjaan yang utama (primary task) dan ada pekerjaan yang dibelakang layar (background task).
Untuk mengerjakan keduanya, prosesor membagi waktunya untuk mengerjakan primary task dan background task.
Sebenarnya prosesor hanya bisa mengerjakan satu bagian pekerjaan pada satu waktu, namun karena pembagian waktu itu terjadi dengan sangat cepat, maka seolah-olah kedua pekerjaan itu dikerjakan secara bersamaan.
MsTimer2
MsTimer2 adalah library Arduino yang berguna untuk menjalankan proses menggunakan interupsi timer. Sesuai namanya, library ini menggunakan TIMER2.
Dengan library ini, kita bisa menjalankan fungsi secara otomatis dengan interval milidetik (milliseconds).
Dari laman dokumentasi MsTimer2 di laman Arduino, disebutkan bahwa “Ms” pada nama library MsTimer2 adalah karena resolusi yang digunakan adalah 1 ms. Dan karena menggunakan TIMER2, maka nama lengkap yang diberikan pembuatnya adalah MsTimer2.
Dan sekedar memperjelas saja bahwa pada laman repository MsTimer2 di github, disebutkan bahwa fungsi MsTimer2 adalah:
Run a function every millisecond.
Bisa kita perhatikan bahwa pada kalimat tersebut disebutkan every milisecond yang artinya setiap 1ms, bukan every miliseconds yang artinya beberapa milidetik (jamak).
Meskipun disebutkan demikian, pada prakteknya kita tidak akan membuat fungsi yang waktu eksekusinya kurang dari 1 ms.
Lalu, bagaimana cara menjalankan fungsi (sub-program) di belakang layar menggunakan interupsi timer? Jawabannya ada pada prinsip kerja dari timer dan interupsi timer.
Mikrokontroler yang digunakan pada board Arduino memiliki beberapa timer yang bisa diprogram.
Timer ini bisa diprogram agar ketika hitungan timer tercapai (OVERFLOW), maka timer akan membangkitkan interupsi timer.
Dengan munculnya interupsi timer ini, maka program mikrokontroler yang sedang berjalan akan diinterupsi sehingga berbelok atau melompat sejenak ke bagian program interupsi timer (Timer ISR = Timer Interrupt Service Routine).
Setelah bagian program interupsi timer selesai dijalankan, maka program akan kembali melanjutkan program utama.
Apakah ini yang disebut dengan multitasking?
Iya. Skenario di atas bisa disebut sebagai multitasking. Artinya CPU seolah-olah mengerjakan 2 pekerjaan secara bersamaan.
Model multitasking seperti ini disebut juga dengan pre-emptive multitasking. Dalam hal ini prosesor membagi waktunya untuk mengerjakan beberapa pekerjaan.
Gambar berikut ini (semoga bisa) memberikan gambaran tentang bagaimana alur program ketika muncul interupsi dari timer.

Instalasi Library MsTimer2
Untuk keperluan eksperimen ini, kita akan menggunakan library MSTimer2 buatan Javier Valencia.
Seperti biasa, Anda bisa langsung melakukan instalasi libarry MSTimer2 melalui Library Manager dengan menekan kombinasi tombol Ctrl-Shift-I.

Setelah proses instalasi library MSTImer2 berhasil, maka selanjutnya kita bisa melakukan pengujian dengan sketch berikut ini.
#include <MsTimer2.h> #define LED 13 int counter = 0; void blink13() { static boolean output = HIGH; digitalWrite(LED, output); Serial.print(output ? "ON" : "OFF"); output = !output; counter++; Serial.print(" "); } void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); MsTimer2::set(500, blink13); // blink13 dijalankan setiap 500ms MsTimer2::start(); } void loop() { Serial.print(counter); //tampilkan counter di SerialMon const long i = millis(); while (labs(millis()-i)<100); //delay 100ms if (counter>5) //jika counter>5, reset counter { counter = 0; Serial.println(""); } }
Sketch di atas akan menghasilkan efek berkedip pada lampu LED 13 pada board Arduino dengan interval 500ms. Perhatikan bahwa pada fungsi loop() tidak terdapat perintah untuk memanggil fungsi blink13().
Penjelasan
Setup atau inisialisasi durasi dan fungsi yang akan dijalankan oleh timer dilakukan oleh perintah:
MsTimer2::set(500, blink13);
Fungsi blink13() bertugas untuk mengubah kondisi logika pada pin 13 setiap 500ms. Fungsi blink13() juga mengirimkan kondisi pin ke Serial Monitor. Dan, juga menaikkan nilai variabel counter dengan 1.
Serial.print(output ? "ON" : "OFF"); output != output; counter++;
Pada bagian loop(), program menampilkan nilai counter ke Serial Monitor. Dan selanjutnya melakukan tundaan proses menggunakan millis() dengan durasi tundaan 100ms.
Selanjutnya, program melakukan pengecekan apakah nilai variabel counter > 5. Jika IYA, maka reset nilai variabel counter menjadi nol ( counter = 0); )
Berikut ini adalah screenshot tampilan dari Serial Monitor.

Perhatikan hasil data yang dihasilkan program pada Serial Monitor.
Fungsi blink13() dijalankan setiap 500ms sekali. Sedangkan proses dalam fungsi loop() dijalankan berulang-ulang dengan kecepatan penuh.
Untuk memperjelas proses, maka pada program saya berikan tundaan proses selama 100ms dengan menggunakan fungsi millis(). Dengan demikian fungsi loop() akan menampikan nilai variabel counter ke Serial monitor setiap 100ms.
Artinya, setelah nilai counter ditampilkan 5 kali, maka fungsi blink13() akan dijalankan dan akan mengubah kondisi variabel static output. Selain itu juga ditampilkan kondisi variabel output dengan tampilan “ON” jika output==HIGH dan “OFF” jika output==LOW). Dan juga menambahkan 1 buah spasi pada Serial Monitor.
Oleh karenanya, jadilah tampilan pada Serial Monitor seperti pada screenshot di atas.
Nah, demikianlah sekelumit laporan eksperimen yang saya lakukan dengan library MSTimer2.
Semoga bermanfaat.
Hubungi Kami
Jika Anda membutuhkan sistem berbasis mikrokontroler, silakan menghubungi kami untuk ngobrol-ngobrol dulu seputar sistem yang Anda butuhkan.
Kami juga menyediakan Pelatihan/Bmbingan PRIVAT Online dengan materi pemrograman untuk platform Windows, Linux, Raspberry Pi dan Arduino.
Hubungi kami melalui WA 0882-3560-7047.
Berikut ini adalah screenshot pelaksanaan pelatihan pemrograman Arduino dengan materi library MsTimer2.
