Вывод float на символьно-цифровой экран 1602
- Войдите на сайт для отправки комментариев
Пнд, 05/01/2015 - 01:15
Возникла небольшая проблема - не понял пока в чём дело.
Объявлен массив, по прерыванию прибавляется к каждому элементу определённое число (около 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, реальной ардуины нету на данный момент под рукой.
умнож на 10. получится просто int или long. потом делишь на 10, ставишь "," ставишь остаток от деления на 10
и float вообще получается не нужно
Вроде как с выводом float-чисел проблем не наблюдается, проблема в суммировании.
Попробуй так
Если проблема в сложении выведите tmp_km, может его значение в определённый момент обнуляется или уменьшается настолько, что его значение мало. Раз уж скрывает весь текст, то пробуйте.
tmp_km одновременно прибавляется к четырём значениям, все их можно увидеть на экране. Значения увеличиваются раз в пол секунды - это видно на экране. Те переменные, кторые не достигли 8192, продолжают увеличиваться, а те, которые дошли до 8192 - замирают на этой отметке...
Может быть дело в том, что tmp_km становится ничтожно малым по сравнению с переменой к которой прибавляется и поэтому не оказывает никакого влияния на результат. Если я не ошибаюсь float так устроен, что чем больше его значение, тем меньше точность.
tmp_km одновременно прибавляется к четырём значениям, все их можно увидеть на экране. Значения увеличиваются раз в пол секунды - это видно на экране. Те переменные, кторые не достигли 8192, продолжают увеличиваться, а те, которые дошли до 8192 - замирают на этой отметке...
У меня на экране этого не видно. Ок, не буду мешать.