Membuat Led Berkedip Tanpa Delay Menggunakan Arduino Uno

Fungsi delay merupakan fungsi untuk memberi jeda waktu sebelum melanjutkan program, dan delay sangat berguna pada program tertentu seperti contoh yang sederhana yaitu membuat led berkedip, led akan berkedip menyala dan mati berdasarkan lama jeda waktunya (delay), namun hal ini sangat berpengaruh jika ada suatu input yang ingin diproses atau output lain yang ingin dihidupkan, pengaruhnya yaitu menunggu jeda waktunya (delay) selesai, sedangkan input atau output yang lain harus segera di proses, tentu hal ini dapat mengakibatkan ketidaksesuaian hasil yang diinginkan, oleh karena itu penggunaan delay tidak baik untuk program dengan respon input output yang cepat, so jangan khawatir, bagi agan-agan yang belum tau, di arduino ada fungsi yang mirip dengan delay.
fungsi yang mirip delay ? emang ada ? bukannya yang mmbuat jeda waktu itu cuma fungsi delay .. mungkin itu beberapa pertanyaan bagi agan-agan yang masih baru belajar, termasuk saya sih yang masih dalam proses belajar. diarduino terdapat fungsi yang namanya millis(), fungsi ini sudah ada di arduino tanpa harus mencari librarynya, cara kerja fungsi ini yaitu saat arduino dihubungkan dengan power, arduino akan menghitung dengan ketelitian milidetik, jadi valuenya akan terus bertambah, dan akan mengulang lagi ika power di cabut atau tombol reset di tekan, sempet bingung juga dengan fungsi yang satu ini, menurut saya fungsi ini menggunakan fasilitas timer dengan ketelitian milidetik pada icnya, mungkin saja!!, ini hanya perkiraan dari saya. mungkin ada penjelasan fungsi millis() yang lengkap berada di situs resmi arduino. 

dan sekarang bagaimana penggunaannya, apa hubungannya perhitungan dengan ketelitian milidetik dengan fungsi delay, memang hal itu bisa dijadikan delay ? InsyaAllah bisa. :D  jadi caranya adalah jika ada 1 proses yang ingin ada delaynya, minimal ada 2 variabel untuk membuat delay, seperti contoh kita ingin membuat delay 1 detik, 1 detik = 1000 milidetik, jadi variabel pertama menyimpan informasi fungsi millis() yang merupakan perhitungan dengan ketelitian milidetik, dan setelah itu dikurangkan dengan variabel yang ke 2, dan di bandingkan apakah hasilnya 1000.. dan untuk mempermudah pehaman, saya sudah buatkan simulasi dengan proteus, menggunakan 4 buah led dengan 4 switch, masing-masing switch menghidupkan satu led, dan masing-masing led akan berkedip setiap 1 detik, jadi 1 detik menyala, 1 detik mati tanpa menganggu proses lainnya,


berikut source codenya, menggunakan arduino ide 1.6.8

const int bt1 = 2 ;     
const int bt2 = 3 ;     
const int bt3 = 4 ;     
const int bt4 = 5 ;     

const int led1 = 10 ;
const int led2 = 11 ;
const int led3 = 12 ;
const int led4 = 13 ;

unsigned long TempDelay,time1,time2,time3,time4;
bool state1,state2,state3,state4;

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);

  pinMode(bt1,INPUT);
  pinMode(bt2,INPUT);
  pinMode(bt3,INPUT);
  pinMode(bt4,INPUT);

  digitalWrite(led1,HIGH);
  digitalWrite(led2,HIGH);
  digitalWrite(led3,HIGH);
  digitalWrite(led4,HIGH);
 
  digitalWrite(bt1,HIGH);
  digitalWrite(bt2,HIGH);
  digitalWrite(bt3,HIGH);
  digitalWrite(bt4,HIGH);
}

void loop() {
  TempDelay = millis();

  if(TempDelay-time1 >= 1000 && !digitalRead(bt1))
  {
    time1=TempDelay;
    if(state1)
    {
      state1=false;
    }
    else
    {
      state1=true;
    } 
    digitalWrite(led1,state1);
  }     

  if(TempDelay-time2 >= 1000 && !digitalRead(bt2))
  {
    time2=TempDelay;
    if(state2)
    {
      state2=false;
    }
    else
    {
      state2=true;
    }
    digitalWrite(led2,state2);
  }     


  if(TempDelay-time3 >= 1000 && !digitalRead(bt3))
  {
    time3=TempDelay;
    if(state3)
    {
      state3=false;
    }
    else
    {
      state3=true;
    }
    digitalWrite(led3,state3);
  }     

  if(TempDelay-time4 >= 1000 && !digitalRead(bt4))
  {
    time4=TempDelay;
    if(state4)
    {
      state4=false;
    }
    else
    {
      state4=true;
    }
    digitalWrite(led4,state4);
  }     
}

program diatas adalah program untuk menyalakan led, dan led akan berkedip setiap 1 detik, seperti yang sudah di jelaskan di atas, jadi led akan berkedip setiap 1 detik tanpa menggangu proses yang lain, berkedip tidak berurutan, kalau penggunaan delay, tentunya akan berkedip secara berurutan,

led1 on -> 1detik -> led1 off -> 1detik -> led2 on -> 1detik -> led2 off -> 1detik -> .. dan berurutan seterusnya, ini penggunaan delay,

sedangkan penggunaan milis()

led1 on -> 1detik -> led1 off -> 1detik -> kembali ke proses led1 onled2 on -> 1detik -> led2 off -> 1detik -> kembali ke proses led2 on
led3 on -> 1detik -> led3 off -> 1detik -> kembali ke proses led3 on
led4 on -> 1detik -> led4 off -> 1detik -> kembali ke proses led4 on

jadi bisa dilihat led akan menyala secara bebas tanpa terkait proses lain..

note: keadaan ke4 tombol di on kan

akhir kata saya ucapkan terima kasih ..

moga bermanfaat bagi agan-agan yang ingin mencobanya,
moga berhasil mencobanya..

Download http://adf.ly/1ZL14F
Password ganyang-angkara.blogspot.com 

*..sesama blogger harus saling menghargai, jika agan-agan ingin mengcopas harap cantumkan alamat urlnya, Terimakasih..*