Как работает Serial.parseFloat();

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Есть скеч


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 не равны?

Спасибо.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Откуда следует, что они не равны? 

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Залей скеч на уно и отправь несколько раз через порт трех значные, а потом 6-ти значные с дробями и посмотри что получиш. 

у меня примерно такой ответ:

отправил 5555.88, получил ответ 

iWord = 5555
fWord = 5555.88
------------------------
 
отправил в порт 49999.33 получил ответ 
iWord = -15537
fWord = 49999.33
------------------------
ну и тд.
 
 
Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Все рзобрался извините тупанул.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dmti пишет:

Залей скеч на уно и отправь несколько раз через порт трех значные, а потом 6-ти значные с дробями и посмотри что получиш. 

Вот сейчас я всё брошу и кинусь заливать.

Проблема у Вас, вот Вы и заливайте, а сюда выкладывайте результат - посмотрим.

Dmti пишет:

у меня примерно такой ответ:

Вот это надо было ещё в первом посте написать - уже бы ответ получили.

Всё у Вас работает правильно.

Dmti пишет:

отправил 5555.88, получил ответ 

iWord = 5555
fWord = 5555.88

Но Вы же iWord при печати к целому преобразовываете - вот дробная часть и отбросилась. Всё так и должно быть.

Dmti пишет:

отправил в порт 49999.33 получил ответ 

iWord = -15537
fWord = 49999.33

------------------------

Опять же,  Вы же iWord при печати к целому преобразовываете, а число 49999 в целое не помещается, там может быть не больше, чем 32767. Вот оно и стало отрицатльеным. Всё правильно, так и должно быть.