Как работает Serial.parseFloat();
- Войдите на сайт для отправки комментариев
Ср, 23/08/2017 - 13:44
Есть скеч
float fWord; boolean Sflag; //*************************************** SETUP **************************************************** void setup() { Serial.begin(9600); } //******************************************************************************************* void loop() { float iWord; if (Serial.available() > 0){ iWord = Serial.parseFloat(); Sflag = true;} if (Sflag && iWord > 0 && iWord < 50000001){ fWord = float(iWord)/1; Sflag = false; Serial.flush(); Serial.print("iWord = "); Serial.println(int(iWord)); Serial.print("fWord = "); Serial.println(fWord,2); Serial.println("------------------------"); } } //*******************************************************************************************
Вопрос почему iWord и fWord не равны?
Спасибо.
Откуда следует, что они не равны?
Залей скеч на уно и отправь несколько раз через порт трех значные, а потом 6-ти значные с дробями и посмотри что получиш.
у меня примерно такой ответ:
отправил 5555.88, получил ответ
Все рзобрался извините тупанул.
Залей скеч на уно и отправь несколько раз через порт трех значные, а потом 6-ти значные с дробями и посмотри что получиш.
Вот сейчас я всё брошу и кинусь заливать.
Проблема у Вас, вот Вы и заливайте, а сюда выкладывайте результат - посмотрим.
у меня примерно такой ответ:
Вот это надо было ещё в первом посте написать - уже бы ответ получили.
Всё у Вас работает правильно.
отправил 5555.88, получил ответ
iWord = 5555
fWord = 5555.88
Но Вы же iWord при печати к целому преобразовываете - вот дробная часть и отбросилась. Всё так и должно быть.
отправил в порт 49999.33 получил ответ
iWord = -15537
fWord = 49999.33
------------------------
Опять же, Вы же iWord при печати к целому преобразовываете, а число 49999 в целое не помещается, там может быть не больше, чем 32767. Вот оно и стало отрицатльеным. Всё правильно, так и должно быть.