Редактор шрифтов Adafruit_GFX

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
oleg71ru
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт окт 02, 2020 17:57:01

Re: Редактор шрифтов Adafruit_GFX

Сообщение oleg71ru »

если я правильно понял, сначала я должен строку разделить на отдельные цифры. Потом сравнивать цифры которая была и которая выводится, если цифра отличается, то ее затираем и выводим новую?
Аватара пользователя
mig958
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт авг 29, 2014 14:08:19

Re: Редактор шрифтов Adafruit_GFX

Сообщение mig958 »

Вы зря не рассказываете что Вы делаете (какой экран, какая информация выводится..), подсказать было бы намного проще.
Анализировать каждую цифру очень геморно.
Вот отрывок из программы индикатора блока питания. Она вообще не использует шрифты и мерцание отсутствует на любых экранах. Попробуйте ее проанализировать.

Код: Выделить всё

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735

int X[2][7][6] = { {
   { 21, 22, 22, 20, 18, 18 },  // 40x22 X координаты вершин треугольников цифр
   { 20, 22, 22, 21, 18, 18 },   { 20, 19, 3, 2, 5, 17 },
   { 1, 0, 0, 2, 4, 4 },   { 2, 0, 0, 1, 4, 4 },
   { 2, 3, 19, 20, 17, 5 }, { 5, 17, 19, 17, 5, 3 }},
   {{ 11, 12, 12, 11, 10, 10 },  // 22x12
   { 11, 12, 12, 11, 10, 10 },   { 10, 9, 3, 2, 3, 9 },
   { 1, 0, 0, 1, 2, 2 },   { 1, 0, 0, 1, 2, 2 },
   { 2, 3, 9, 10, 9, 3 },   { 2, 3, 9, 10, 9, 3 }} };
int Y[2][7][6] = { {
   { 2, 3, 17, 19, 17, 5 },      // 40x22 Y координаты вершин треугольников цифр
   { 21, 23, 37, 38, 35, 23 },   { 39, 40, 40, 39, 36, 36 },
   { 38, 37, 23, 21, 23, 35 }, { 19, 17, 3, 2, 5, 17 },
   { 1, 0, 0, 1, 4, 4 },   { 18, 18, 20, 22, 22, 20 }},
   {{ 2, 3, 9, 10, 9, 3 },         // 22x12
   { 12, 13, 19, 20, 19, 13 },   { 21, 22, 22, 21, 20, 20 },
   { 20, 19, 13, 12, 13, 19 },   { 10, 9, 3, 2, 3, 9 },
   { 1, 0, 0, 1, 2, 2 }, { 11, 10, 10, 11, 12, 12 }} };
   // Коды цифр 0..9 и пробел
int seg[11] = { 63, 3, 109, 103, 83, 118, 126, 35, 127, 119, 0 };

Adafruit_ST7735 tft = Adafruit_ST7735(34/*TFT_CS*/, 38/*TFT_DC*/, 39/*TFT_RST*/);

void setup(void) {
   tft.initR(INITR_GREENTAB);      // Init ST7735S chip, black tab
   tft.fillScreen(BLACK);
   tft.setTextColor(WHITE, BLACK);
   tft.drawLine(0, 142, 128, 142, GREY);
}

