ESP8266 looping errror(ESP8266环路错误)
本文介绍了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环路错误
猜你喜欢
- 使用 __stdcall & 调用 DLLVS2013 中的 GetProcAddress() 2021-01-01
- GDB 不显示函数名 2022-01-01
- 将函数的返回值分配给引用 C++? 2022-01-01
- 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值 2021-01-01
- XML Schema 到 C++ 类 2022-01-01
- DoEvents 等效于 C++? 2021-01-01
- 将 hdc 内容复制到位图 2022-09-04
- 哪个更快:if (bool) 或 if(int)? 2022-01-01
- 如何提取 __VA_ARGS__? 2022-01-01
- OpenGL 对象的 RAII 包装器 2021-01-01