Использование сторонних шрифтов

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Помогите, плиз, новичку в програмировании. Как подключить сторонний шрифт знаю, подцепил к скетчу, пытаюсь использовать так:

  tft.setFont(DotMatrix_M);

Библиотека SWTFT ругается и говорит "не помню такой команды". Что посоветуете?

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

есть в начале #include <Adafruit_GFX.h>?

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Да, эта библиотека подключается автоматически вместе с SWTFT. Может попробовать другую версию этой библиотеки?

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Насчёт автоматически не знаю, но пока не пропишу два инклуда GFX и SWTFT не пашет

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Adafruit_mfGFX надо такую именно мультифонт которая

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Сейчас поищу в инете, опробую.

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Скачал, установил, всё-равно ругается.

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Больше ни кто ни чего не посоветует?

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Знатоки, помогите...

axill
Offline
Зарегистрирован: 05.09.2011

Закопипасте сюда сообщение об ошибке без самодеятельности, в вашем пересказе можно только гадать о том какая у вас проблема

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Пишет так:

1'class SWTFT' has no member named 'setFont'
1Menu_TFT.ino: In function 'void setup()':
2Menu_TFT:50: error: 'class SWTFT' has no member named 'setFont'

 

 

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Вот собственно скетч:

nevkon
Offline
Зарегистрирован: 20.01.2015

По моему вполне четко компилятор указывает что в SWTFT нет функции/процедуры/команды setFont.

Проверьте документацию на библиотеку или посмотрите исходники. Очень может быть что ошиблись регистром/структурой при написании команды.

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Оно понятно, что нет в библиотеке SWTFT "void setFont()". Это единственная библиотека, работающая с драйвером моего дисплея. От-того и вопрос: "прикрутить" данную библиотеку к "UTFT", или как-то в самой SWTFT сделать процедуру подключения сторонних шрифтов.

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

"Выдрал" void setFont() с библиотеки UTFT, прописал соответственно вместо UTFT SWTFT, прописал её в SWTFT.h, компилирую, шибко ругается. Переименовал её в библиотеке void setFont8() - ошибка как и в первом посту: 'class SWTFT' has no member named 'setFont'.

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

А вот так ругается, когда в имени нет восьмерки:

D:\Arduino\arduino-1.0.6\libraries\SWTFT\SWTFT.cpp: In member function 'void SWTFT::setFont8(uint8_t*)':
D:\Arduino\arduino-1.0.6\libraries\SWTFT\SWTFT.cpp:702: error: 'cfont' was not declared in this scope
D:\Arduino\arduino-1.0.6\libraries\SWTFT\SWTFT.cpp:703: error: 'fontbyte' was not declared in this scope
D:\Arduino\arduino-1.0.6\libraries\SWTFT\SWTFT.cpp: At global scope:
D:\Arduino\arduino-1.0.6\libraries\SWTFT\SWTFT.cpp:709: error: no 'uint8_t* SWTFT::getFont()' member function declared in class 'SWTFT'
D:\Arduino\arduino-1.0.6\libraries\SWTFT\SWTFT.cpp:714: error: no 'uint8_t SWTFT::getFontXsize()' member function declared in class 'SWTFT'
D:\Arduino\arduino-1.0.6\libraries\SWTFT\SWTFT.cpp:719: error: no 'uint8_t SWTFT::getFontYsize()' member function declared in class 'SWTFT'
 
nevkon
Offline
Зарегистрирован: 20.01.2015

Похоже проще перенести из SWTFT в UTFT драйвер инициализации дисплея чем фукцию. У вас затребовали еще 2 переменных и 3 функции добавить.

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Каким образом это сделать? Я в языке С как свинья в апельсинах. Пробовал свои силы в Delphi 7, написал пару программ для работы, но Си для меня вооще "темный лес" только начал осваивать. Есть даже компилятор на Delphi для програмирования контроллеров, но и там синтаксис другой. Более упрощённый, что-ли. Помогите если не сложно...

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Не кому помочь моему "горю"?

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Вспомнился прочитанный где-то анекдот про форумы:

           Американский форум: задаёшь вопрос, в ответ: Расскажут, покажут, объяснят, научат...

           Еврейский форум: задаёшь вопрос, в ответ: "А шо это? "А зачем Вам это надо?"

           Русский форум: задаёшь вопрос, в ответ: "Дурак, зачем лезешь туда, где ни чего не понимаешь", "Найди ошибку сам"...

Действительно, а для чего форум? 

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

За крывайте тему.

vitalikost
Offline
Зарегистрирован: 28.11.2014

