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

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Вс сен 10, 2017 15:32:28
Откуда: Крым

Сообщение dankr »

// Библиотеки
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <U8g2lib.h>
//#include "Calibri10.h"
#include "F:\ESP32_sketch\DS3231_Display_Zap_4_RTC\Calibri10.h"
#include <RTClib.h>

#define LCD_1_SCL 18
#define LCD_1_SI 32
#define LCD_1_CS 19
#define LCD_1_A0 16
#define LCD_1_RES 17
#define LCD_1_BL 4 // Подсветка через резистор 220 Ом

#define LCD_2_SCL 18
#define LCD_2_SI 32
#define LCD_2_CS 33
#define LCD_2_A0 16
#define LCD_2_RES 13
#define LCD_2_BL 4 // Подсветка через резистор 220 Ом

#define LCD_3_SCL 18
#define LCD_3_SI 32
#define LCD_3_CS 27
#define LCD_3_A0 16
#define LCD_3_RES 26
#define LCD_3_BL 4 // Подсветка через резистор 220 Ом

/***************************************************************************
Подбор шрифтов
****************************************************************************/
#define FONT_10x20 u8g2_font_10x20_t_cyrillic
#define FONT_9x15 u8g2_font_9x15_t_cyrillic
#define FONT_6x13 u8g2_font_6x13B_tf // Секунды..... эти
#define FONT_7x13 u8g2_font_7x13_m_symbols // Секунды
#define FONT_8x13 u8g2_font_8x13_t_cyrillic // Секунды
#define FONT_9x15 u8g2_font_haxrcorp4089_t_cyrillic // Месяц и День Недели. не поместилось пол буквы - к
#define FONT_9x15 u8g2_font_logisoso16_tr // Год. оптимально.
#define FONT_9x15 u8g2_font_fur35_tr // Число! fub на пиксель толще, но цифры неаккуратные.
#define FONT_9x15 u8g2_font_fur30_tf // Число
#define FONT_6x12 u8g2_font_logisoso32_tf // Число для числа слишком узкий шрифт
#define FONT_6x12 u8g2_font_inr33_mn // Число Х
#define FONT_6x12 u8g2_font_inr33_t_cyrillic // Число Х
#define FONT_6x12 u8g2_font_inb33_mf // Число перечёркнутый НОЛЬ Х
#define FONT_9x19 u8g2_font_logisoso28_tr // Часы. по возможности найти такие же узкие, но немного длиннее.
#define FONT_6x12 u8g2_font_logisoso22_tf // Часы.
#define FONT_9x18 u8g2_font_font_logisoso38_tf
#define FONT_9x17 u8g2_font_lubB14_tf // Точки
#define FONT_8x5 u8g2_font_Calibri10 // Месяц и День Недели. Вставлен My Shrift_Calibri10 ( 8 x 5)


RTC_DS3231 rtc;

// Объекты дисплея
U8G2_ST7565_ERC12864_F_4W_SW_SPI u8g2_1(U8G2_R3, LCD_1_SCL, LCD_1_SI, LCD_1_CS, LCD_1_A0, LCD_1_RES);
U8G2_ST7565_ERC12864_F_4W_SW_SPI u8g2_2(U8G2_R0, LCD_2_SCL, LCD_2_SI, LCD_2_CS, LCD_2_A0, LCD_2_RES);
U8G2_ST7565_ERC12864_F_4W_SW_SPI u8g2_3(U8G2_R3, LCD_3_SCL, LCD_3_SI, LCD_3_CS, LCD_3_A0, LCD_3_RES);

void setup()
{
delay(1000); // ждём завершение переходных процессов связанных с подачей питания.
Wire.begin(); // инициируем работу с аппаратной шиной I2C.
u8g2_1.begin(); // старт дисплея 1
u8g2_2.begin(); // старт дисплея 2
u8g2_3.begin(); // старт дисплея 3
rtc.begin(&Wire); // старт датчика ds3231

//rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // установка времени и даты последней компиляции
//rtc.adjust(DateTime(2024, 8, 12, 17, 45, 0)); // Год, Месяц, Число, Час, Мин, Сек.

{
u8g2_1.setContrast(25); //Контрастность 1
u8g2_1.enableUTF8Print(); // Вывод текста 1

u8g2_2.setContrast(25); //Контрастность 2
u8g2_2.enableUTF8Print(); // Вывод текста 2


u8g2_3.setContrast(25); //Контрастность 3
u8g2_3.enableUTF8Print(); // Вывод текста 3

u8g2_1.clearBuffer(); // очистка буфера 1
u8g2_2.clearBuffer(); // очистка буфера 2
u8g2_3.clearBuffer(); // очистка буфера 3

/*
if (! rtc.begin()) // инициализация DS32331
u8g2_2.setFont(u8g2_font_8x13_t_cyrillic); // установка размера шрифта датчика
u8g2_2.setCursor(0, 45); // установка курсора
u8g2_2.print("RTC ошибка"); // проверка, подключен ли модуль
while (1);
*/
delay(3000); //Задержка для загрузки системы 3 сек
}
}

