arduino - NodeMCU中断代码并非每次都执行
问题描述
当我按下按钮时,我想闪烁并点亮 2 秒钟。为此,我使用中断编写了这段代码。但它不会在每次上传代码时执行。欢迎任何建议。甚至serial.println("started")
不显示。也没有显示错误。
#define led_pin D1
#define int_pin D8
volatile bool led = false;
void ICACHE_RAM_ATTR ISR_func();
void setup() {
Serial.begin(9600);
Serial.println("started");
pinMode(int_pin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(int_pin), ISR_func, RISING);
}
void loop() {
if(led){
led_func();
}
}
void ISR_func(){
//Serial.println("interrupt detected");
led = true;
return;
}
void led_func(){
Serial.println("led");
digitalWrite(led_pin, HIGH);
delay(2000);
digitalWrite(led_pin, LOW);
delay(2000);
led = false;
return;
}
硬件:我使用按钮连接了 D8 和 GND 引脚,D1 连接到 LED,LED 再次连接到 nodemcu(ESP8266)的 GND。
〜ld
解决方案
首先,您不能Serial
在中断的 ISR 中使用函数,因为它使用了中断。其次,您的代码看起来不错,但我认为您的问题出在接线上。
在 NodeMCU 板中,微控制器的引脚不映射到板的引脚。例如,GPIO15 将映射到电路板的 D8 引脚。您可以在此处查看完整的引脚图。
#define led_pin D1
const byte int_pin = 15;
volatile bool led = false;
void ICACHE_RAM_ATTR ISR_func();
void setup()
{
Serial.begin(9600);
Serial.println("started");
pinMode(int_pin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(int_pin), ISR_func, RISING);
}
void loop()
{
if (led)
{
led_func();
led = false;
}
}
void ISR_func()
{
led = true;
}
void led_func()
{
Serial.println("led");
digitalWrite(led_pin, HIGH);
delay(2000);
digitalWrite(led_pin, LOW);
delay(2000);
}
推荐阅读
- python - pytest:断言测试没有输出
- python - Python NumPy 计算总和
- akka - 什么时候可以通过初始创建一个actor来重新排序初始消息?
- r - 如何根据列宽分配绘图图的宽度?
- javascript - 如何在画布的左上角以绝对坐标计算对象的未缩放和未旋转中心
- android - 如何在视图中添加快速数据膨胀与布局
- python - 如何从刷新令牌中获取访问令牌?刷新令牌会过期吗?
- google-apps-script - 在 Google Script 上使用 Mailapp 进行 OnEdit
- macos - 在 macOS 搜索结果中隐藏重复文件?
- botframework - Composer 中是否还有可用的示例机器人?