关于外部中断中使用延时的问题
如何在中断程序中实现延时功能呢?
像delay()等延时函数在中断程序中是不可用的。
我想实现一个点灯的延时程序,通过中断pin 2去控制pin 13点灯,当按下pin 2时灯亮一秒,然后灭掉。
pin 2被上拉,当按下按钮时,pin 2直接接地。
程序如下:无法实现我需要的功能int pin = 13;
void setup()
{
pinMode(pin,OUTPUT);
attachInterrupt(0,blink,FALLING);
}
void loop()
{
digitalWrite(pin,LOW);
}
void blink()
{
unsigned long time,time1;
time=millis();
for(time1=time;(time1-time)<100;time1=millis())
{
digitalWrite(pin,HIGH);
}
digitalWrite(pin,LOW);
} 我是想用millis()来实现延时的 只能用循环,大致估算一个机器周期,然后换算为时间来试试了
你希望多精确? 不需要太精确,大致差不多就行了。 int pin = 13;
int state = 0;
long previousMillis = 0;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, FALLING);
}
void loop()
{
previousMillis = millis();
if(!state) digitalWrite(pin, LOW);
while(state)
{
digitalWrite(pin, HIGH);
if((millis() - previousMillis) > 1000)
state = 0;
}
}
void blink()
{
state = 1;
}
页:
[1]