完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我正在尝试弄清楚 AttachedInterrupt 如何在 NodeMCU 上工作。
我发现的一切都告诉我这个代码没问题?! void setup() { Serial.begin(9600); pinMode(D4, INPUT); attachInterrupt(D4, doSth(), CHANGE); } void loop() { Serial.println(digitalRead(D4)); delay(100); } 无效 doSth() { Serial.println("Check!"); } |
|
相关推荐
1个回答
|
|
|
首先,让我们逐步分析您的代码,并找出可能的问题。
1. `Serial.begin(9600);`:这行代码初始化串行通信,设置波特率为9600。这是正确的。 2. `pinMode(D4, INPUT);`:这行代码将D4引脚设置为输入模式。这是正确的。 3. `attachInterrupt(D4, doSth(), CHANGE);`:这里有几个问题: - `doSth()`函数调用时应该使用`&`符号,表示函数的地址。应该改为`attachInterrupt(D4, &doSth, CHANGE);` - NodeMCU使用的是ESP8266芯片,它对中断的支持有限。在某些情况下,中断可能无法正常工作。 4. `void loop()`:这个循环函数每100毫秒读取D4引脚的状态,并将其打印到串行监视器。这是正确的。 5. `void doSth()`:这是一个空的函数,仅打印"Check!"。这是正确的,但您可能需要在其中添加一些逻辑。 根据上述分析,您应该修改代码如下: ```cpp void setup() { Serial.begin(9600); pinMode(D4, INPUT); attachInterrupt(D4, &doSth, CHANGE); } void loop() { Serial.println(digitalRead(D4)); delay(100); } void doSth() { Serial.println("Check!"); } ``` 然而,由于ESP8266对中断的支持有限,即使修改了代码,中断可能仍然无法正常工作。在这种情况下,您可以尝试使用轮询方法代替中断。以下是使用轮询的示例代码: ```cpp void setup() { Serial.begin(9600); pinMode(D4, INPUT); } void loop() { if (digitalRead(D4) == HIGH) { Serial.println("Check!"); } delay(100); } ``` 这种方法会降低代码的效率,但它可以在ESP8266上可靠地工作。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
470 浏览 0 评论
991 浏览 0 评论
1709 浏览 0 评论
请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗
1368 浏览 1 评论
1254 浏览 1 评论
为blufi_device设置自定义名称,但是无法修改,为什么?
1288浏览 4评论
请问ESP32-S2-WROOM怎么获得ESP32-S2外接FLASH的唯一序列号?
943浏览 3评论
2385浏览 3评论
ESP-IDF的VScode插件的build按钮点击会报错的原因?
2572浏览 3评论
ESP-Jumpstart例程中第5个工程:5_cloud连接报错是哪里的问题?
1071浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-13 12:26 , Processed in 0.530081 second(s), Total 42, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
405
