arduino定时器

// led灯接UNO的13管脚
#include <MsTimer2.h>               //定时器库的 头文件
 
void flash()                        //中断处理函数,改变灯的状态
{                        
  static boolean output = HIGH;
  digitalWrite(13, output);
  output = !output;
}
 
void setup() 
{
  pinMode(13, OUTPUT);
 
  MsTimer2::set(500, flash);        // 中断设置函数,每 500ms 进入一次中断
  MsTimer2::start();                //开始计时
}
 
void loop()
{
 
}

再提供一种方法,利用 mills()同样函数可以实现中断的功能。mills()函数功能是获取系统运行的时间长度,单位ms。最大为9小时22分,如果超出时间将从0开始。函数的返回值为unsigned long型。
下面程序的功能让led灯亮灭各500ms :

unsigned long ledOn=500,ledOff=500; //定义led灯变化的时间长度,每500ms变化一次
int ledStatus;                      //定义LED灯的状态,HIGH or LOWm 
void setup()
{
    pinMode(13,OUTPUT);
    digitalWrite(13,HIGH);
    ledStatus=HIGH;
}
void loop()
{
    unsigned long nowtime=millis(); //获取当前的系统运行时间长度
    if(ledStatus==HIGH)             //如果当前lled灯状态为高电平,则执行该程序
    {
      if(nowtime>ledOn)             //检测系统运行时间长度是否到500ms
      {
        ledOn=nowtime;              //记录当前时间长度,第一次为500ms,赋值给ledOn
        ledOff=nowtime+500;         //计算出下一次led灯变化的时刻,第一次运行程序时应该在1000ms时关灯
        digitalWrite(13,LOW);       //关掉led灯
        ledStatus=LOW;              //记录当前led灯状态,下一次使用     
      } 
    }
 
  else{       
         if(nowtime>ledOff)
         {   
          ledOff=nowtime;
          ledOn=nowtime+500;
          digitalWrite(13,HIGH);
          ledStatus=HIGH;
         }
      }
}

PS:使用mills()函数的好处在于占用的整个程序运行时间短,如果用用延时函数,在延时的时间内,CPU不能干别的事儿。

发布了160 篇原创文章 · 获赞 338 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/qq_45172832/article/details/105430616