Tulisan ini sekedar eksperimen santai saja dimana kita akan membuat program Blinking LED, 3 buah LED tepatnya, tanpa menggunakan fungsi delay(), tanpa fungsi millis() dan juga tanpa Timer.
Ketiga LED akan berkedip-kedip dengan rate yang berbeda. LED1 berkedip cepat. LED2 berkedip lebih lambat. Dan LED3 berkedip lebih lambat lagi.
Dan untuk sedikit menambah fitur, masing-masing LED dapat dikontrol melalui Serial Monitor.
Dikontrol bagaimana maksudnya??
Maksudnya, masing-masing LED bisa diaktifkan (berkedip-kedip) atau dinon-aktifkan (berhenti berkedip) dengan mengirimkan karakter perintah kepada mikrokontroler melalui Serial Monitor.
Tujuan Eksperimen
Tujuan dari eksperimen ini adalah untuk melatih teknik pemrograman. Eksperimen ini akan menunjukkan tentang bagaimana kita bisa memrogram Arduino untuk membuat LED berkedip tanpa fungsi delay(), tanpa millis() dan tanpa Timer.
Selain itu, eksperimen ini juga menunjukkan bagaimana membuat program agar mikrokontroler bisa menjalankan beberapa pekerjaan dengan cara yang paling sederhana.
Rangkaian LED
Rangkaian LED untuk eksperimen ini bisa Anda simak pada gambar berikut ini.

Tiga buah rangkaian LED Aktif-HIGH dikontroler melalui PIN-2, PIN-3 dan PIN-4. Untuk menyalakan LED, maka pin kontrol LED harus diberi logika tinggi (HIGH). Dan untuk memadamkan LED, maka pin kontrol LED harus diberi logika rendah (LOW).
Baca Juga: Rangkaian LED Aktif HIGH dan Pemrogramannya
Kode Program
Berikut ini adalah kode program untuk menyalakan 3 buah LED dengan mode berkedip (blinking) dengan rate yang berbeda.
/* * Program Blinking 3 Buah LED dengan rate yang berbeda * tanpa menggunakan fungsi delay() ataupun millis() * Chandra MDE - https://blog.teknikelektrolinks.com */ int led_status[3] = {0, 0, 0}; int led_enabled[3] = {1, 1, 1}; unsigned long X; void update_led() { digitalWrite(2, led_status[0]); digitalWrite(3, led_status[1]); digitalWrite(4, led_status[2]); } void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); Serial.begin(9600); Serial.println("Ketiga LED akan berkedip dengan rate yang berbeda."); Serial.println("Blinking bisa di RUN/STOP dengan perintah melalui Serial Monitor."); Serial.println("Send 1 untuk RUN/STOP LED 1."); Serial.println("Send 2 untuk RUN/STOP LED 2."); Serial.println("Send 3 untuk RUN/STOP LED 3."); Serial.println("https://blog.teknikelektrolinks.com"); } void loop() { if (Serial.available()) { char ch = Serial.read(); if (ch=='1' || ch=='2' || ch=='3') { ch = ch - 49; led_enabled[ch] = !led_enabled[ch]; Serial.print("LED "); Serial.print(ch+1); Serial.print(" "); Serial.println(led_enabled[ch] ? "enabled" : "disabled"); } } X++; if (led_enabled[0] && X%1000 == 0) led_status[0] = !led_status[0]; if (led_enabled[1] && X%3000 == 0) led_status[1] = !led_status[1]; if (led_enabled[2] && X%6000 == 0) led_status[2] = !led_status[2]; update_led(); }
Untuk melakukan eksperimen ini, Anda bisa merakit rangkaian LED di atas dan menghubungkannya ke board Arduino.
Pada eksperimen ini, saya menggunakan board Arduino Mega. Anda bisa menggunakan board yang sama, yakni Arduino Mega, atau Anda bisa menggunakan Arduino UNO atau Arduino Nano.
Setelah dirangkai dengan benar, Anda bisa meng-Upload kode program di atas dan jika tidak ada halangan, maka Anda akan mendapati ketiga LED berkedip dengan rate yang berbeda.
Selanjutnya, Anda bisa membuka Serial Monitor dan mengeset baudrate = 9600.
Melalui Serial Monitor, Anda dapat meng-enable atau men-disable ketiga LED yang berkedip tersebut. Jika enabled, maka LED akan berkedip. Jika disabled, maka LED akan berhenti berkedip.
Tampilan Hasil Eksperimen


Teknik Elektro Links
Kami melayani perancangan dan pembuatan sistem berbasis mikrokontroler. Kami juga merancang dan membuat panel kontrol berbasis Zelio Smart-Relay.
Dan jika Anda membutuhkan pelatihan atau bimbingan atau konsultasi, kami juga siap melayani Anda.
Anda dapat menghubungi kami melalui Whatsapp 0882-3560-7047.
Kunjungi situs kami di:
Semoga eksperimen ini bermanfaat.
Menambah nilai x termasuk kategori apa bang bukan timer bukan millis?
Itu cuma trik pemrograman saja. Jika proses tidak membutuhkan pewaktuan yang presisi, maka kita bisa gunakan cara tersebut.
No delay() artinya tidak menggunakan fungsi delay().
No millis() artinya tidak menggunakan fungsi millis(). Fungsi millis() pun berbasis Timer.
No Timer artinya kita tidak menggunakan fitur Timer.
mumet kalo pake cara ini, kalo pake banyak millis apakah berpengaruh terhadap kinerja arduino bang?
Millis() adalah fungsi yang mengembalikan nilai waktu durasi Arduino ON dalam milidetik. Tidak dipanggil pun counter waktu ini tetap berjalan. Jadi tinggal bagaimana memanfaatkannya saja. Kebanyakan masalah/pertanyaan yang muncul adalah kesalahan dalam alur pemrograman, bukan karena millis()-nya. Yang terpenting, kita harus terus mengembangkan teknik pemrograman kita.