You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino IDE下ATTiny85引脚2接地触发中断失效问题求助

问题解决方案

核心错误点

  • attachInterrupt() 第一个参数要求传入中断编号,而非物理引脚编号。你使用的ATTiny85仅有的外部中断INT0对应物理引脚2,因此该参数应填0,或使用digitalPinToInterrupt(interruptPin)宏自动转换,避免硬编码错误。
  • 中断服务函数(ISR)中修改的全局变量lastState未添加volatile修饰符,编译器会误认为该变量不会在主程序流程外被修改,进行过度优化后会导致ISR中对变量的修改无法生效。

修复后代码

#include "Arduino.h"

#define interruptPin 2
const int led = 3;
volatile bool lastState = 0; // 新增volatile修饰符

void setup() {
  pinMode(interruptPin, INPUT_PULLUP);
  // 改用digitalPinToInterrupt宏转换得到正确的中断编号
  attachInterrupt(digitalPinToInterrupt(interruptPin), pulseIsr, CHANGE);
  pinMode(led, OUTPUT);
}

void loop() {

}

void pulseIsr() {
    if (!lastState) {
      digitalWrite(led, HIGH);
      lastState = 1;
    }
    else {
      digitalWrite(led, LOW);
      lastState = 0;
    }
}

额外排查建议

  • 若修改代码后仍未生效,可检查接线是否存在虚接,确认引脚2接地时能稳定拉低电平,避免接触不良导致中断无法触发。
  • 如果使用机械按键接地,建议在按键两端并联100nF左右的滤波电容消抖,或调整代码逻辑:中断仅标记触发事件,将LED翻转逻辑放到主循环中执行,避免抖动导致多次触发中断。

内容的提问来源于stack exchange,提问作者Black Solis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:36:04