最初我在控制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
}
請問這能在條件式if判斷時間嗎?
如果是想要在條件是if中來判斷時間,那我比較推薦用millis(),可參考下列文章
https://www.qutaojiao.com/21429.html
帥