倒计时Arduino草图的计时器

时间:2014-04-22 23:41:19

标签: c arduino arduino-ide

不久前我wrote an Arduino sketch,我正在尝试为草图添加功能。基本上我想要一个倒计时器,在30秒后关闭电磁阀切断阀。

1 个答案:

答案 0 :(得分:1)

你可以使用定时器和中断来做到这一点,但是需要一些更多的信息(哪个板,哪个处理器)。

注意:如果您使用的是arduino库(F_CPU),则已定义 #define F_CPU 20000000U

注2:您可能想要使用另一个计时器而不是TIMER0,因为它用于跟踪arduino上的时间

#define GMilliSecondPeriod F_CPU / 1000

unsigned int gNextOCR = 0;
volatile unsigned long gMillis = 0;
bool valveOpened = false;

// This interruption will be called every 1ms
ISR(TIMER2_COMPA_vect)
{
  if(valve_open){
    gMillis++;
    if(gMillis >= 30000){
      close_valve();
      gMillis = 0;
    }
  }  

  gNextOCR += GMilliSecondPeriod;
  OCR2A = gNextOCR >> 8; // smart way to handle millis, they will always be average of what they should be
}

// Just call this function within your setup
void setupTime(){
  TCCR2B |= _BV(CS02);
  TIMSK2 |= _BV(OCIE0A);

  sei(); // enable interupts
}