Эх, неудачно я задвинул пост под выходные... Это всё у меня
на работе. А на память я не помню.
Предположительно 1.0.5
Но точно буду знать в понедельник.
Так, так, вы навели меня на мысль...
Я упростил схему - убрал масштабирование.
Вот кусочек кода из loop(), который генерит FLProg:
Код: Выделить всё
if (1) {
_dispTempLength1 = (((String( (analogRead (0)), DEC)))).length();
if (_disp1oldLength > _dispTempLength1) {
_isNeedClearDisp1 = 1;
}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 - _dispTempLength1) / 2), 0);
_lcd1.print(((String( (analogRead (0)), DEC))));
} else {
...
}
Мы видим, что в каждом цикле аналоговый вход читается дважды:
- один раз чтобы определить длину строки и принять
решение о зачистке места;
- второй раз, чтобы её вывести.
И если между этими двумя чтениями длина строки изменится в большую сторону, то и случается сдвиг.
Ещё раз, проигрываем программу:
Потенциометр крутим вверх.
Цикл N
1. Прочитали первый раз строку. Строка "99". Её длина - 2.
2. Эта длина не меньше предыдущей, допустим "98". Решение о зачистке места не принимается.
3. Вычисляем начальную позицию курсора
{16-2}/2=7
4. Повторно читаем входную строку. Она уже "100".
5. Печатаем "100" с седьмой позиции. Занимаются позиции 7, 8 и 9.
Цикл N+1
1. Прочитали первый раз строку. Строка "110". Её длина - 3.
2. Эта длина не меньше предыдущей. Решение о зачистке места не принимается.
3. Вычисляем начальную позицию курсора
{16-3}/2=6
4. Повторно читаем входную строку. Пусть она по-прежнему "110".
5. Печатаем "110" с шестой позиции. Занимаются позиции 6, 7, 8.
А в девятой позиции остался '0' с предыдущего цикла!
Получаем картинку как на второй фотографии.
И он там останется на все последующие циклы, пока не уменьшится длина строки и будет принято решение о зачистке места. Или не произойдёт более
удачное увеличение длины строки.
Выводы пока делать не берусь. Надо обдумать.
Автор?
Добавлено (11.11.2016, 20:42)
---------------------------------------------
P.S. А на счёт версии IDE я обшибся. Это в системе
стоит 1.0.5. А в FLProg как у всех - 1.6.4. Это же виртуальная машина