Blink LED tanpa delay(), #Simpletimer | Road to Expert Arduino

Penggunaan delay() dalam projek Arduino sangat lah tidak digalakkan. delay() dalam coding Arduino akan membuatkan coding stuck pada delay() dan melambatkan proses pembacaan coding oleh Arduino. Untuk mengelakkan sebarang masalah efisiensi sesuatu projek, delay() tidak digunakan dan digantikan dengan timer.

SimpleTimer.h Library

SimpleTimer.h merupakan library yang dicipta untuk menetapkan tempoh sesuatu function agar diaktifkan mengikut tempoh yang diingini.

Library Simpletimer diperlukan untuk menggunakan timer ini, library Simpletimer boleh didapati disini https://github.com/schinken/SimpleTimer

Berikut disediakan contoh coding simulasi bagaimana Simpletimer berfungsi.

#include <SimpleTimer.h>

int count = 0;

SimpleTimer timer1; // the timer object

void setup() {
  Serial.begin(9600);
  
  timer1.setInterval(1000, repeatMe); 
}//END VOID SETUP

void loop() {
  timer1.run();

  Serial.print("count = ");
  Serial.print(count);
  Serial.println();
}//END VOID LOOP

// function to be executed periodically
void repeatMe() {
  count = count + 1;
  
}//END REPEATME

Struktur yang perlu diketahui sebelum menggunakan SimpleTimer.h Library

Langkah-langkah mengunakan SimpleTimer.h :

  • Include SimpleTimer.h Library dalam DEFINING AREA
#include <SimpleTimer.h>

  • Declare OBJECT timer anda di dalam DEFINING AREA
SimpleTimer timer1; // the timer object

  • Jika memerlukan lebih dari 1 timer
SimpleTimer timer1,timer2; // the timer object
//timer1 represent first timer
//timer2 represent second timer

  • Tetapkan kelajuan tempoh dan function yang ingin dipanggil dalam void setup()
  timer1.setInterval(1000, repeatMe);
  //1000 bermakna masa sub-routine repeatMe akan diaktifkan setiap 1 saat
  //jumlah itu boleh ditukar mengikut kemahuan sendiri

  • Cipta function yang ingin ditempohkan di ruangan sub-routine
void repeatMe() {
  count = count + 1;
  
}//END REPEATME
  • Run timer di dalam void loop()
timer1.run();

Bagaimana SimpleTimer berfungsi?

SimpleTimer Library ‘memanggil’ sub-routine mengikut tempoh yang ditetapkan ke dalam void loop. Oleh itu, void loop hanya membaca sub-routine tersebut setiap kali dipanggil.

Kebaikan SimpleTimer ini adalah loop utama iaitu void loop tidak terganngu sama sekali walaupun SimpleTimer gagal memanggil sub-routine tersebut.

BLink LED

Langkah #1 : Sambungan Litar

Sambungkan litar anda mengikut gambar rajah berikut:

Langkah #2 : Coding/Sketch

Copy sketch di bawah dan pastekan dalam Adruino IDE anda.

#include <SimpleTimer.h>
//masukkan library SimpleTimer.h

int count = 0;

SimpleTimer timer1; // the timer object

void setup() {
  Serial.begin(9600);
  pinMode(2,OUTPUT);//declare pin 2 sebagai output LED
  timer1.setInterval(1000, LEDBLINK);
  //1000 bermakna masa sub-routine LEDBLINK akan diaktifkan setiap 1 saat
  //jumlah itu boleh ditukar mengikut kemahuan sendiri
}//END VOID SETUP

void loop() {
  timer1.run();//program untuk aktifkan timer

  if (count == 1){
     digitalWrite(2,HIGH);
     //LED akan menyala bila value count=1
  }

  if (count == 0){
     digitalWrite(2,LOW);
     //LED akan padam bila value count=0
  }

  Serial.print("count = ");
  Serial.print(count);
  Serial.println();
}//END VOID LOOP

//sub-routine yang akan diaktifkan mengikut masa yg kita tetapkan
void LEDBLINK() {
  count = count + 1;//core routine untuk LEDBLINK

  if (count>1){
     count=0;
     //limitkan jumlah count kepada 0 dan 1 sahaja
  }
}//END REPEAT ME

Setelah coding diupload , LED pada pin 2 akan menyala selama 1 saat dan padam selama 1 saat kemudian proses ini akan berulang dan LED tersebut dapat dilihat berkelip-kelip.

BONUS – Running LED

SimpleTimer boleh mempunyai berbagai-bagai aplikasi. Salah satu aplikasi adalah Running LED yang akan diterangkan bagaimana Running LED dijalankan tanpa menggunakan delay.

LANGKAH #1: Sambungan Litar

Sambungkan litar anda seperti gambarajah berikut:

Jika anda menggunakan LED yang lebih banyak boleh sambungkan ke pin digital yang avaible.

LANGKAH #2: CODING/SKETCH

Copy sketch di bawah dan pastekan dalam Arduino IDE anda.

#include <SimpleTimer.h>
//masukkan library SimpleTimer.h

int count = 0;

SimpleTimer timer1; // the timer object

void setup() {
   Serial.begin(9600);
   pinMode(2,OUTPUT);//declare pin 2 sebagai output LED1
   pinMode(3,OUTPUT);//declare pin 3 sebagai output LED2
   pinMode(4,OUTPUT);//declare pin 4 sebagai output LED3
   //jumlah pinMode bergantung kepada jumlah LED yg digunakan

   timer1.setInterval(500, RunningLED);
   //program ini menggunakan 0.5 saat time interval
   //bagi setiap LED menyala
}//END VOID SETUP

void loop() {
  //CODING TIMER
  timer1.run();

  //CODING LED OUTPUT UNTUK RUNNING LED
  if (count == 0){
     digitalWrite(2,HIGH);
     digitalWrite(3,LOW);
     digitalWrite(4,LOW);
     //LED1 akan menyala bila value count=0
  }

  if (count == 1){
     digitalWrite(2,LOW);
     digitalWrite(3,HIGH);
     digitalWrite(4,LOW);
     //LED2 akan menyala bila value count=1
  }

  if (count == 2){
     digitalWrite(2,LOW);
     digitalWrite(3,LOW);
     digitalWrite(4,HIGH);
     //LED3 akan menyala bila value count=2
  }

  //SERIAL PRINT UNTUK CHECK KONDISI COUNT
  Serial.print("count = ");
  Serial.print(count);
  Serial.println();
}//END VOID LOOP

//sub-routine yang akan diaktifkan mengikut masa yg kita tetapkan
void RunningLED() {
  count = count + 1;//core routine untuk RunningLED

  if (count > 2){
     count=0;
     //limitkan jumlah count kepada 0 hinggah 2
     //limit ini boleh diubah suai bergantung kpd jumlah LED
  }

}//END RUNNING LED

Coding di atas akan mengaktifkan running LED anda dan boleh diubah suai mengikut kreativiti dan keinginan anda. Refer instruction untuk mengenal pasti bahagian yang boleh diubah suai.

Anda boleh tinggalkan sebarang persoalan di ruangan komen tentang apa-apa yang berkaitan dengan SimpleTimer.

Selamat mencuba.

Tinggalkan Jawapan

Masukkan butiran anda dibawah atau klik ikon untuk log masuk akaun:

WordPress.com Logo

Anda sedang menulis komen melalui akaun WordPress.com anda. Log Out /  Tukar )

Twitter picture

Anda sedang menulis komen melalui akaun Twitter anda. Log Out /  Tukar )

Facebook photo

Anda sedang menulis komen melalui akaun Facebook anda. Log Out /  Tukar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: