close
請先下載 Timer 庫。並解壓縮到 Arduino 專案路徑下 (存檔路徑)
https://github.com/JChristensen/Timer#installation
傳統我們要控制 LED 閃爍頻率則是修改 delay() 延遲時間,但是如果之後要讓 10 個 LED 以不同頻率閃爍則非常困難。如果之後只是要修改其中一個LED頻率,那麼其他9個LED也要修改,而且還要大量計算好時間,這是非常不容易維護的。如下是使用傳統作法:
int pin = 13; void setup() { pinMode(13, OUTPUT); digitalWrite(pin, HIGH); delay(10 * 60 * 1000); digitalWrite(pin, LOW); } void loop() { }
下面程式碼是使用 Timer 庫,而達到與上面程式碼相同的結果,但更好維護。下方程式碼是Arduino啟動後 10分鐘後,切換 pin 13 狀態 ( 只做一次 )
#include "Timer.h" Timer t; int pin = 13; void setup() { pinMode(pin, OUTPUT); t.pulse(pin, 10 * 60 * 1000, HIGH); // 10 minutes } void loop() { t.update(); }
下面程式碼是每 100毫秒 切換 Pin 13 狀態 (無限循環)。並每 1 秒呼叫 takeReading() 函式(方法) ,將讀取 類比 Pin 0 信號並方送至PC端。
#include "Timer.h" Timer t; int pin = 13; void setup() { Serial.begin(9600); pinMode(pin, OUTPUT); t.oscillate(pin, 100, LOW); t.every(1000, takeReading, (void*)0); } void loop() { t.update(); } void takeReading(void *context) { Serial.println(analogRead(0)); }
下面就是綜合運用了:
#include "Timer.h" Timer t; int ledEvent; void setup() { Serial.begin(9600); int tickEvent = t.every(2000, doSomething, (void*)0); Serial.print("2 second tick started id="); Serial.println(tickEvent); pinMode(13, OUTPUT); ledEvent = t.oscillate(13, 50, HIGH); Serial.print("LED event started id="); Serial.println(ledEvent); int afterEvent = t.after(10000, doAfter, (void*)0); Serial.print("After event started id="); Serial.println(afterEvent); } void loop() { t.update(); } void doSomething(void *context) { Serial.print("2 second tick: millis()="); Serial.println(millis()); } void doAfter(void *context) { Serial.println("stop the led event"); t.stop(ledEvent); t.oscillate(13, 500, HIGH, 5); }
全站熱搜
留言列表