使用定时器有很多种方式,这里的话就拿其中的一种来讲
在学习这篇教程之前,需要在库管理里面下载一个库,搜索TimerOne下载下图第二个即可:
这节课不需要准备材料,就直接给大家讲如何使用了,首先就是加载上面下载的那个头文件到程序里,
然后就可以进行变编程了,例程如下:
[scu name=”arduino-ide-post” platform=”arduino:avr:uno”]
#include "TimerOne.h" //加载的头文件
void setup ( )
{
pinMode ( 10 , OUTPUT ) ;
Timer1.initialize(500000); // 初始化timer1,并设置0.5秒周期
Timer1.pwm(9, 512); // 在引脚9上设置pwm,占空比为50%
Timer1.attachInterrupt(callback); // 将callback()作为定时器溢出中断
}
void callback ( ) //中断函数,0.5s执行一次
{
Serial.print("bbs.qutaojiao.com");
}
void loop ( )
{
// your program here...
}
[/scu]
上面是一个简单的程序,可以试着编译运行一下,可以发现串口监视器没半秒打印一个bbs.qutaojiao.com;
其它函数使用及其注意方式:
在使用的过程中,定时器1和定时器3是不一样的:
目录
定时器Timer1 :
刚刚下载的那个库是ATmega168 / 328 上配置称为Timer1的16位硬件定时器的例程集合。芯片上有3个硬件定时器,可以通过多种方式进行配置,以实现不同的功能。这个库的开发始于需要一种快速方便地设置PWM周期或频率的方法,但已经发展到包括定时器溢出中断处理和其他功能。它可以很容易地扩展或移植到其他计时器。
定时器Timer3 :
要注意,timer1可以在Mega上使用,但不是全都支持,三个输出引脚OCR1A,OCR1B和OCR1C中,只有A和B被支持。OCR1A和和OCR1B连接到Mega的引脚分别为11 引脚和引脚12.
常用函数:
void initialize(long microseconds=1000000);
void start();
void stop();
void restart();
unsigned long read();
void setPeriod(long microseconds);
void pwm(char pin, int duty, long microseconds=- 1);
void setPwmDuty(char pin, int duty);
void disablePwm(char pin);
void attachInterrupt(void (*isr)(), long microseconds=-1);
void detachInterrupt();
重要的函数讲解:
这是初始化函数,你必须先调用这个方法来才能再使用任何其他的方法。您可以选择在此指定计时器的周期(以微秒为单位),默认情况下设置为1秒。请注意,这会干扰Arduino上数字引脚9和10的analogWrite()。
以微秒为单位设置周期。该库支持的最小周期或最高频率为1微秒或1 MHz。最大周期为8388480微秒或约8.3秒。请注意,设置周期将同时改变所连接的中断和pwm输出的频率和占空比。
在指定引脚上产生一个PWM波形。Timer1的输出引脚是PORTB引脚1和2,因此您必须在这两者之间进行选择,其他任何操作都将被忽略。在Arduino上,这些是数字引脚9和10,所以这些别名也工作。Timer3的输出引脚来自PORTE,对应于Arduino Mega上的2,3和5。占空比被指定为一个10位的值,因此介于0和1023之间的任何值。注意,如果在调用它时包含一个以微秒为单位的值作为最后一个参数,则可以选择使用此函数设置周期。
以指定的时间间隔(以微秒为单位)调用函数。在频率太高的情况下要小心地尝试执行太复杂的中断,否则CPU可能永远不会进入主循环,程序将“锁定”。请注意,如果在调用它时包含一个以微秒为单位的值作为最后一个参数,则可以选择使用此函数设置周期。
如果您已经通过先前调用pwm()来设置它,则可以快速设置给定引脚的pwm占空比。这样可以避免为引脚启用pwm模式,设置数据方向寄存器,检查在调用pwm()时必需的可选周期调整等的开销。
禁用附加的中断。
将指定引脚的PWM关闭,以便您可以使用该引脚作为别的。
读取自上次翻滚到微秒的时间。
写的不错,学习了
不错