Отображение символов в виде растровых изображений

display print

Я прибегнул к созданию растровых изображений для каждого числа и нескольких букв для Oled-модуля 128x64. Это было сделано для экономии памяти и обхода ограничений таких библиотек, как u8glib. Если бы у меня был Linux, я мог бы использовать предоставленные ими инструменты, чтобы исправить некоторые из них, но пока об этом не может быть и речи. Я хотел знать, есть ли простой способ сопоставить каждый символ с его растровым изображением, чтобы использовать функцию, похожую на XXX.print(); использоваться для анализа символов и автоматического отображения соответствующих растровых изображений. Это сделало бы мою жизнь намного проще! спасибо!

, 👍0

Обсуждение

Пример: обработка шрифтов и символов для PCD8544. https://github.com/mikaelpatel/Arduino-LCD/blob/master/src/Driver/PCD8544.h#L304. Класс реализует виртуальную функцию-член Print::write() и повторно использует все функции-члены print()., @Mikael Patel


1 ответ


1

Я бы разбил это на функции.

Сначала напишите функцию, которая принимает символ и пару координат, а затем рисует на экране растровое изображение, соответствующее этому символу, по заданным координатам.

Тогда вам нужна функция «следующего уровня». Вы просто передаете ему один символ, и он запоминает текущие координаты и использует их для вызова первой функции. Затем задача этой функции - переместить координаты в следующую позицию символа, готовую к следующему вызову.

Наконец, вам нужны функции внешнего уровня (или несколько внешних уровней), которые принимают разные типы данных (например, const char *) и отправляют каждый символ по очереди второй функции выше.

р>

Если бы вам нужно было создать класс, чтобы обернуть все это, вы могли бы наследовать класс Print. Это означает, что вам просто нужно предоставить функцию size_t write(char), которая эквивалентна второй функции выше (конечно, первая функция вам все равно понадобится). Вам будут предоставлены оболочки для различных типов данных.

,

моя самая большая проблема сейчас в том, что я не могу использовать никакую другую структуру, кроме const uint8_t var[] PROGMEM = {}; для моих растровых изображений. Они будут изменены компилятором, как только я удалю строку PROGMEM. Кроме того, когда я это делаю, я не могу передать растровое изображение куда-либо (кроме ввода его вручную, что противоречит цели!). Как только я копирую его, даже с помощью memcopy_P, он изменяется при отображении! Я схожу с ума из-за этого!, @OM222O

Возможно, я мог бы написать огромный оператор случая, а не таблицу поиска, но это кажется ужасно расточительным и плохой практикой. Я экспериментировал с использованием структур, указателей и т. д., но мне так и не удалось ничего решить! кажется, оно проклято!, @OM222O