Немного порискав по библиотеке "Adafruit_GFX" я тоже не нашол "setFont". Только стандартный шрифт. :(

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

vitalikost пишет:

Немного порискав по библиотеке "Adafruit_GFX" я тоже не нашол "setFont". Только стандартный шрифт. :(

В этой библиотеке как-раз и есть "setFont", но всё разруливает, как я понял "SWTFT". Дудка и выдаёт ошибку, что в классе "SWTFT" нет функции "setFont"...

vitalikost
Offline
Зарегистрирован: 28.11.2014

Я лично нашол вот такие только:

1setCursor(int16_t x, int16_t y),
2setTextColor(uint16_t c),
3setTextColor(uint16_t c, uint16_t bg),
4setTextSize(uint8_t s),
5setTextWrap(boolean w),
6setRotation(uint8_t r);

В UTFT.h дествительно есть данный метод:

void setFont(uint8_t* font);
uint8_t* getFont();
uint8_t getFontXsize();
uint8_t getFontYsize();
 

Думаю все намного проще, в библиотеке "Adafruit_GFX.h" есть файл "glcdfont.c" - вот здесь шрифт и его форма, если немного подправить файл, то можно и другую форму задать шрифту. 

 

vitalikost
Offline
Зарегистрирован: 28.11.2014

Вот еще что-то нарыл, зараз нету особо времени копать, ну направление думаю указал 

http://mcuguru.ru/2013/03/utft-rus-1/

http://www.rinkydinkelectronics.com/r_fonts.php

vitalikost
Offline
Зарегистрирован: 28.11.2014

так же немного поколупал форум нашол как можно изменить текущий шрифт. 

http://arduino.ru/forum/obshchii/russkie-simvoly-lcd-5110#comment-84215

http://arduino.ru/forum/obshchii/russkie-simvoly-lcd-5110#comment-84255

 

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

vitalikost, спасибо за отклик. Но теперь я ещё больше ни чего не понимаю. Эти статьи и форум я читал. Сейчас провёл несколько экспериментов. Удалил из библиотеки "Adafruit_GFX.h" файл "glcdfont.c", всё-равно шрифт рисуется. Подставил файл "glcdfont_rus.c", появился русский шрифт, но всё такой-же убогий(как я понял, шрифт 5х7, для размера 1, 2 ещё пойдёт. А если брать больший размер - то это ужас). Так вот. Заменил "glcdfont_rus.c" на родной шрифт библиотеки. Русские символы всё-равно остались. Как так ?

Вот чего не могу понять. Удаляю файл шрифта - работает. Копирую другой шрифт - всё по прежнему...

vitalikost
Offline
Зарегистрирован: 28.11.2014

Немного поколупал библиотеку  "Adafruit_GFX.h" , нашел где нужно править, чтобы построить другой шрифт:

01//Высота шрифта - 8, Ширина - 5+1 отступ.
02 
03#if ARDUINO >= 100
04size_t Adafruit_GFX::write(uint8_t c) {
05#else
06void Adafruit_GFX::write(uint8_t c) {
07#endif
08  if (c == '\n') {
09    cursor_y += textsize*8;
10    cursor_x  = 0;
11  } else if (c == '\r') {
12    // skip em
13  } else {
14    drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize);
15    cursor_x += textsize*6;
16    if (wrap && (cursor_x > (_width - textsize*6))) {
17      cursor_y += textsize*8;
18      cursor_x = 0;
19    }
20  }
21#if ARDUINO >= 100
22  return 1;
23#endif
24}
25 
26// Draw a character
27void Adafruit_GFX::drawChar(int16_t x, int16_t y, unsigned char c,
28                uint16_t color, uint16_t bg, uint8_t size) {
29 
30  if((x >= _width)            || // Clip right
31     (y >= _height)           || // Clip bottom
32     ((x + 6 * size - 1) < 0) || // Clip left
33     ((y + 8 * size - 1) < 0))   // Clip top
34    return;
35 
36  for (int8_t i=0; i<6; i++ ) {
37    uint8_t line;
38    if (i == 5)
39      line = 0x0;
40    else
41      line = pgm_read_byte(font+(c*5)+i);
42    for (int8_t j = 0; j<8; j++) {
43      if (line & 0x1) {
44        if (size == 1) // default size
45          drawPixel(x+i, y+j, color);
46        else // big size
47          fillRect(x+(i*size), y+(j*size), size, size, color);
48        }
49      } else if (bg != color) {
50        if (size == 1) // default size
51          drawPixel(x+i, y+j, bg);
52        else // big size
53          fillRect(x+i*size, y+j*size, size, size, bg);
54        }
55      }
56      line >>= 1;
57    }
58  }
59}

