求助!使用外部中断改变led的亮、灭和闪烁
使用按键外部中断改变变量来控制led的不同状态,正常来讲,每一次按键,flag的值会按顺序012012012……,但实际情况是有时会出现不按顺序的情况,特别是2~0的时候,请大神看看问题在哪?拜托!代码如下:#define buttonpin 2 //定义按键引脚、外部中断0
#define LEDpin 3 //定义led引脚
int flag = 0;
void setup()
{
Serial.begin(9600);
pinMode(buttonpin, INPUT_PULLUP); //内部上拉
pinMode(LEDpin, OUTPUT);
attachInterrupt(0, inter, FALLING); //外部中断,下降沿触发
}
void inter(){ //调用的中断函数
flag++;
delay(500);
if(flag==3){
flag=0;
}
}
void loop(){ //主程序
switch (flag){
case 0: digitalWrite(LEDpin, HIGH);Serial.println("0");break; //0,亮
case 1: digitalWrite(LEDpin, LOW);Serial.println("1");break; //1,灭
case 2: breath();Serial.println("2");break; //2,呼吸灯
default: Serial.println("error");
}
}
void breath(){ //呼吸灯
for (int a=0; a<=255;a++)
{
analogWrite(LEDpin,a);
delay(8);
}
for (int a=255; a>=0;a--)
{
analogWrite(LEDpin,a);
delay(8);
}
}
问题解决了,PO上程序,方便和我一样有该问题的查看。
#define buttonpin 2 //定义按键引脚、外部中断0
#define LEDpin 3 //定义led引脚
int flag = 0;
int k=0;
void setup()
{
Serial.begin(9600);
pinMode(buttonpin, INPUT_PULLUP); //内部上拉
pinMode(LEDpin, OUTPUT);
attachInterrupt(0, inter, FALLING); //外部中断,下降沿触发
}
void inter(){ //调用的中断函数
if(k<1){
flag++;
k=1;
}
if(flag==3){
flag=0;
}
}
void loop(){ //主程序
switch (flag){
case 0: digitalWrite(LEDpin, HIGH);k=0;Serial.println("0");break; //0,亮
case 1: digitalWrite(LEDpin, LOW);k=0;Serial.println("1");break; //1,灭
case 2: breath();Serial.println("2");break; //2,呼吸灯
default: Serial.println("error");
}
}
void breath(){ //呼吸灯
for (int a=0; a<=255;a++)
{
analogWrite(LEDpin,a);
delay(8);
}
for (int a=255; a>=0;a--)
{
analogWrite(LEDpin,a);
delay(8);
}
delay(500);
k=0;
}
页:
[1]