hallo,
vorweg: ich weiß es nicht, vermute aber einen Bug.
Bekannter Hintergrund:
Oftmals verwenden die ESP8266 libs für mathematische Funktionen nicht die Arduino-Libs (die oftmals auch nicht C/++ math.h kompatibel sind), sondern stattdessen std C++ Definitionen.
Arduino hingegen verwendet êigene (verunstaltende) Makros, was vielen Nutzern (zu Recht) widerstrebt. Dies gilt u.a. auch für min, max, ceil, floor und round.
Dieser Teil bis hier hin erklärt zumindest, warum Nano und esp sich unterschiedlich verhalten.
ESP8266 sollte daher eigentlich std::abs() aus <cmath> verwenden, welches an sich eine "overoloaded" Funktion ist (bzw. ein template), und daher "sollte" eigentlich ein float als Argument auch wieder ein float zurück geben, während ein int wieder ein int zurückgibt. Scheint aber nicht zu funktionieren.
Wäre die esp-abs()-Funktion allerdings die ANSI-C-Funktion abs(), so würde sie IMMER ein int zurückgeben ( da diese ausschließlich in <stdlib.h> und hier ausschließlich auf int definiert ist): das könnte hier teilweise (bei < 0) der Fall sein, dürfte aber bei > 0 nicht anders passieren.
Daher meine Vermutung, es könnte ein Bug sein.
Workaround:
definiere deine eigene abs-"Funktion" als _abs()
#define _abs(x) x>=0?x:-x // eigentlich ein "verpöntes" Makro
Außerdem könntest du auch mal die alternative funktion fabs() verwenden, die auf float definiert ist.
Und melde dochmal diesen Fehler im esp-github-repo an - mal gucken, was die Spezialisten sagen!
https://github.com/esp8266/Arduino/issues
Lesezeichen