Mempelajari cara mengelola waktu pada Arduino tanpa menggunakan fungsi delay(), memungkinkan beberapa tugas berjalan bersamaan dengan millis().
Selama ini, kita sering menggunakan delay(1000); untuk membuat Arduino menunggu selama 1 detik. Namun, pernahkah kalian mencoba membaca sensor atau mendeteksi tombol DITENGAH-TENGAH fungsi delay() tersebut?
delay(waktu), ia akan benar-benar diam secara "buta" selama waktu tersebut. Ia TIDAK BISA membaca sensor, ia TIDAK BISA mengecek tombol, ia memblokir semua proses lain!Lalu, bagaimana cara menunggu tanpa menggunakan delay? Solusinya adalah dengan millis(). Fungsi millis() mengembalikan jumlah milidetik yang telah berlalu sejak Arduino dihidupkan (mirip seperti stopwatch).
Berikut adalah pola standar untuk menggunakan millis (Non-Blocking Timer):
Keuntungan utama pola millis() adalah kita bisa memiliki banyak timer sekaligus! Kita bisa mengatur jadwal yang berbeda untuk tugas-tugas yang berbeda di dalam loop().
Teknik ini dikenal dengan Cooperative Multitasking. Fungsi loop() akan berjalan berputar dengan sangat cepat (ribuan kali per detik). Setiap modul akan "kooperatif" hanya menjalankan tugasnya JIKA sudah saatnya tiba, lalu menyerahkan sisa waktu ke modul lain tanpa menahan program.
Mari kita terapkan dalam program nyata. Kita akan membuat program yang melakukan 3 hal sekaligus:
Solusi:Pastikan variabel waktu sebelumnya (misal prevLED) bertipe unsigned long, bukan int. Tipe data int hanya sampai 32.767, yang akan habis (overflow) dalam 32 detik saja!
Buatlah program sistem lampu lalu lintas tanpa menggunakan delay(), lalu tambahkan satu task terpisah untuk menyalakan bunyi buzzer (tut...tut...tut...) setiap 1 detik terus menerus!
Syarat:
Luangkan 2–3 menit untuk menjawab pertanyaan di bawah secara jujur.
Apa yang paling mengejutkan atau menarik hari ini?
Kapan saatnya delay() masih boleh digunakan?
Apa yang masih membingungkan atau ingin kamu pahami lebih dalam?
Apakah penggunaan memori RAM meningkat jika menggunakan metode millis() yang banyak?
Apa yang ingin kamu coba atau pelajari minggu depan?
Tantang dirimu untuk membersihkan kode-kode lamamu dari fungsi delay() mulai dari sekarang!
Refleksi tidak dinilai — ini adalah ruang jujurmu untuk berpikir.