void loop()
{

{
u8g2_1.clearBuffer(); // очистка буфера 1
u8g2_1.setFont(u8g2.setFont(Calibri10); // установка размера шрифта датчика
u8g2_1.setCursor(0, 45); // установка курсора
u8g2_1.print("ПОНЕДЕЛЬНИК");
u8g2_1.sendBuffer(); // вывод на экран
}

} код не чищенный, много для простоты закомментированно. Но, работает.
Последний раз редактировалось dankr Вт авг 13, 2024 16:36:28, всего редактировалось 2 раза.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3519
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Сообщение smacorp »

Martian, да я не помню - пользовался этой шляпой пару раз и давно, неудобная она.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Вс сен 10, 2017 15:32:28
Откуда: Крым

Сообщение dankr »

Выдал ошибку в строке ошибок. Там конкретно что-то именно со строкой Font
Друг Кота
Аватара пользователя
Сообщения: 3519
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Сообщение smacorp »

dankr, у Вас вообще нет u8g2, у Вас объекты u8g2_1, u8g2_2, u8g3_3. Вероятно ошибка где-то в подключаемых .h
Последний раз редактировалось smacorp Вт авг 13, 2024 16:35:34, всего редактировалось 4 раза.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Вс сен 10, 2017 15:32:28
Откуда: Крым

Сообщение dankr »

[uquote="smacorp",url="/forum/viewtopic.php?p=4614715#p4614715"]Вам сам компилятор подсказывает - переменная u8g2 не объявлена в прелах области видимости, может имелась ввиду переменная U8G2?

Измените регистр букв на верхний.[/uquote]
Компилятор подсказывает, что незадекларирована библиотека. Что-то с ним наверное. Не уверен, что правильно без ошибок создал шрифты.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Вс сен 10, 2017 15:32:28
Откуда: Крым

Сообщение dankr »

Чем и как?
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 40
Зарегистрирован: Пт авг 29, 2014 14:08:19

Сообщение mig958 »

Ну в общем я попробовал компилировать шрифт в U8G2 и в U8GLib - не работает. Формат шрифта другой.
Могу посоветовать русские шрифты: русские шрифты
или использовать библиотеку Adafruit_GFX ST7565_LCD
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Вс сен 10, 2017 15:32:28
Откуда: Крым

Сообщение dankr »

Буду пробовать. Деваться некуда. Попробую скинуть фото экрана если тут на сайте получится.

Добавлено after 9 minutes 6 seconds:
Да, скобки там не хватало. Вы совершенно правы. Но, ошибка осталась. Какая-то хрень всё равно осталась незадекларированной. А что за вторая ошибка? Увидел! Исправлю.


Жаль фото не получается выставить. Для наглядности.

Добавлено after 35 minutes 50 seconds:
""Могу посоветовать русские шрифты: русские шрифты
или использовать библиотеку Adafruit_GFX ""
В первом случае речь идёт о u8g. Во втором русским духом и не пахнет. Если я правильно понял.


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

Сообщение mig958 »

А во втором случае можно воспользоваться моей программой. :)) Она написана именно для Adafruit_GFX
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Вс сен 10, 2017 15:32:28
Откуда: Крым

Сообщение dankr »

Есть ещё другой вопрос не менее заковыристый. Как сделать мигающие разделительные точки в часах? Сейчас в сети гуляют четыре разновидности дисплеев и кодов: 7-ми сегментные светодиодные индикаторы, OLED, 2-х строчные и маленькие цветные. Под средние ЖК почти ничего нет. Варианты, которые мне попадались не являлись прямым аналогом под мой дисплей и библиотеку RTClib. Переделки под мои комплектующие не для моих знаний. Если у кого есть рабочий вариант мигающих точек на ЖК дисплее st7565 подбросьте. Если нужен будет мой скетч в районе часов - скину.


""можно воспользоваться моей программой... "" Тогда у меня просьба. Вы бы могли сделать мне 3 буквы :shock: Не волнуйтесь. Хорошие буквы. 8 х 5 заглавную Д, Ц (чтоб хвостик в 5 пикселей поместился ) и Ь (8 х 4). Мне надо освободить 3 пиксела. Самое главное, как их можно задействовать с другими буквами? Если это гемор, то вопрос закрыт.
Открыл глаза
Аватара пользователя
Сообщения: 40
Зарегистрирован: Пт авг 29, 2014 14:08:19

Сообщение mig958 »

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

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

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>

#define i2c_Address 0x3c //initialize with the I2C addr 0x3C Typically eBay OLED's

Adafruit_SH1106G display = Adafruit_SH1106G(128,64, &Wire, -1);

uint32_t tm;
uint8_t s;
uint8_t m;
uint8_t h;
bool dot;

void setup()   {
  display.begin(i2c_Address, true); // Address 0x3C default
  display.setTextColor(1);
  display.setTextSize(2);

}

