Отображение символов в виде растровых изображений
Я прибегнул к созданию растровых изображений для каждого числа и нескольких букв для Oled-модуля 128x64. Это было сделано для экономии памяти и обхода ограничений таких библиотек, как u8glib. Если бы у меня был Linux, я мог бы использовать предоставленные ими инструменты, чтобы исправить некоторые из них, но пока об этом не может быть и речи. Я хотел знать, есть ли простой способ сопоставить каждый символ с его растровым изображением, чтобы использовать функцию, похожую на XXX.print(); использоваться для анализа символов и автоматического отображения соответствующих растровых изображений. Это сделало бы мою жизнь намного проще! спасибо!
@OM222O, 👍0
Обсуждение1 ответ
Я бы разбил это на функции.
Сначала напишите функцию, которая принимает символ и пару координат, а затем рисует на экране растровое изображение, соответствующее этому символу, по заданным координатам.
Тогда вам нужна функция «следующего уровня». Вы просто передаете ему один символ, и он запоминает текущие координаты и использует их для вызова первой функции. Затем задача этой функции - переместить координаты в следующую позицию символа, готовую к следующему вызову.
Наконец, вам нужны функции внешнего уровня (или несколько внешних уровней), которые принимают разные типы данных (например, const char *
) и отправляют каждый символ по очереди второй функции выше.
Если бы вам нужно было создать класс, чтобы обернуть все это, вы могли бы наследовать класс Print
. Это означает, что вам просто нужно предоставить функцию size_t write(char)
, которая эквивалентна второй функции выше (конечно, первая функция вам все равно понадобится). Вам будут предоставлены оболочки для различных типов данных.
моя самая большая проблема сейчас в том, что я не могу использовать никакую другую структуру, кроме const uint8_t var[] PROGMEM = {}; для моих растровых изображений. Они будут изменены компилятором, как только я удалю строку PROGMEM. Кроме того, когда я это делаю, я не могу передать растровое изображение куда-либо (кроме ввода его вручную, что противоречит цели!). Как только я копирую его, даже с помощью memcopy_P, он изменяется при отображении! Я схожу с ума из-за этого!, @OM222O
Возможно, я мог бы написать огромный оператор случая, а не таблицу поиска, но это кажется ужасно расточительным и плохой практикой. Я экспериментировал с использованием структур, указателей и т. д., но мне так и не удалось ничего решить! кажется, оно проклято!, @OM222O
- Serial.print печатает, а lcd.print - нет.
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- Как отобразить символ º на ЖК-дисплее?
- Почему я не могу распечатать значения логических переменных (0 и 1) с помощью функции println?
- Путаница между SPI и I2C для SSD1306 OLED
- Потенциометр 10 кОм против резистора 10 кОм на ЖК-дисплее
- Не могу заставить 4 значный 7 сегментный дисплей показывать разные значения
- Сделать CS (chip select) для работаты в SPI (для и SD карты и OLED)
Пример: обработка шрифтов и символов для PCD8544. https://github.com/mikaelpatel/Arduino-LCD/blob/master/src/Driver/PCD8544.h#L304. Класс реализует виртуальную функцию-член Print::write() и повторно использует все функции-члены print()., @Mikael Patel