Вывод float на символьно-цифровой экран 1602

Andrew-6676
Offline
Зарегистрирован: 05.01.2015

Возникла небольшая проблема - не понял пока в чём дело.

Объявлен массив, по прерыванию прибавляется к каждому элементу определённое число (около 0,02), и результат выводится на экран. Всё прекрасно работает, пока выводимое число не станет 8192,00 (2 в степени 13) - дальше оно перестает увеличиваться. В чём загвоздка? почему упирается в 8192? Предел float во много раз больше...

Код:

float km_data[4] = {18650.1, 12.6, 156.3, 8191.7};
...
 float tmp_km = (float)wheel_length/(float)magnet_count/1000000.0;
 km_data[3] += tmp_km;
...
 lcd.print(km_data[0]);

P.S. если число изначально было больше 8192, то оно выведется на экран как надо, но не увеличивается по прерыванию - остаётся неизменным.

P.S. Проверяю пока всё в Proteus 8, реальной ардуины нету на данный момент под рукой.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

умнож на 10. получится просто int или long. потом делишь на 10, ставишь "," ставишь остаток от деления на 10

и float вообще получается не нужно

Andrew-6676
Offline
Зарегистрирован: 05.01.2015

Вроде как с выводом float-чисел проблем не наблюдается, проблема в суммировании. 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Попробуй так

 float tmp_km = (float)((float)wheel_length/(float)magnet_count)/(float)1000000.0;
 km_data[3] = km_data[3]+tmp_km;
 
 
kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Если проблема в сложении выведите tmp_km, может его значение в определённый момент обнуляется или уменьшается настолько, что его значение мало. Раз уж скрывает весь текст, то пробуйте.

Andrew-6676
Offline
Зарегистрирован: 05.01.2015

tmp_km одновременно прибавляется к четырём значениям, все их можно увидеть на экране. Значения увеличиваются раз в пол секунды - это видно на экране. Те переменные, кторые не достигли 8192, продолжают увеличиваться, а те, которые дошли до 8192 - замирают на этой отметке... 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Может быть дело в том, что tmp_km становится ничтожно малым по сравнению с переменой к которой прибавляется и поэтому не оказывает никакого влияния на результат. Если я не ошибаюсь float так устроен, что чем больше его значение, тем меньше точность. 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Andrew-6676 пишет:

tmp_km одновременно прибавляется к четырём значениям, все их можно увидеть на экране. Значения увеличиваются раз в пол секунды - это видно на экране. Те переменные, кторые не достигли 8192, продолжают увеличиваться, а те, которые дошли до 8192 - замирают на этой отметке... 


У меня на экране этого не видно. Ок, не буду мешать.