Pada dasarnya lebih mudah menggunakan fungsi delay, untuk jeda waktu di arduino, tapi ada kekurangan tidak bisa mengerjakan secara bersamaan, hanya bergantian satu demi satu (tidak bisa bercabang). Disini saya akan menjelaskan jeda waktu diarduino dengan millis, dengan logika yang agak nyleneh, tapi tidak asal-asalan yah. Logika nyenehc digunakan karena mungkin banyak orang yang bingung mengunakan fungsi millis menggunakan logika biasa. Logika ini juga saya sering gunakan supaya pembuatan sketsa kompleks menjadi lebih mudah. Jika logika saya membuat anda tambah bingung jangan gunakan logika ini.
Gambar no. 1
Oke saya berikan contoh sketsa sangat sederhana. Salin dan upload sketsanya, lalu lihat kedipan lampu yang ada di papan Arduino anda yang berlabel L (seperti gambar diatas), jadi tidak usah pasang rangkaian elektronik tambahan.
Contoh sketsa satu
tulis seketsa diatas diruang lingkup void loop supaya berkali-kali diperiksaatau dieksekusi, pemeriksaan atau eksekusi sketsa biasanya dari atas kebawah, dan bisa bercabang (multitasking), walaupun sebenarnya dikerjakan satu per satu secara bergantian.
Dari contoh sketsa diatas dapat suatu logika
1.Air banjir
Fungsi millis itu nilainya naik terus saat arduino dinyalakan, dari 0 dan terus naik dalam mili detik, diibaratkan air banjir yang naik terus level ketinggiannya, memang sketsa diatas tidak ada yang sketsa millis itu naik terus, bisa dibilang otomatis ada dengan sendirinya, walaupun tidak ditulis
2.Menaikkan tanggul
penyesuaian=millis();
Itu diibaratkan perintah meninggikan tanggul, sehingga ada jeda. Karena nilai pernyesuaian sama nilainya dengan ketinggian air banjir(millis()) pada saat perintah itu di kerjakan. Nilai millis saat perintah itu dikerjakan bisa variatif nilainya bisa 2000,3000,4500,dst
3. Tanggul
if ((millis()-penyesuaian)>=jeda))
Itu diibaratkan sebuah tanggul penahan banjir yang bisa di tinggikan atau dimanipulasi, jika tinggi air banjir (millis()) melebihi tanggul, tanggul akan meluap, atau dalam pengertian pemrogram sesungguhnya itu berarti bernilai benar, lalu mengeksekusi perintah bawahnya. Eksekusi program sampai ruang lingkup if (millis ini berakhir. Nanti balik lagi dari awal diperiksa meluap atau tidak tanggul ini, jika tidak ada kenaikan tanggul (penyesuaian=millis()) maka akan perintah dibawah dieksekusi terus, seperti tidak ada jeda (tanggul meluap terus).
Penjelasannya logikanya
if ( (millis() - penyesuaian) >=jeda)
(if)jika ketinggian air banjir (millis()) dikurangi penyesuaian hasilnya lebih dkecil sama dengan tambahan ketinggian tanggul (jeda), maka jika benar, eksekusi atau periksa perintah dibawahnya, jika tidak benar cuma periksa lagi saja.
Sketsa (nyala=!nyala;) fungsinya untuk membalikakn isi variabel nyala, jika variabel nyala pada saat itu true, maka isinya menjadi false, jika variabel nyala pada saat itu false, maka isinya menjadi true, ya mirip fungsinya seperti saklar on/off. Sketsa diatas contoh hanya satu cabang menggunakan fungsi millis, belum bisa dikatakan multi tasking, bila ingin menambahkan tugas multitasking lihat contoh dibawah ini, ada dua cabang dan dua tanggul.
Contoh sketsa 2
Bahan rangkaian yang dibuat
- Arduino uno atau Arduino Nano 1 buah
- Resistor 1k ohm 2 buah
- Lampu LED 2 buah
- Breadboard 1 buah
- Kabel jumper atau kabel yang kaku secukupnya
Gambar no. 2
Multi tasking pun kadang tidak membutuhkan jeda pada setiap cabang, jadi bisa di campur antara perintah yang ada jeda dengan yang tidak ada jeda. Tidak ada jeda bisa berarti dilaksanakan terus menerus atau periksa dulu jika benar eksekusi, dibawah ini contoh dari pengembangan sketsa diatas, rangkaian tetap sama seperti gambar nomor 1, pastikan komputer tetap terhubung di Arduino saat selesai upload, supaya komputer bisa kirim data.
Contoh sketsa 3
coba kirim melalui serial monitor Arduino angka 1 angka2, angka 3 atau angka 4, itu akan mempengaruhi jeda kedua lampu LED. Jika tidak respon Arduinonya pastikan baud rate serial monitornya 9600.
Gambar no. 3
Silakan kembangkan lagi, umpamanya cabang kedua itu untuk menggerakkan motor servo, motor stepper, mengirim keterangan di lcd 16x2, dan seterusnya.
Okey jika penjelasan saya membinggungkan tidak usah dipakai, pakai penjelasan yang umum saja, karena dalam memahami bahasa pemrograman di butuhkan pikiran yang tenang dan ceria, supaya mudah paham. Sekian dari saya bila ada salah bisa dikoreksi di kolom komentar.