新时代工程师 2024-05-11 13:02 采纳率: 0%
浏览 3

关于合宙单片机中断发生的机制问题

提问关于外部中断的问题,芯片是合宙air001,编程环境使用arduino。编写一个程序,一个按键作为触发外部中断的工具,当按键按下后就会触发中断程序,有一个led灯会闪烁。现在问题是当按键一直被按下时,我的想法是中断程序会不断被唤起,并执行,但是实际效果是按键被按下后不松手,led要么闪烁一次,要么即使手松开了,也一直在闪烁,请问这是为什么?
代码如下:

#define leftButton PF_0
#define rightButton PB_6  //PB_6连接着boot按键
#define leftLight PB_1
#define rightLight PB_3 

void onChangeright();

void setup() {

pinMode(PB_0, OUTPUT);
pinMode(leftLight, OUTPUT);
pinMode(rightLight,OUTPUT);
pinMode(leftButton,INPUT_PULLDOWN);
pinMode(rightButton,INPUT_PULLDOWN);
attachInterrupt(digitalPinToInterrupt(rightButton), onChangeright, RISING);
Serial.begin(115200);
Serial.printf("Hello, Air001. \n");
}

void loop() {
static int count = 2;
if (count % 2 == 0) {
digitalWrite(PB_0, HIGH);
} else {
digitalWrite(PB_0, LOW);
}
delay(1000);
}
void onChangeright(){
if(digitalRead(rightButton) == HIGH){
digitalWrite(rightLight,HIGH);
delay(1000);
digitalWrite(rightLight,LOW);
delay(1000);
}
while(1){
if(digitalRead(rightButton) == HIGH){
break;
}
else{
digitalWrite(rightLight,HIGH);
delay(1000);
digitalWrite(rightLight,LOW);
delay(1000);
}
}
}

  • 写回答

5条回答 默认 最新

  • 专家-皆知 2024-05-11 13:02
    关注

    检测按键状态,循环中判断并处理按下的情况,避免持续中断。

    以上回复有部分引自免费微信小程序:皆我百晓生。 如问题尚未解决,还请稍待,如有疑问请回复进一步沟通。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月11日

悬赏问题

  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
  • ¥15 ADS时域 连续相位观察方法
  • ¥15 Opencv配置出错