void loop() {
   if (millis() - timind > 1000) {
   izm();   // Измерение
   ind();   // Индикация
   timind += 1000;
}
//---------- Индикация ----------
static void ind(void) {
   PrintV(clc * 10, uo * 10);
   PrintA(clc);
   PrintP(clc, uo);
   PrintC(clc, uo);
   uo = clc;
}
//---------- Рисуем цифру ----------
static void digitDraw(int h, int x, int y, int d /*Цифра*/, unsigned int Color) {
   for (int s = 0; s < 7; s++) {  // Рисуем сегменты из треугольников
      int c = Color;
      if (!bitRead(seg[d], s)) c = BLACK;
      int x0 = x + X[h][s][0];      int y0 = y + Y[h][s][0];
      tft.fillTriangle(x0, y0, x + X[h][s][1], y + Y[h][s][1], x + X[h][s][2], y + Y[h][s][2], c);
      tft.fillTriangle(x0, y0, x + X[h][s][2], y + Y[h][s][2], x + X[h][s][3], y + Y[h][s][3], c);
      tft.fillTriangle(x0, y0, x + X[h][s][3], y + Y[h][s][3], x + X[h][s][4], y + Y[h][s][4], c);
      tft.fillTriangle(x0, y0, x + X[h][s][4], y + Y[h][s][4], x + X[h][s][5], y + Y[h][s][5], c);
   }
}
//---------- Индикация V ----------
static void PrintV(int u, int uo) {
   if (u >= 10000) {  // Если больше четырех знаков
      u /= 10;
      if (uo < 10000) {
         digitDraw(0, 45, 9, (u % 1000) / 100, BLACK);
         tft.fillCircle(33, 46, 3, 0);
      }
      digitDraw(0, 30, 9, (u % 1000) / 100, GREEN);
      tft.fillCircle(63, 46, 3, GREEN);
   }
   else {
      if (uo >= 10000) {
         digitDraw(0, 30, 9, (u % 1000) / 100, BLACK);
         tft.fillCircle(63, 46, 3, 0);
      }
      digitDraw(0, 45, 9, (u % 1000) / 100, GREEN);
      tft.fillCircle(33, 46, 3, GREEN);
   }
   int i = u % 1000;
   digitDraw(0, 0, 9, u / 1000, GREEN);
   i = u % 100;
   digitDraw(0, 75, 9, i / 10, GREEN);
   digitDraw(0, 105, 9, i % 10, GREEN);
}
//---------- Индикация A ----------
static void PrintA(unsigned int u) {
   digitDraw(0, 0, 63, u / 1000, CYAN);
   int i = u % 1000;
   digitDraw(0, 45, 63, i / 100, CYAN);
   i = u % 100;
   digitDraw(0, 75, 63, i / 10, CYAN);
   digitDraw(0, 105, 63, i % 10, CYAN);
   tft.fillCircle(33, 100, 3, CYAN);
}

Electronick
Родился
Сообщения: 4
Зарегистрирован: Пн авг 31, 2020 11:00:02

Re: Редактор шрифтов Adafruit_GFX

Сообщение Electronick »

Челом бью! Низчайший поклон!!!!! Спасибо! Потрясающий труд и полезный!!!!! КУда кидать донаты???
oleg71ru
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт окт 02, 2020 17:57:01

Re: Редактор шрифтов Adafruit_GFX

Сообщение oleg71ru »

А можешь скинуть, кусок кода там где выводил сегментные цифры?
Аватара пользователя
mig958
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт авг 29, 2014 14:08:19

Re: Редактор шрифтов Adafruit_GFX

Сообщение mig958 »

Я не понимаю что тебя интересует.
Конкретно какой процессор? Какой экран? Какую информацию выводить?(целые числа/вещественные, точность, сколько цифр, через шрифт или через рисование). У меня десятки программ и во всех разные методы вывода. Все зависит от задач. Например нужно выводить измеренное напряжение с АЦП. в диапазоне 0-23в с точностью 2 цифры после запятой на цветной ЖКИ ST7789 MK: LGT8F328, размер прямоугольника вывода: ~70x20 pixel. Еще и от графической библиотеки зависит!
oleg71ru
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт окт 02, 2020 17:57:01

Re: Редактор шрифтов Adafruit_GFX

Сообщение oleg71ru »

Дисплей ili9341 микроконтроллер atmega328 пока. Делаю БК для авто, пока вывожу напряжение питания, одна цифра после запятой , давление масла 2 цифры после запятой и температура двигателя, одна цифра после запятой. Все это четко работает на стандартном шрифте адафруит, но не очень красиво. Хочется что бы выглядело примерно так , как у тебя в статье и без мерцания в будущем может перейду на другой процессор и добавлю ещё датчиков. У меня тоже есть ST7789, возможно тоже на него перейду.
Аватара пользователя
mig958
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт авг 29, 2014 14:08:19

Re: Редактор шрифтов Adafruit_GFX

Сообщение mig958 »

Так как экран для этого микропроцессора слишком большой (не хватает быстродействия, да и шрифт будет прилично занимать память) без мерцания можно выводить только одним методом: треугольников.
По той же причине (дифициту памяти) желательно не использовать вещественные переменные. В аттаче работоспособный (реально проверенный) пример с приемлимыми параметрами.
Вложения
ILI9341.ZIP
Пример вывода 3х параметров
(6.11 КБ) 100 скачиваний
oleg71ru
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт окт 02, 2020 17:57:01

Re: Редактор шрифтов Adafruit_GFX

Сообщение oleg71ru »

Спасибо большое. Попробую разобраться.
Не могу только понять когда меняю под свою плату cs10, DC9, rst8
Экран не работает
oleg71ru
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт окт 02, 2020 17:57:01

Re: Редактор шрифтов Adafruit_GFX

Сообщение oleg71ru »

Почему-то плюсовую температуру выводит с минусом. Пока плюсовая все правильно показывает, когда перейдет в минус , а потом в плюс, минус не убирается
Последний раз редактировалось oleg71ru Пн июл 21, 2025 19:52:34, всего редактировалось 1 раз.
Аватара пользователя
mig958
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт авг 29, 2014 14:08:19

Re: Редактор шрифтов Adafruit_GFX

Сообщение mig958 »

Добавте после:
if (Td<0) { Td = abs(Td);
gfx->fillRect(x - 30, y+25, 20, 7, YELLOW);
}
строчку: else gfx->fillRect(x - 30, y+25, 20, 7, BLACK);
oleg71ru
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт окт 02, 2020 17:57:01

Re: Редактор шрифтов Adafruit_GFX

Сообщение oleg71ru »

Спасибо. Все работает.
Vic2024
Родился
Сообщения: 2
Зарегистрирован: Пн сен 30, 2024 17:24:10

Re: Редактор шрифтов Adafruit_GFX

Сообщение Vic2024 »

Спасибо, дорогой!!!
Просто и со вкусом.
Мою задачу для 10 "странных" символов 64х64 при наличии картинок для Adafruit_GFX/ ST7735S/ ESP32 решило на ура!
Есть тонкости, но где их нет? Кнопка там одна у меня в меню краем торчит (параметры шрифта), но это мелочи, не сразу нашел :))
Спасибо и удачи во всём.
[img][url=https://img.radiokot.ru/files/158057/medium/3xutku77k1.jpg][/img]
Аватара пользователя
mig958
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт авг 29, 2014 14:08:19

Re: Редактор шрифтов Adafruit_GFX

Сообщение mig958 »

Вышла новая версия. Скачать можно по адресу: https://github.com/gi958/AGFXFontEdit
firemen
Родился
Сообщения: 4
Зарегистрирован: Пт мар 09, 2018 21:18:18

Re: Редактор шрифтов Adafruit_GFX

Сообщение firemen »

Почему мой антивирус жрет ехе файл?
Ответить

Вернуться в «Arduino»