OLED 128x64 Свой шрифт

yct9
Offline
Зарегистрирован: 27.11.2015

Здравствуйте! Подскажите в чем проблема.

Хочу нарисовать свой шрифт.

Рисую цифру 5. 

 

В файле DefaultFonts.c добавляю:

fontdatatype Test[] PROGMEM =
{
0x18, 0x28, 0x35, 0x01,   //Высота //Ширина //№вASCII //Кол.символов
0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x80, 0x0F, 0x00, 0xF8, 0xFF, 0x03, 0x0E, 0x00, 0x38, 0xC0, 0x03, 0x0C, 0x00, 0x38, 0xC0, 0x03, 0x1C, 0x00, 0x38, 0xE0, 0x01, 0x1C, 0x00, 0x38, 0xE0, 0x01, 0x1C, 0x00, 0x38, 0xE0, 0x00, 0x1C, 0x00, 0x38, 0xE0, 0x00, 0x1E, 0x00, 0x38, 0xE0, 0x00, 0x1E, 0x00, 0x38, 0xE0, 0x00, 0x0E, 0x00, 0x38, 0xE0, 0x01, 0x0F, 0x00, 0x38, 0xC0, 0x01, 0x07, 0x00, 0x38, 0xC0, 0x83, 0x07, 0x00, 0x38, 0x80, 0xFF, 0x03, 0x00, 0x38, 0x00, 0xFF, 0x01, 0x00, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 5
};

Загружаю на arduino:

#include <OLED_I2C.h>

OLED myOLED(SDA, SCL, 8);
extern uint8_t Test[];

void setup() {}

void loop() {
  myOLED.begin(); 
  myOLED.clrScr();  
  myOLED.setFont(Test);
  myOLED.print("5", CENTER, 13);
  myOLED.update();
  delay (500);
}

Но получаю:

В чем может быть проблема? 

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Что то  не ясно как вы кодировали символ ?!

yct9
Offline
Зарегистрирован: 27.11.2015

Komandir пишет:

Что то  не ясно как вы кодировали символ ?!


С помощью программы GLCD Font Creator 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Явно ошибка в кодировке. Пробуйте вставить все FF например. Потом первый замените на FE. Так можно понять принцип кодирования.

Первые 24 кода 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,   0x38,  0x00,  0x00,  0x00

yct9
Offline
Зарегистрирован: 27.11.2015

Komandir пишет:

Явно ошибка в кодировке. Пробуйте вставить все FF например. Потом первый замените на FE. Так можно понять принцип кодирования.

Первые 24 кода 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,  0x38,   0x38,  0x00,  0x00,  0x00

Как придти к этому значению 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Так чтобы понять в чем косяк - можно и самому коды описать. Это же не сложно. 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

5 строк по 24 символа. Каждый символ это столбик из 8 точек записанный в двоичном виде (верхняя точка - младший бит)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Так начни с меньшего массива, оно и понятнее будет. 

nik182
Offline
Зарегистрирован: 04.05.2015

Почему тогда первый байт отличен от нуля? На вашем рисунке 0х00 а  в фонте 0х15 - откуда ошибка ? И запятая в конце фонта?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Так я и говорю что GLCD Font Creator что то другое нарисовал - для другого типа дисплеев или типа того.

P.S. вот  ТУТ вроде куча готовых шрифтов ...