таким способом вставить шрифт 16Х16 из  http://www.rinkydinkelectronics.com/r_fonts.php  запихнуть в "glcdfont_rus.c" - немного его под редактировав. заменить 8 и 6(5) на 16 и 17(16). в коде указанном выше. И все должно завестись. Ну это так теория. Которую еще нужно проверить.

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

Сейчас осмыслю и буду пробовать...

vitalikost
Offline
Зарегистрирован: 28.11.2014

Попытался прикрутить, фиг вам.... Почал дальше смотреть, и тут полный писец... В библиотеке "Adafruit_GFX.h" вывод по столбцам, а в «UTFT.h» шрифты закодированы в строках, тоесть вывод построчно. Так что надо будет функцию «drawChar»  переписать полностью. 

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

  Есть такая библиотека "Adafruit_mfGFX" которая предусматривает работу с 8 шрифтами(идут вместе с библиотекой). Но она довольно спецефична, написана для работы с монохромным дисплеем "Sharp". Так в ней как раз функция «drawChar» и написана для работы с этими шрифтами. Пробовал "подменить" в "Adafruit_GFX.cpp" на "Adafruit_mfGFX.cpp", соответственно изменив имя, и добавив эти шрифты, компилятор ругается на последнюю строку в "Adafruit_GFX.h":

1const FontDescriptor* fontDesc;

Не "нравится" ему звездочка и что константа без названия типа. А какой тип? Для меня - тупик...

vitalikost
Offline
Зарегистрирован: 28.11.2014

Направление понял, завтра постраюсь посмотреть. Ну на крайний случай с вторника. попробуем целиком подменить ""Adafruit_GFX"" на "Adafruit_mfGFX.cpp", посмотри что получиться. 

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

  Я, как раз, целиком и менял и .h файл и .cpp файл, не забыв конечно, поменять имена и убрав лишние #define.

vitalikost
Offline
Зарегистрирован: 28.11.2014

Собрал, даже работает графика. Ну текст не выводит. 

https://yadi.sk/d/XVLgae33f5REp

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015

  Ссылка "битая", не могу открыть...

vitalikost
Offline
Зарегистрирован: 28.11.2014
Dmn
Dmn аватар
Offline
Зарегистрирован: 29.11.2015

Порешали вопрос со шрифтами?

inkvi777
Offline
Зарегистрирован: 17.01.2016

Шрифт меняется. На латинице получилось по крайней мере. попробуй как указано в мануале на 20 странице 

https://learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf

sav liana
Offline
Зарегистрирован: 28.11.2016

Как я понял, вопрос остается открытым...

Есть ресурс: , но как им воспользоваться... скачал file.c типа например arial_bold.c

Как бы все расписано, но что с этим делать?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

"Что делать" определяется тем, что именно Вам нужно.

Если Вы не знаете, что делать со скачанным файлом, закачайте его обратно.

sav liana
Offline
Зарегистрирован: 28.11.2016

?

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Ничего не понял из вышеизложенного, к сожалению.

Могу только сказать что-таки - да: в "Adafruit" дела со шрифтами обстоят не лучшим образом и настолько, что пришлось даже купить другой дисплей, который работает под UTFT и со шрифтами там всё на порядок проще, что даже я кое-как разобрался.

Насчёт "прикрутить шрифт".

Не далее как сегодня вдруг возникла необходимость выводить некоторые значения более удобочитаемым шрифтом. Понятное дело что разговор идёт о совершенно другой библиотеке, да еще и под рукой нет ни IDE ни плат, но все же.

В "UTFT" внешние шрифты подключаются вот так:

1extern uint8_t BigFont[];

где "BigFont[]" это файл "BigFont.c", который я, кстати, так нигде и не нашёл почему-то. Ну а что бы подключить любой другой шрифт, достаточно скачать соответствующий файл шрифтов с расширением ".c", положить его в папку со скетчем и потом вызывать с помощью того же "setFont". Во всяком случае у меня этот метод работает...

Но я сейчас не об этом. Интересно вот что: во это "extern uint8_t" (приминительно к шрифтам) работает только для UTFT или для Adafruit тоже?

brigadir218
Offline
Зарегистрирован: 27.02.2022

привет, может кто поможет в вопросе? При установке сторонних шрифтов ,а именно при использовании цифр, когда меняются показания, то на экране начинается каша. старые показания не затираются. много читал старался где то найти информацию, но увы и ах , ничего про это нигде не сказано. изучал разные скетчи, подозреваю, что нужна какая то функция в скетче, но пока так и не нашел решение. Может кто подскажет где капать?