Arduino Polska Forum

Pełna wersja: Wykonanie pętli for resetuje ESP
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Hej.
Pracująć nad pewnym projektem natknąłem na taki oto problem.

W funkcji setup chciałbym aby pewien kod wykonywał się w pętli przez określoną ilość sekund.
Do tego celu posłużyła mi pętla for oraz odczyt aktualnego czasu za pomocą komendy millis()

Niestety, ale za każdym razem kiedy pętla dochodzi do końca, ESP resetuje się:

Kod:
void setup() {
  Serial.begin(115200);

  int a = millis();
  for (int i = millis() - a; i <= 2400; i = millis() - a) {
    Serial.println(i);
  }
}

void loop() {
}

A oto odczyt z portu szeregowego:

Kod:
2397
2397
2398
2
Soft WDT reset

>>>stack>>>

ctx: cont
sp: 3ffffd00 end: 3fffffc0 offset: 01b0
3ffffeb0:  3fffff30 00000000 38393332 40202765 
3ffffec0:  3fffff2e feefeffe feefeffe feefeffe 
3ffffed0:  feefeffe feefeffe feefeffe 3ffee334 
3ffffee0:  40201134 3ffee334 3fffff2c 40201140 
3ffffef0:  40201134 3ffee334 3fffff2c 4020133d 
3fffff00:  00000032 0000000a 3fffff2b 40201409 
3fffff10:  402027fd feefeffe feefeffe feefeffe 
3fffff20:  3ffe8654 00000000 0a0d0069 38393332 
3fffff30:  3ffe8600 00000000 7957002e 40202765 
3fffff40:  00000009 21f24679 ffffff00 3ffee39c 
3fffff50:  00000000 4bc6a7f0 0000193c 3ffee39c 
3fffff60:  3fffdad0 0000095e 3ffee334 40201467 
3fffff70:  3fffdad0 00000004 401001f6 e0000000 
3fffff80:  3fffdad0 00000fde 3ffee334 40201489 
3fffff90:  3fffdad0 00000fde 3ffee334 40201072 
3fffffa0:  feefeffe 00000000 3ffee35c 40201a4c 
3fffffb0:  feefeffe feefeffe 3ffe84e4 40100b8d 
<<<stack<<<

ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1392, room 16
tail 0
chksum 0xd0
csum 0xd0
v3d128e5c
~ld
Jak łatwo się domyślić po komunikacie "Soft WDT reset" zadziałał watchdog.
Poszukaj w google o tym jak działa i do czego służy watchdog na esp8266, jeden z pierwszych linków: https://www.sigmdel.ca/michel/program/es...gs_en.html
Dzięki bardzo za wskazówkę.
Jest tylko jedna informacja której nie udało mi się znaleźć, a która pomogłaby mi lepiej zrozumieć zagadnienie.

W jakich sytuacjach ESP czy Arduino resetuje WDT automatycznie, a kiedy muszę to zrobić ręcznie?
WDT ci wrzuca bo zablokowałeś WIFI nie możesz blokować długo ESP

Ewentualnie przy blokadzie musisz dorzucić delay by zajmował się Wifi.

for (int i = millis() - a; i <= 2400; i = millis() - a) {
Serial.println(i);
Delay(0);
}