Если-бы Вы хотели, или указали сразу диапазон получаемых значений с АЦП и желаемую точность отображаемых значений на дисплее, то можно добиться реального выиграша в плане использования ресурсов и скорости выполнения алгоритма. Дело в том, что АВР-ки в принципе не умеют выполнять мат.операции деления и умножения (на уровне железа). И выполняют их почти как дети во втором класе методом сложения (утрирую для лучшего понимания).
А мы ещё заставляем их работать с типом приблизительных числовых данных с экспоненциальным представлением (
Число с плавающей запятой состоит из 4-х частей, которые и обрабатываются отдельно). По другому говорят число одинарной точности. Цитирую "...
Следует иметь ввиду, что числа с плавающей точкой не являются точными, что может приводить к неожиданным результатам при их сравнении. Например, 6.0 / 3.0 может не равняться 2.0. ..."
Есть очень простой и легковесный прием – замена деления больших чисел на битовый сдвиг(выполняется за пару тактов) . В данном случае Ваши данные (unsigned long) с АЦП можно сдвинуть вправо
(смотреть >>) на 8-ь знаков (бинарное представление), что эквивалентно делению на 255+1. Ваши операции – АЦП/100/2,019 по проекту. А потом к результату методом простого сложения добавить поправку в 1-м канале 255 - 100*2,019 или во втором 255 - 100*1,1115 .
В результате можем получить бОльшую точность в заранее известном диапазоне веса (значений АЦП), чем при отбрасывании дробной части при преобразовании Float->String, работой с числами одинарной точности, и многократный прирост производительности за счёт использования в вычислениях констант и unsigned integer.
Надеюсь, Вы понимаете, что все эти программисткие «ругательства» использую для того, чтобы Вы, при желании, могли найти в Гугле (т.п.) подробные описание по ключевым или непонятным словам, для лучшего понимания.