我不久前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
}