Артефакты на oled 0.96

kaban4egg

✩✩✩✩✩✩✩
3 Апр 2024
4
0
Всем привет. Извеняюсь за качество фото. Изучаю arduino. Дисплей oled 0.96, датчик ds18b20. Библиотека дисплея с просторов интернета, библиотека ds18b20 alexguver. Столкнулся с проблемой в виде артефакта. Если температура двухзначная то все работает хорошо, с минусом пока не проверял, как только температура становится из одной цифры появляется артефакт. Как исправить? Можно это победить не меняя библиотек?
 

Вложения

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,416
978
58
Марий-Эл
Скорее на месте вывода новой цифры не затирается цифра, которая была при выводе 2 цифр.
Какой то мусор выкинуло из буфера.
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
@Геннадий П, может, я чего путаю. Пробел надо выводить после вывода значения, т.к. при уменьшении разрядности лишние знаки останутся в конце, а не в начале.
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
давно пора уже забыть это говнище и на TFT переходить.
да какая разница, проблема ТС от этого не решится. Большинство библиотек на ТФТ работают точно так же - старый текст не затирается перед выводом нового
 

kaban4egg

✩✩✩✩✩✩✩
3 Апр 2024
4
0
@Геннадий П,попробовал поставить пробел перед выводом температуры, не помогло, появился ещё один артефакт, скорее всего библиотека не поддерживает((

@Эдуард Анисимов,может быть и так, этот подходил по размерам из того что было в магазине
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
попробовал поставить пробел перед выводом температуры, не помогло
Пробел надо выводить сразу после вывода значения, я уже писал почему. Впрочем, если библиотека дисплея кривая, то это так же не поможет.
 

kaban4egg

✩✩✩✩✩✩✩
3 Апр 2024
4
0
@PiratFox,ну я примерно так и понял, сейчас пробую с др библиотекой
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
если библиотека дисплея кривая, то это так же не поможет.
Причем тут кривая библиотека?
У графических фонтов в формате Адафруит нет фона, они прозрачные. А это значит, что вывод пробела ничего не затирает.


@kaban4egg, вам надо перед выводом новых данных рисовать поверх старого текста прямоугольник цвета фона.
Как на бумаге "мазилкой" при исправлении ошибок пользуются - знаете? Тут принцип тот же.
 
  • Лойс +1
Реакции: kaban4egg

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
Причем тут кривая библиотека?
Вот при том. Новые символы не затирают предыдущие или затирают, но как-то выборочно. В итоге, чтобы затереть старую информацию нужно принимать какие-то дополнительные меры. Это и есть кривизна. Только не надо тут демагогии на предмет того, что это не баг, а фича.
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
3,066
914

@PiratFox, прежде чем спорить, посмотрите разницу между прозрачными шрифтами и с фоном. В современных дисплеях шрифтов с фоном практически нет.
А раз шрифт прозрачный - то все что было напечатано на этом месте прежде - видно.

Проблема с артефактом возникает при смене шрифта, на маленьком шрифте все работает, на среднем артефакт.
Самый маленький шрифт - с фоном, он для тех кто живет во временах CGA дисплеев, как предыдущий оратор:)
Все остальные шрифты прозрачные.
Использовать прямоугольник надо всегда, а не только на однобуквенных или многобуквенных текстах
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,416
978
58
Марий-Эл
@bort707, У адафруита, если использовать стандартный шрифт (glcdfont.c), то символ затирается. Но для этого нужно конкретно указать цвет фона под символом и цвет самого символа командой
C++:
setTextColor(uint16_t c, uint16_t bg)
 

kaban4egg

✩✩✩✩✩✩✩
3 Апр 2024
4
0
Попробовал др библиотеку, получил тот же результат. Но артефакты победил заменой команды получения температуры с датчика getTemp() [float] поменял на getTempInt() [int]. Тему считаю закрытой, всем спасибо.
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
артефакты победил заменой команды получения температуры с датчика getTemp() [float] поменял на getTempInt() [int].
Интересно, как это связано с перезаписью старых значений на экране? Или проблема описана неверно?