超时Timer5中断Arduino

时间:2016-08-29 08:37:19

标签: arduino

我有这个代码,我尝试在超时时重启Timer5。但我不能,你可以帮助我吗?

#include <TimerFive.h>
#include <TimerOne.h>
#include <openGLCD.h>
#define OLDWAY
unsigned long timer5_started=0;
void setup() {
  Serial.begin(9600);
  Timer1.stop();
  Timer1.detachInterrupt();
  Timer1.initialize(500000);
  Timer1.attachInterrupt(Timer1Handle);  
  Timer1.start();

  Timer5.stop();
  Timer5.detachInterrupt(); //detach interrupt
  Timer5.initialize(100000);
  Timer5.attachInterrupt(Timer5Handle);  
  Timer5.start();
  ///---

}

void loop() {
  while(1){
    Serial.println("loop...");
    delay(500);
  }
}
void Timer5Handle(){    
    timer5_started=millis();
    Serial.println("timer 5...");
    while(1){
      int a=0;
    }
}
void Timer1Handle(){    
    if(millis()-timer5_started>100000){
      Serial.println("restart...");
      Timer5.restart();
    }
}

当Timer5超时时,Interupt停止,我该如何重启? 当Timer5超时时,Interupt停止,我该如何重启?

1 个答案:

答案 0 :(得分:0)

好吧,我甚至不理解你在那个中断处理程序中想要做什么:

void Timer5Handle(){    
    timer5_started=millis();
    Serial.println("timer 5...");
    while(1){
      int a=0;
    }
}

但是,您的中断处理程序在实际IRS中被调用,因此其他所有内容都会停止,包括所有其他中断(包括millis计数和delays)。而且由于无限循环,它永远存在。中断处理程序应尽可能短,以确保其他人不会错过。