ESP8266 looping errror(ESP8266环路错误)
问题描述
我是NodeMCU ESP8266板的新手,并且一直在使用它,我对此代码中的问题感到有点困惑。代码在Arduino上运行,最初是为Arduino Uno编写的,但当我在ESP8266板上尝试它时,我得到了一个串行监视器错误?我认为这与我在底部循环的方式有关,但我不确定是否谢谢你的帮助。
const int MotionSense = D2;
const int MotionLed = D3;
const int NoMotionLed = D7;
int MotionState = 0;
int MotionCheck = 0;
int onTime = 0;
const unsigned long timerCounter = 100;
const unsigned long timer = 1000;
unsigned long prevTime = 0;
void setup() {
pinMode(MotionLed, OUTPUT);
pinMode(NoMotionLed, OUTPUT);
pinMode(MotionSense, INPUT);
Serial.begin(19200);
}
void loop() {
//while no motion stay off
MotionState = digitalRead(MotionSense);
while (MotionState == LOW) {
digitalWrite(MotionLed, LOW);
digitalWrite(NoMotionLed, HIGH);
MotionState = digitalRead(MotionSense);
}
//turn back on
digitalWrite(MotionLed, HIGH);
digitalWrite(NoMotionLed, LOW);
onTime = 0;
while (onTime < timer) {
unsigned long currentTime = millis();
if ((currentTime - prevTime) >= (timerCounter)) {
MotionState = digitalRead(MotionSense);
if (MotionState == HIGH){
onTime = 0;
} else {
onTime +=1;
}
Serial.println(onTime);
prevTime = millis();
}
}
推荐答案
您在loop
内的while
循环会使基本的后台函数匮乏。在该循环内添加yield()
,将控制权暂时交回基础框架。
while (onTime < timer) {
yield(); // Do (almost) nothing -- yield to allow ESP8266 background functions
...
}
https://stackoverflow.com/a/34498165/131929
有一些很好的解释ESP8266在后台运行许多实用程序功能--保持WiFi连接、管理TCP/IP堆栈以及执行其他任务。阻止这些功能运行可能会导致ESP8266崩溃并重置自身。为了避免这些神秘的重置,请避免在你的草图中出现长而阻塞的循环。
来源:https://learn.sparkfun.com/tutorials/esp8266-thing-hookup-guide/using-the-arduino-addon
这篇关于ESP8266环路错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:ESP8266环路错误


基础教程推荐
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 常量变量在标题中不起作用 2021-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01