Функция "abs" и "SoftwareSerial".
- Войдите на сайт для отправки комментариев
Сб, 16/01/2021 - 08:46
[code] //ide 1.6.6 //#include <SoftwareSerial.h> //SoftwareSerial HC_12 (7, 6);// RX, TX float ftemp = 0; void setup() { Serial.begin(9600); // HC_12.begin(1200); } void loop() { ftemp = -1.9; Serial.print("a "); Serial.print(ftemp); Serial.print(" "); ftemp = abs(ftemp); Serial.print("abs = "); Serial.println(ftemp); delay(3000); // HC_12.print("qw"); } [/code]
Собственно вопрос. В таком варианте скетча функция "abs" возвращает 1.9, если раскоментировать стоки 3 и 4
"abs" возвращает 1.0 почему? как это обойти.
Замени 20ю строку на
if (ftemp<0.0) ftemp = -ftemp;
и тебе станет пофик на SoftwareSerial.
Замени 20ю строку на
if (ftemp<0.0) ftemp = -ftemp;
и тебе станет пофик на SoftwareSerial.
да так работает, а всё таки какая связь между софт сериалом и abs?
Никакой.
Никакой.
Понимаю что никакой, а почему влияет или это глюк IDE.
В программе глюков нет, она работает в точности так, как ее написал программист. А вот почему программист...
Почитали бы хоть учебник...
А конкретно , что там написано про abs(), все бы сразу прояснилось думаю.
или это глюк IDE.
Да, глюк. Но он не в том, что с софт-сериалом работает неправильно (у меня, кстати, правильно в 1.8.12) а в том, что без него правильно.
По уму не должно, т.к. abs по уму - целочисленная вещь. Но многие реализаторы делают её типо-независимой.
Писать правильно. Если у Вас переменная типа float, то для неё нужно использовать fabs - и будет счастье :-)
Всем спасибо. Ориентировался на это
Это где такие примеры интересные? Дайте ссылку почитать.
В файле Arduino.h есть определения
#define abs(x) ((x)>0?(x):-(x))
А в файле SoftwareSerial.h есть отмена этого определения
В файле Arduino.h есть определения
#define abs(x) ((x)>0?(x):-(x))
Во-во! Оно "типонезависимое" и это не то, чтобы нарушение, но мелкое хулиганство.
Но fabs - он специально для float/double, поэтому юзайте его и не будет никаких граблей.
В файле Arduino.h есть определения
#define abs(x) ((x)>0?(x):-(x))
Во-во! Оно "типонезависимое" и это не то, чтобы нарушение, но мелкое хулиганство.
Но fabs - он специально для float/double, поэтому юзайте его и не будет никаких граблей.
век живи век учись )))