void loop() {
  if (millis() - tm > 500) {  
		tm = millis();
    dot=!dot;
    if (dot){
		  if((++s)>59) {
        s=0;
        if((++m)>59) {
          m=0;
          if((++h)>23) h=0;
        }
      }
    }
  }
	DrawScreen();
}

void DrawScreen() {
  display.clearDisplay();
  display.setCursor(10, 10);
  if (h < 10) display.print(F("0"));
  display.print(h);
  if (dot) display.print(F(":"));
  else display.print(" ");
  if (m < 10) display.print(F("0"));
  display.print(m);
  display.print(F(" "));
  if (s < 10) display.print(F("0"));
  display.print(s);
  display.display();
}
Добавлено after 5 minutes 30 seconds:
По поводу 3 букв.
Если это шрифт совместимый с Adafruit_GFX вставте файл шрифта в сообщение и скажите что и как исправить. Я исправлю и верну Вам.
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Вс сен 10, 2017 15:32:28
Откуда: Крым

Сообщение dankr »

Вычитал, что есть две программы для создания шрифтов. Fony и BDFconv. Первая собственно рисовалка аналогичная программе автора, а вторая это конвертер для конвертации в необходимый формат. Так вот, с первой проблем нет. Можно действительно нарисовать нужный шрифт, а вот со второй есть маленькая проблема. Но, с большими последствиями. У нас она заблокирована. По крайней мере в Крыму. Остаётся совсем чуть-чуть и шрифт готов, но тут эта проблемка встревает... Попробуйте, может у кого получится. Было бы здорово. А может mig958 справится...
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Вс сен 10, 2017 15:32:28
Откуда: Крым

Сообщение dankr »

Чудо-сайт. Ничего не отправить ни переслать. MIG958 - вы хоть фото дисплея получили? Файл шрифтов никак не пересылается. :cry:


Пробовал две версии конвертера, ни одна не работает. А ваш файл рабочий? Пробовали?


Походу пора заканчивать с этой идеей. Сегодня 13-е число. Всё равно сегодня ничего путного не выйдет. Только людям голову заморочил. MIG958, как ваш код мигания перевести на мой дисплей и мою библиотеку u8g2? В этом виде она не пойдёт. И по поводу файла шрифтов если можете в личке дать почту. На неё скину. Раньше с этим сайтом таких проблем не было, теперь чтоб что-то отправить надо танец с бубнами учить. И то не гарантия.
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Вс сен 10, 2017 15:32:28
Откуда: Крым

Сообщение dankr »

Хостинг нашёл. А в тему как попасть? Чтоб фото попало в диалог.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1102
Зарегистрирован: Пт апр 09, 2010 16:06:38
Откуда: Тула

Сообщение Andrey_B »

[uquote="dankr",url="/forum/viewtopic.php?p=4614806#p4614806"]а вторая это конвертер для конвертации в необходимый формат.[/uquote]
Программа matrixFont обзавелась функцией импорта шрифта из исходника Си в произвольном формате. Для конвертации можно импортировать имеющийся шрифт, исправить что необходимо, и выгрузить в любом другом нужном формате в исходник.
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Вс сен 10, 2017 15:32:28
Откуда: Крым

Сообщение dankr »

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

Сообщение oleg71ru »

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

Сообщение mig958 »

Добрый день Олег.
Есть несколько вариантов вывода символов без мерцания:
1. Использовать индикаторы OLED. В них это обусловлено принципом работы - горят только те светодиоды которые в 1.
2. Использовать буферизацию экрана. Это поддерживается некоторыми графическими библиотеками, например U8GLib. В них сначала в ОЗУ полностью "рисуется" экран, а затем происходит почти мгновенная смена экрана.
3. Использовать специальные шрифты. Например в библиотеке Adafruit GFX шрифт по умолчанию (glcdfont.c) полностью затирает предыдущее изображение и экран не мерцает. Возможно его масштабирование.
4. Формирование символов с помощью графических примитивов. (треугольников, прямоугольников итд).
5. В цветных дисплеях для больших символов цифр можно применить семисигментный шрифт. И сначала на нужном знакоместе печатать черным или серым цифру 8, а затем другим цветом нужную.
6. Почти тоже самое но стирать нужное знакоместо заливкой.
Возможно есть еще какие то варианты.
Кстати вышла новая версия Редактора шрифтов Adafruit GFX 2.0
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Пт окт 02, 2020 17:57:01

Сообщение oleg71ru »

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

Сообщение mig958 »

Вы даете слишком мало информации. Что Вы пробовали заливкой? Я говорил что заливать нужно только один символ, тот который будет меняться на другой, тогда будет незаметно.
Если Вы расскажите подробней что делаете, то смогу что то посоветовать что то более конкретно. Во вложении несколько Семисегментных шрифтов разного размера. Там только цифры и точка!
Вложения
Font.zip
Семисенментные шрифты
(3.63 КБ) 146 скачиваний
Ответить

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