创客联盟网

标题: Arduino里面有个闹钟——TimerOne库的使用 [打印本页]

作者: CCFIVE    时间: 2013-8-30 16:28
标题: Arduino里面有个闹钟——TimerOne库的使用
(, 下载次数: 119)

Arduino里面有个闹钟!其实更准确的说是一个定时器!TimerOne (, 下载次数: 11)
它到底有什么用呢?其实如果你是新手你一般不会觉得它有什么用!但是到你做到一些制作稍微复杂的时候你就会发现,它的用处非常大。例如好像在一些时候,我们用蜂鸣器和按键的时候,好像按键突然变得不灵敏了!不信?你可以挑战下自己,试一试写一个蜂鸣器响!按键按下亮灯的程序!

[mw_shl_code=cpp,true]void setup()
{
        pinMode(13,OUTPUT);
}
void loop()
{
        digitalWrite(13,HIGH);
        delay(1000);
        digitalWrite(13,LOW);
        delay(1000);
}[/mw_shl_code]
还记得我们的led实验吗?其中
delay(1000);

这个语句cpu就停在这里不断的循环,循环够1s了,cpu继续往下执行代码,所以你在cpu在执行delay语句期间你让它检测按键什么的,它是不会理你的!我举个现实中的例子!例如我叫你每隔半个小时去开看门看下家里的小宠物回家没?如果你用了delay,就是相当于你一直盯着钟来看!什么事情都不干!是不是感觉很愚蠢?其实更聪明的方法是设置一个闹钟,每半个小时响铃然后去看门看下,这样子在闹钟没响的时候我们可以去干其它事情,而不是把时间浪费在等待中!

所以你们这时候需要闹钟——TimerOne
TimerOne使用方法很简单!
看下我用TimerOne将上面的程序改写下,变成高效的程序
[mw_shl_code=cpp,true]#include <TimerOne.h>
void setup()
{
  pinMode(13, OUTPUT);   
  Timer1.initialize(100000);
  Timer1.attachInterrupt( timerIsr );
}

void loop()
{
}
void timerIsr()
{
    digitalWrite( 13, digitalRead( 13 ) ^ 1 );
}[/mw_shl_code]

  Timer1.initialize(100000);

这个就是设置那个定时时间,例如我要每隔半个小时,那样我括号就写上半个小时对应的数字!这里要注意下单位是微秒,1秒=1000 000微秒
  Timer1.attachInterrupt( timerIsr );

这个就是设置要干什么事情,括号里面就是填写时间到了,你要去做哪个函数。例如,现在设置每隔0.1s然后就去做timerIsr这个函数!

剩下的就没什么难题了,希望大家熟练掌握这个好用的闹钟!

作者: echo88    时间: 2013-12-16 23:42
楼主辛苦了!




欢迎光临 创客联盟网 (https://immaker.org/) Powered by Discuz! X3.3