答案 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
}