arduino定时器函数如何使用_【Arduino101教程】定时器的使用
定時器中斷
外部中斷是通過檢測輸入電平的變化,而產生中斷信號。除了外部中斷方式外,Genuino 101還可以按時間變化產生中斷,這里即會使用到定時器(Timer),而對應產生的中斷被稱為定時器中斷。
定時器是嵌入式系統中的一個特殊的計數器。它可以對分頻后時鐘信號的進行計數,當計數值達到設定值,即會產生定時器中斷。且通過時鐘頻率和計數值可以計算出時間,所以可以達到以時間觸發中斷的效果。
簡而言之,當需要以特定頻率運行某個中斷程序時,可以使用定時器中斷。
使用Curie定時器功能,須引用頭文件CurieTimerOne.h:
[mw_shl_code=cpp,true]#include "CurieTimerOne.h"[/mw_shl_code]
和IO中斷一樣也需要先定義一個返回值為空的中斷函數:
[mw_shl_code=cpp,true]void Blink () {
}[/mw_shl_code]
使用start函數即可開啟定時器中斷
[mw_shl_code=cpp,true]CurieTimerOne.start(time, Blink)[/mw_shl_code]
其中參數time為時間,單位微秒,ISR為定時器中斷產生后運行的函數。
第一章中的Blink示例也可以用定時器實現,實現代碼如下:
[mw_shl_code=cpp,true]#include "CurieTimerOne.h"
bool lighting= true;
int time = 1000000;
void Blink() {
digitalWrite(13, lighting);
lighting = !lighting;
}
void setup() {
pinMode(13, OUTPUT);
CurieTimerOne.start(time, Blink);
}
void loop() {
}[/mw_shl_code]
以上程序還可以結合其他功能,實現一邊Blink閃爍,一邊
定時器輸出PWM
除了作中斷源使用,定時器也可以用作PWM輸出,CurieTimerOne提供的pwmStart函數可以輸出PWM。
在之前的章節中使用的analogWrite函數輸出的PWM,周期固定,占空比可調,可用作LED調光;tone函數輸出的PWM,周期不變,占空比可調,可用作無源蜂鳴器發聲;而pwmStart輸出的PWM周期和占空比都可調,更具靈活性,適用場合更廣。
需注意的是pwmStart是重載函數,其有兩種重載方式:
[mw_shl_code=cpp,true]pwmStart(unsigned int outputPin, double??dutyPercentage, unsigned int periodUsec);
pwmStart(unsigned int outputPin, int??dutyRange, unsigned int periodUsec);[/mw_shl_code]
參數outputPin為輸出PWM的引腳編號,periodUsec為每個周期的時間,單位為微秒。
而第二個參數可以為double 型,也可以為int型。當參數為double 型時,編譯器會以dutyPercentage進行重載,參數以百分比形式表示PWM占空比;當參數為int型時,編譯器會以dutyRange進行重載,參數以0到1023的形式表示PWM占空比;
函數重載
函數重載是指在同一作用域內,可以有一組具有相同函數名,不同參數列表的函數,這組函數被稱為重載函數。在編譯程序時,編譯器會根據參數列表選擇對應的函數進行重載并編譯。重載函數通常用來命名一組功能相似的函數,這樣做減少了函數名的數量,避免了名字空間的污染,對于程序的可讀性有很大的好處。[/url][陳呂洲1]
以下代碼也是實現Blink的效果:
[mw_shl_code=cpp,true]
#include "CurieTimerOne.h"
void setup() {
// 設置13號引腳輸出PWM信號, 占空比為25%,周期為1秒(1000000微秒)。
CurieTimerOne.pwmStart(13, 25.0, 1000000);
// 當第二個參數為int型時,用0-1023的數值表示占空比
// 例如255代表24.9%的占空比
// CurieTimerOne.pwmStart(13, 255, 1000000);
}
void loop() {
delay( 10000 );
}
[/mw_shl_code]
需要注意的是語句
[mw_shl_code=cpp,true]CurieTimerOne.pwmStart(13, 25.0,??1000000);[/mw_shl_code]
中的第二個參數25.0一定要有小數位,編譯器才會將其判斷為double 型。如果這里這里直接使用不帶小數位的25,編譯器會將其判斷為int型,進而使用另一種重載方式。
總結
以上是生活随笔為你收集整理的arduino定时器函数如何使用_【Arduino101教程】定时器的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: recyclerview item动画_
- 下一篇: drbd配置文件_Linux数据安全工具