新手求助 中断问题
用的 UNO 板子,进行中断学习实验。程序预期目标:主程序控制13脚自带灯一直闪烁,用2脚作为外部中断的控制引脚,中断后执行的程序是让12脚的LED以1秒的速度闪烁实际效果:13脚正常闪烁,并在中断后停止;
12灯中断后一直闪烁不停,并且速度比程序上的1秒要快的多。
希望达到效果:13正常1秒12中断后正常闪烁一次,然后自动停止,并程序回到主程序继续
程序:
int pbIn = 0; // 定义中断引脚为0,也就是D2引脚
int ledOut = 12; // 定义输出指示灯引脚
volatile int state = LOW;
void setup()
{
pinMode(13, OUTPUT); // 定义默认输入状态
// 置ledOut引脚为输出状态
pinMode(ledOut, OUTPUT);
//pinMode(ledOut, INPUT);
// 监视中断输入引脚的变化
attachInterrupt(pbIn, stateChange, RISING);
}
void loop()
{
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
}
void stateChange()
{
digitalWrite(12,HIGH);
delay(1000);
digitalWrite(12,LOW);
//state = !state;
//digitalWrite(ledOut, state);
} 本帖最后由 275891381 于 2017-5-5 20:05 编辑
中断里面不要用delay,主函数也少用
用这样的
if (millis() - previousMillis >= 1000)
{
previousMillis = millis();
} 275891381 发表于 2017-5-5 19:33
中断里面不要用delay,主函数也少用
用这样的
if (millis() - previousMillis >= 1000)
为什么呢?是不是程序延时不利于整个程序效率? 还有这个程序是什么意思呢麻烦仔细说两句谢谢 魔鬼1993 发表于 2017-5-5 19:36
为什么呢?是不是程序延时不利于整个程序效率? 还有这个程序是什么意思呢麻烦仔细说两句谢谢
中断会打断主函数的delay,delay不知道能不能重载,就是delay执行者,中断又执行一次 275891381 发表于 2017-5-5 19:39
中断会打断主函数的delay,delay不知道能不能重载,就是delay执行者,中断又执行一次
好滴 谢谢我研究研究
int pbIn = 0; // 定义中断引脚为0,也就是D2引脚
int ledOut = 12; // 定义输出指示灯引脚
volatile int state = LOW;
int mark = 0;
unsigned long NowTime = 0;
void setup()
{
pinMode(13, OUTPUT); // 定义默认输入状态
// 置ledOut引脚为输出状态
pinMode(ledOut, OUTPUT);
//pinMode(ledOut, INPUT);
// 监视中断输入引脚的变化
attachInterrupt(pbIn, stateChange, RISING);
}
void loop()
{
//一秒反转一次状态,不能用delay,会拖住下面12脚没法运行
if (millis() % 1000 == 0)
{
state = !state;
digitalWrite(13, state);
}
//当前时间比记住的大一秒则灭灯
if (millis() - NowTime > 1000)
{
digitalWrite(12, LOW);
}
}
void stateChange()
{
//中断亮灯并记住时间
NowTime = millis();
digitalWrite(12, HIGH);
}
:) 一个delay都不能用 Ansifa 发表于 2017-5-7 00:23
int pbIn = 0; // 定义中断引脚为0,也就是D2引脚
int ledOut = 12; ...
额谢谢我试试您的代码
页:
[1]