我不久前wrote an Arduino sketch,我正在尝试向草图添加功能。基本上,我希望倒数计时器在30秒后关闭电磁截止阀。

最佳答案

您可以使用计时器和中断来执行此操作,但是还需要更多信息(哪个板,哪个处理器)。

注意:如果您正在使用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
}

08-16 08:13