极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22926|回复: 2

求助!使用外部中断改变led的亮、灭和闪烁

[复制链接]
发表于 2020-7-6 13:41:55 | 显示全部楼层 |阅读模式
使用按键外部中断改变变量来控制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);
}
}
回复

使用道具 举报

 楼主| 发表于 2020-7-7 08:22:27 | 显示全部楼层
问题解决了,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;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 20:59 , Processed in 0.037976 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表