aeroboy 发表于 2014-11-18 09:44:16

关于外部中断中使用延时的问题


如何在中断程序中实现延时功能呢?
像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);
}

aeroboy 发表于 2014-11-18 09:45:10

我是想用millis()来实现延时的

zoologist 发表于 2014-11-18 10:49:08

只能用循环,大致估算一个机器周期,然后换算为时间来试试了

你希望多精确?

aeroboy 发表于 2014-11-18 10:59:00

不需要太精确,大致差不多就行了。

i7456 发表于 2014-11-18 11:28:35

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]
查看完整版本: 关于外部中断中使用延时的问题