Функция "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, поэтому юзайте его и не будет никаких граблей.
век живи век учись )))