Arduino: Timer(計時器) 使用教學,比delay好用的計時方式。

Arduino timer精選圖片

最初我在控制LED閃爍時,都是使用delay,但要控制數個led以不同頻率閃爍,卻沒辦法使用delay,因為當程式跑到delay時,整個就停擺在那邊,無法再處裡其他動作。

接下來要介紹Timer這個程式庫,就能夠解決這個問題,之後要定時讀取感測器的值,也很適合使用。

安裝Timer程式庫

這裡要先下載 Jack Christensen放在GitHub上的Timer程式庫

再來開啟Arduino IDE,安裝程式庫。

選取剛剛下載的Timer程式庫壓縮檔

Timer程式碼

安裝完程式庫後,下面先說明幾個常用到的程式指令。

  #include "Timer.h"  //引用Timer程式庫
  Timer T; //建立計時器物件(T可以自訂名稱)
  t.oscillate(腳位, 時間, 狀態); //設定多少毫秒切換一次狀態(HIGH or LOW)
  t.every(時間, 函式); //設定固定時間,呼叫函示
  t.update(); //在loop裡面會檢查更新計時器

控制LED不同頻率閃爍

使用Timer 來讓兩的LED以不同頻率來閃爍。

#include "Timer.h" 

Timer t1;  //建立Timer物件
Timer t2; 

const int LED1 = 2;
const int LED2 = 3;


void setup() {
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);

  t1.oscillate(LED1, 1000, LOW); //每1秒切換一次狀態,初始狀態LOW
  t2.oscillate(LED2, 100, HIGH); //每0.1秒切換一次狀態,初始狀態HIGH

}

void loop() {
  t1.update(); //更新t1
  t2.update(); //更新t2
}

定時呼叫函式

這裡試寫一個函式WriteToSerial,裡面為累加count,並顯示在序列埠上,固定時間呼叫此函式,就可以看到數字一直累加上去。

這個做法的重點是固定時間呼叫函式,這可以運用在固定時間讀取sensor的值,把函式內的程式改成讀取sensor,就可以輕鬆達到效果。

#include "Timer.h" 

Timer t;  //建立Timer物件
int count=0;

void WriteToSerial(){
  Serial.println(count);
  count++;
}

void setup() {
  Serial.begin(115200);
  t.every(1000,WriteToSerial); // 每1000ms呼叫WriteToSerial
}

void loop() {
  t.update(); //更新t
}

在〈Arduino: Timer(計時器) 使用教學,比delay好用的計時方式。〉中有 3 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *