Использование сторонних шрифтов
- Войдите на сайт для отправки комментариев
Пнд, 23/02/2015 - 10:04
Помогите, плиз, новичку в програмировании. Как подключить сторонний шрифт знаю, подцепил к скетчу, пытаюсь использовать так:
tft.setFont(DotMatrix_M);
Библиотека SWTFT ругается и говорит "не помню такой команды". Что посоветуете?
есть в начале #include <Adafruit_GFX.h>?
Да, эта библиотека подключается автоматически вместе с SWTFT. Может попробовать другую версию этой библиотеки?
Насчёт автоматически не знаю, но пока не пропишу два инклуда GFX и SWTFT не пашет
Adafruit_mfGFX надо такую именно мультифонт которая
Сейчас поищу в инете, опробую.
Скачал, установил, всё-равно ругается.
Больше ни кто ни чего не посоветует?
Знатоки, помогите...
Закопипасте сюда сообщение об ошибке без самодеятельности, в вашем пересказе можно только гадать о том какая у вас проблема
Пишет так:
1
'class SWTFT'
has no member named
'setFont'
1
Menu_TFT.ino: In function
'void setup()'
:
2
Menu_TFT:50: error:
'class SWTFT'
has no member named
'setFont'
Вот собственно скетч:
01
#include <Adafruit_GFX.h>
02
#include <mega_24_shield.h>
03
#include <SWTFT.h>
04
05
extern
uint8_t DotMatrix_M[];
06
07
//Подключаю стандартные цвета
08
#define BLACK 0x0000
09
#define BLUE 0x001F
10
#define RED 0xF800
11
#define GREEN 0x07E0
12
#define CYAN 0x07FF
13
#define MAGENTA 0xF81F
14
#define YELLOW 0xFFE0
15
#define WHITE 0xFFFF
16
17
//Инициализация LCD
18
SWTFT tft;
19
20
//Подключение кнопок
21
int
lcd_key = 0;
22
int
adc_key_in = 0;
23
#define btnRIGHT 0
24
#define btnUP 1
25
#define btnDOWN 2
26
#define btnLEFT 3
27
#define btnSELECT 4
28
#define btnNONE 5
29
30
int
read_LCD_buttons()
31
{
32
adc_key_in = analogRead(0);
// Читаем что на кнопках
33
34
if
(adc_key_in > 1000)
return
btnNONE;
// Что выдают мои кнопки
35
if
adc_key
in
< 30)
return
btnRIGHT;
36
if
(adc_key_in < 150)
return
btnUP;
37
if
(adc_key_in < 370)
return
btnDOWN;
38
if
(adc_key_in < 550)
return
btnLEFT;
39
if
(adc_key_in < 820)
return
btnSELECT;
40
41
return
btnNONE;
42
}
43
44
void
setup
(
void
){
45
tft.reset();
46
tft.begin();
47
tft.fillScreen(BLACK);
48
tft.setCursor(20,20);
49
tft.setTextColor(WHITE);
50
tft.setFont(DotMatrix_M);
51
tft.println(
"Menu:"
);
52
tft.setTextSize(3);
53
tft.setCursor(20,80);
54
tft.println(
"Oscilloscop"
);
55
tft.setCursor(20,110);
56
tft.println(
"Temperatura"
);
57
tft.setCursor(20,140);
58
tft.println(
"Times"
);
59
}
60
61
void
loop
(
void
){
62
}
По моему вполне четко компилятор указывает что в SWTFT нет функции/процедуры/команды setFont.
Проверьте документацию на библиотеку или посмотрите исходники. Очень может быть что ошиблись регистром/структурой при написании команды.
Оно понятно, что нет в библиотеке SWTFT "void setFont()". Это единственная библиотека, работающая с драйвером моего дисплея. От-того и вопрос: "прикрутить" данную библиотеку к "UTFT", или как-то в самой SWTFT сделать процедуру подключения сторонних шрифтов.
"Выдрал" void setFont() с библиотеки UTFT, прописал соответственно вместо UTFT SWTFT, прописал её в SWTFT.h, компилирую, шибко ругается. Переименовал её в библиотеке void setFont8() - ошибка как и в первом посту:
'class SWTFT'
has no member named
'setFont'.
А вот так ругается, когда в имени нет восьмерки:
Похоже проще перенести из SWTFT в UTFT драйвер инициализации дисплея чем фукцию. У вас затребовали еще 2 переменных и 3 функции добавить.
Каким образом это сделать? Я в языке С как свинья в апельсинах. Пробовал свои силы в Delphi 7, написал пару программ для работы, но Си для меня вооще "темный лес" только начал осваивать. Есть даже компилятор на Delphi для програмирования контроллеров, но и там синтаксис другой. Более упрощённый, что-ли. Помогите если не сложно...
Не кому помочь моему "горю"?
Вспомнился прочитанный где-то анекдот про форумы:
Американский форум: задаёшь вопрос, в ответ: Расскажут, покажут, объяснят, научат...
Еврейский форум: задаёшь вопрос, в ответ: "А шо это? "А зачем Вам это надо?"
Русский форум: задаёшь вопрос, в ответ: "Дурак, зачем лезешь туда, где ни чего не понимаешь", "Найди ошибку сам"...
Действительно, а для чего форум?
За крывайте тему.
Немного порискав по библиотеке "Adafruit_GFX" я тоже не нашол "setFont". Только стандартный шрифт. :(
Немного порискав по библиотеке "Adafruit_GFX" я тоже не нашол "setFont". Только стандартный шрифт. :(
В этой библиотеке как-раз и есть "setFont", но всё разруливает, как я понял "SWTFT". Дудка и выдаёт ошибку, что в классе "SWTFT" нет функции "setFont"...
Я лично нашол вот такие только:
1
setCursor(int16_t x, int16_t y),
2
setTextColor(uint16_t c),
3
setTextColor(uint16_t c, uint16_t bg),
4
setTextSize(uint8_t s),
5
setTextWrap(boolean w),
6
setRotation(uint8_t r);
В UTFT.h дествительно есть данный метод:
Думаю все намного проще, в библиотеке "Adafruit_GFX.h" есть файл "glcdfont.c" - вот здесь шрифт и его форма, если немного подправить файл, то можно и другую форму задать шрифту.
Вот еще что-то нарыл, зараз нету особо времени копать, ну направление думаю указал
http://mcuguru.ru/2013/03/utft-rus-1/
http://www.rinkydinkelectronics.com/r_fonts.php
так же немного поколупал форум нашол как можно изменить текущий шрифт.
http://arduino.ru/forum/obshchii/russkie-simvoly-lcd-5110#comment-84215
http://arduino.ru/forum/obshchii/russkie-simvoly-lcd-5110#comment-84255
vitalikost, спасибо за отклик. Но теперь я ещё больше ни чего не понимаю. Эти статьи и форум я читал. Сейчас провёл несколько экспериментов. Удалил из библиотеки "Adafruit_GFX.h" файл "glcdfont.c", всё-равно шрифт рисуется. Подставил файл "glcdfont_rus.c", появился русский шрифт, но всё такой-же убогий(как я понял, шрифт 5х7, для размера 1, 2 ещё пойдёт. А если брать больший размер - то это ужас). Так вот. Заменил "glcdfont_rus.c" на родной шрифт библиотеки. Русские символы всё-равно остались. Как так ?
Вот чего не могу понять. Удаляю файл шрифта - работает. Копирую другой шрифт - всё по прежнему...
Немного поколупал библиотеку "Adafruit_GFX.h" , нашел где нужно править, чтобы построить другой шрифт:
01
//Высота шрифта - 8, Ширина - 5+1 отступ.
02
03
#if ARDUINO >= 100
04
size_t Adafruit_GFX::write(uint8_t c) {
05
#else
06
void
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
27
void
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). в коде указанном выше. И все должно завестись. Ну это так теория. Которую еще нужно проверить.
Сейчас осмыслю и буду пробовать...
Попытался прикрутить, фиг вам.... Почал дальше смотреть, и тут полный писец... В библиотеке "Adafruit_GFX.h" вывод по столбцам, а в «UTFT.h» шрифты закодированы в строках, тоесть вывод построчно. Так что надо будет функцию «drawChar» переписать полностью.
Есть такая библиотека "Adafruit_mfGFX" которая предусматривает работу с 8 шрифтами(идут вместе с библиотекой). Но она довольно спецефична, написана для работы с монохромным дисплеем "Sharp". Так в ней как раз функция «drawChar» и написана для работы с этими шрифтами. Пробовал "подменить" в "Adafruit_GFX.cpp" на "Adafruit_mfGFX.cpp", соответственно изменив имя, и добавив эти шрифты, компилятор ругается на последнюю строку в "Adafruit_GFX.h":
1
const
FontDescriptor* fontDesc;
Не "нравится" ему звездочка и что константа без названия типа. А какой тип? Для меня - тупик...
Направление понял, завтра постраюсь посмотреть. Ну на крайний случай с вторника. попробуем целиком подменить ""Adafruit_GFX"" на "Adafruit_mfGFX.cpp", посмотри что получиться.
Я, как раз, целиком и менял и .h файл и .cpp файл, не забыв конечно, поменять имена и убрав лишние #define.
Собрал, даже работает графика. Ну текст не выводит.
https://yadi.sk/d/XVLgae33f5REp
Ссылка "битая", не могу открыть...
https://yadi.sk/d/RNdgTlOef5TkY
Порешали вопрос со шрифтами?
Шрифт меняется. На латинице получилось по крайней мере. попробуй как указано в мануале на 20 странице
https://learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf
Как я понял, вопрос остается открытым...
Есть ресурс: , но как им воспользоваться... скачал file.c типа например arial_bold.c
Как бы все расписано, но что с этим делать?
"Что делать" определяется тем, что именно Вам нужно.
Если Вы не знаете, что делать со скачанным файлом, закачайте его обратно.
?
Ничего не понял из вышеизложенного, к сожалению.
Могу только сказать что-таки - да: в "Adafruit" дела со шрифтами обстоят не лучшим образом и настолько, что пришлось даже купить другой дисплей, который работает под UTFT и со шрифтами там всё на порядок проще, что даже я кое-как разобрался.
Насчёт "прикрутить шрифт".
Не далее как сегодня вдруг возникла необходимость выводить некоторые значения более удобочитаемым шрифтом. Понятное дело что разговор идёт о совершенно другой библиотеке, да еще и под рукой нет ни IDE ни плат, но все же.
В "UTFT" внешние шрифты подключаются вот так:
1
extern uint8_t BigFont[];
где "BigFont[]" это файл "BigFont.c", который я, кстати, так нигде и не нашёл почему-то. Ну а что бы подключить любой другой шрифт, достаточно скачать соответствующий файл шрифтов с расширением ".c", положить его в папку со скетчем и потом вызывать с помощью того же "setFont". Во всяком случае у меня этот метод работает...
Но я сейчас не об этом. Интересно вот что: во это "extern uint8_t" (приминительно к шрифтам) работает только для UTFT или для Adafruit тоже?
привет, может кто поможет в вопросе? При установке сторонних шрифтов ,а именно при использовании цифр, когда меняются показания, то на экране начинается каша. старые показания не затираются. много читал старался где то найти информацию, но увы и ах , ничего про это нигде не сказано. изучал разные скетчи, подозреваю, что нужна какая то функция в скетче, но пока так и не нашел решение. Может кто подскажет где капать?