Как сделать собственный символ на ЖК-дисплее TFT? (128x128)

В настоящее время я использую библиотеку ucglib. Я новичок в arduino и хочу просто отобразить ЖК-смайлик, который я сделал с помощью генератора байтов. У меня все еще есть кое-что из оригинального шрифта «привет мир», но мне любопытно, как заставить моего персонажа работать.

Я хочу сделать разные смайлики разных цветов, но не знаю, как это сделать, поскольку каждое руководство находится на ЖК-дисплее 16x2, а не на tft-формате. У меня есть Arduino Nano, которая просто подключена к этому ЖК-дисплею. Я собираюсь заставить нажатие кнопок менять смайлик после того, как разберусь, как на самом деле вставить в него смайлик. Надеюсь, кто-нибудь сможет помочь.

 * LED =   3.3V
 * SCK =   13
 * SDA =   11
 * A0 =    8
 * RESET = 9
 * CS =    10
 * GND =   GND
 * VCC =   5V

    #include "Ucglib.h"  // Включаем библиотеку Ucglib для управления дисплеем


// Создаем дисплей и определяем пины:
Ucglib_ST7735_18x128x160_HWSPI ucg(8, 10, 9);






int smiley = byte customChar[] = {
  B00000,
  B01010,
  B01010,
  B00000,
  B10001,
  B10001,
  B11111,
  B00000
};  






void setup(void)  // Начало установки
{

  //ucg.begin(UCG_FONT_MODE_TRANSPARENT); // Он не перезаписывает фон, так что это беспорядок для текста, который меняется
  ucg.begin(UCG_FONT_MODE_SOLID);  // Он записывает фон для текста. Это рекомендуемый вариант

  ucg.clearScreen();  // Очистить экран

  ucg.setRotate180();  // Введите 90, 180 или 270 или прокомментируйте, чтобы оставить значение по умолчанию


  ucg.setColor(0, 255, 255, 255);  // Установить цвет (0,R,G,B)
  ucg.setColor(1, 0, 0, 0);  // Установить цвет фона текста (1,R,G,B)
  ucg.setPrintPos(0,24);  // Установить позицию (х, у)
  ucg.print("Welcome");  // Печать текста или значения



  // Рисуем смайлик:
  ucg.setColor(0, 255, 255);  // Установить цвет (0,R,G,B)
  ucg.drawFrame(0, 58, 60, 30);  // Начать с верхнего левого пикселя (x,y,with,height)




void loop(void)  // Начало цикла
{

  Variable1++;  // Увеличиваем переменную на 1
  if(Variable1 > 150)  // Если Variable1 больше 150
  {
    Variable1 = 0;  // Установить переменную 1 в 0
  }



  // Преобразование Variable1 в строку, чтобы мы могли изменить выравнивание текста вправо:
  // Его также можно использовать для добавления или удаления десятичных чисел.
  char string[10];  // Создаем массив символов из 10 символов
  // Преобразование числа с плавающей запятой в строку:
  dtostrf(Variable1, 3, 0, string);  // (<переменная>,<количество цифр, которые мы собираемся использовать>,<количество десятичных цифр>,<имя строки>)







  // Мы собираемся вывести на дисплей все, что находится в динамике в цикле, чтобы постоянно обновлять:

  // Записываем на дисплей Variable1 с выравниванием текста по левому краю:
  ucg.setFont(ucg_font_inb16_mr);  // Установить шрифт
  ucg.setColor(0, 255, 255, 0);  // Установить цвет (0,R,G,B)
  ucg.setColor(1, 0, 0, 0);  // Установить цвет фона текста (1,R,G,B)
  ucg.setPrintPos(9,81);  // Установить позицию (х, у)
  ucg.print(Variable1);  // Печать текста или значения

  // Есть проблема, когда мы переходим, например, от 100 к 99, потому что он не записывает автоматически фон на
  // последнюю цифру больше не обновляем. Нам нужно проверить, сколько цифр и заполнить оставшееся место.
  if(Variable1 < 10)  // Если Variable1 меньше 10...
  {
    // Залейте другую цифру фоновым цветом:
    ucg.print(" ");
  }
  if(Variable1 < 100)  // Если Variable1 меньше 100...
  {
    // Залейте другую цифру фоновым цветом:
    ucg.print(" ");
  }





  // Выводим на дисплей строку с выравниванием текста по правому краю:
  ucg.setFont(ucg_font_inb16_mr);  // Установить шрифт
  ucg.setColor(0, 0, 255, 0);  // Установить цвет (0,R,G,B)
  ucg.setColor(1, 0, 0, 0);  // Установить цвет фона текста (1,R,G,B)
  ucg.setPrintPos(76,81);  // Установить позицию (х, у)
  ucg.print(string);  // Печать текста или значения






}  // Конец цикла

, 👍0


1 ответ


Лучший ответ:

1

Просто: нет.

Вам нужно создать "пользовательский символ" только на символьных дисплеях (где вы активно программируете новый символ во внутренний набор символов дисплея).

С графическим дисплеем нет "символа" - только графика. В графической библиотеке есть шрифты, которые затем используются для преобразования текста в графику.

Чтобы отобразить что-то, чего нет в выбранном шрифте, просто нарисуйте его. Это может быть растровая графика (примеры будут в выбранной вами графической библиотеке) или использование примитивов, таких как круги и линии.

,

ах, я вижу, мой плохой. Тогда я постараюсь найти его. Я предполагаю, что могу просто «печатать» :), и это будет отображаться на экране, хорошо?, @Ijustneedtopassprobs

Вы можете изменить шрифт, которым вы печатаете. Сделать собственный шрифт. Не знаю, как вы это сделаете с выбранной вами библиотекой. Там могут быть примеры и учебные пособия, а может и не быть..., @Majenko

Я более чем счастлив использовать другую библиотеку, эта мне показалась идеальной для того, что я хотел. Я думаю, что у них есть целый список шрифтов, поэтому я могу просто выбрать пиксельный и попробовать все, что в моих силах. Я знаю, что это другая тема, но если моя Arduino полностью отключена от макетной платы и подключена к ЖК-дисплею, могу ли я использовать кнопку на макетной плате и просто подключить к ней провод или лучше подключить Arduino Nano к сам макет, чтобы кнопки работали?, @Ijustneedtopassprobs

Не имеет значения., @Majenko

Спасибо Маженко. Если вы все еще здесь, на экране 128 x 128, какие оси y и x будут средними? Я пробовал несколько, но я думаю, что текст все еще за пределами экрана? Проблемы с этим, @Ijustneedtopassprobs

64x64 - это середина экрана 128x128., @Majenko

о это половина. Ха, должно быть, я идиот. Спасибо, вы сделали мой вечер намного легче! Я оставлю тебя в покое =). Еще раз спасибо, @Ijustneedtopassprobs