Отображение символов в виде растровых изображений
Я прибегнул к созданию растровых изображений для каждого числа и нескольких букв для 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