Arduino使用定时器设置周期时间运行程序

1、用Arduino millis() 函数 实现一定程度上的多任务系统,可以设置不同时间的任务周期去执行对应的程序。比如需要10毫秒执行一次的程序、100毫秒执行一次的程序、1秒执行一次的程序。

2、Delay(ms)是延时函数,使用该延时函数,后面的程序将会暂停执行

millis() 多任务,代码


const long _100msTime = 100;      // 100 milli seconds
unsigned long _100msLastTime; 
const long _1000msTime = 1000;    // 1000 milli seconds
unsigned long _1000msLastTime;  
long a=0;
long b=0;
int count=0;

void setup() {
  // 打开串口
    Serial.begin(9600);
    while (!Serial) 
    {
        ; //等待串口连接。仅本机USB口使用。
    }
    Serial.println("Serial is opened.");
}

void loop() {
  // put your main code here, to run repeatedly:
  TimeProc();
}

void TimeProc()
{
  //1000ms执行一次
  if ((millis() - _1000msLastTime) >= _1000msTime)
  {
    _1000msLastTime = millis( );    

    //
    Serial.print("Counts a is: "); 
    Serial.print(a); 
    Serial.println(";");

    Serial.print("Counts b is: "); 
    Serial.print(b); 
    Serial.println(";");
    
    b++;
  } 
  //100ms执行一次
  if ((millis() - _100msLastTime) >= _100msTime)
  {
    _100msLastTime = millis( );  
     
    a++;

    /*
   //
    if(count>10)
    {
      count=0;
      a++;
    }
    count++;  
    */     
  }    
}

串口检测

3、测试控制器从开机到程序运行花费时间

代码:


const long _100msTime = 100;      // 100 milli seconds
unsigned long _100msLastTime; 
const long _1000msTime = 1000;    // 1000 milli seconds
unsigned long _1000msLastTime;  
long a=0;
long b=0;
int count=0;

unsigned long startTime; // 用于记录开始时间
unsigned long endTime;   // 用于记录结束时间

void startTimer() 
{
  startTime = millis(); // 记录开始时间
} 
void stopTimer() 
{
  endTime = millis(); // 记录结束时间
} 
unsigned long getElapsedTime() 
{
  return endTime - startTime; // 返回经过的毫秒数
}

void setup() 
{
  startTimer();
  // 打开串口
    Serial.begin(9600);
    while (!Serial) 
    {
        ; //等待串口连接。仅本机USB口使用。
    }
    Serial.println("Serial is opened.");
}

void loop() {
  // put your main code here, to run repeatedly:
  stopTimer();
  unsigned long elapsed = getElapsedTime(); // 获取经过的时间 
  Serial.print("StartTime  is: ");
  Serial.print(elapsed); 
  Serial.println(";");

  delay(2000);
  
  TimeProc();
}

void TimeProc()
{
  
     
  //1000ms执行一次
  if ((millis() - _1000msLastTime) >= _1000msTime)
  {
    _1000msLastTime = millis( );    


    //
    Serial.print("Counts a is: "); 
    Serial.print(a); 
    Serial.println(";");

    Serial.print("Counts b is: "); 
    Serial.print(b); 
    Serial.println(";");
    
    b++;
  } 
  //100ms执行一次
  if ((millis() - _100msLastTime) >= _100msTime)
  {
    _100msLastTime = millis( );  
     
    a++;

    /*
   //
    if(count>10)
    {
      count=0;
      a++;
    }
    count++;  
    */     
  }    
}

串口检测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Big_潘大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值