Adding new Font to DMD libary

Hi,

With help of this video (https://www.youtube.com/watch?v=k5t7g0ehDJw&list=LL&index=8&t=830s and GLCD font creator, I'm trying to add new characters to font for my native language.

This is my original font file, made by GLCD:

//
// Created by GLCD_FC2_compatible on 10.08.2023
//
//   Font Name:  Verdana16_032_126
//   Orig. Name: Verdana
//
//   Start Char: 032 ' '
//   End Char:   126 '~'
//   # Chars:    95
//
//   Height:     16
//   Width:      10
//
//   Monospace:  False
//   Bold:       False
//   Italic:     False
//   Underline:  False
//   Strikeout:  False
//
//   Codesize:   1053
//
#include <inttypes.h>
#include <avr/pgmspace.h>

#ifndef _VERDANA_H_
#define _VERDANA_H_

#define VERDANA_WIDTH  10 
#define VERDANA_HEIGHT 16 

static const uint8_t Verdana16_032_126[] PROGMEM = {
	0x04, 0x20,  // size
	0x0a,  // width
	0x10,  // height
	0x20,  // first char
	0x5f,  // char count


	// char widths
	0x04, 0x01, 0x03, 0x07, 0x05, 0x0a, 0x07, 0x01, 0x03, 0x03, 0x05, 0x07, 0x02, 0x03, 0x01, 0x05,  
	0x05, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x02, 0x06, 0x07, 0x06, 0x04,  
	0x08, 0x06, 0x06, 0x07, 0x07, 0x05, 0x05, 0x07, 0x06, 0x03, 0x04, 0x06, 0x05, 0x07, 0x06, 0x07,  
	0x05, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x09, 0x06, 0x07, 0x06, 0x03, 0x05, 0x03, 0x07, 0x07,  
	0x02, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x05, 0x05, 0x01, 0x03, 0x05, 0x01, 0x09, 0x05, 0x05,  
	0x05, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x07, 0x05, 0x05, 0x04, 0x05, 0x01, 0x05, 0x07, 

	// font data
	0x00, 0x00, 0x00, 0x00,  
	0x00, 0x00, 0x00, 0x00,   // char (032) ' '

	0xf8,  
	0x05,   // char (033) '!'

	0x1c, 0x00, 0x1c,  
	0x00, 0x00, 0x00,   // char (034) '"'

	0x00, 0x20, 0xe0, 0x38, 0xe0, 0x38, 0x20,  
	0x01, 0x07, 0x01, 0x07, 0x01, 0x01, 0x00,   // char (035) '#'

	0x60, 0x90, 0xfc, 0x90, 0x10,  
	0x04, 0x04, 0x1f, 0x04, 0x03,   // char (036) '$'

	0x30, 0x48, 0x48, 0x30, 0x80, 0x60, 0x18, 0x80, 0x80, 0x00,  
	0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x03, 0x04, 0x04, 0x03,   // char (037) '%'

	0xb0, 0x48, 0x48, 0xb0, 0x00, 0xc0, 0x00,  
	0x03, 0x04, 0x04, 0x04, 0x03, 0x02, 0x04,   // char (038) '&'

	0x1c,  
	0x00,   // char (039) '''

	0xe0, 0x18, 0x04,  
	0x03, 0x0c, 0x10,   // char (040) '('

	0x04, 0x18, 0xe0,  
	0x10, 0x0c, 0x03,   // char (041) ')'

	0x28, 0x10, 0x7c, 0x10, 0x28,  
	0x00, 0x00, 0x00, 0x00, 0x00,   // char (042) '*'

	0x80, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80,  
	0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,   // char (043) '+'

	0x00, 0x00,  
	0x10, 0x0e,   // char (044) ','

	0x80, 0x80, 0x80,  
	0x00, 0x00, 0x00,   // char (045) '-'

	0x00,  
	0x06,   // char (046) '.'

	0x00, 0x00, 0xc0, 0x30, 0x0c,  
	0x0c, 0x03, 0x00, 0x00, 0x00,   // char (047) '/'

	0xf0, 0x08, 0x08, 0x08, 0xf0,  
	0x03, 0x04, 0x04, 0x04, 0x03,   // char (048) '0'

	0x10, 0x10, 0xf8, 0x00, 0x00,  
	0x04, 0x04, 0x07, 0x04, 0x04,   // char (049) '1'

	0x10, 0x08, 0x88, 0x48, 0x30,  
	0x06, 0x05, 0x04, 0x04, 0x04,   // char (050) '2'

	0x10, 0x08, 0x48, 0x48, 0xb0,  
	0x02, 0x04, 0x04, 0x04, 0x03,   // char (051) '3'

	0x80, 0x40, 0x20, 0x10, 0xf8, 0x00,  
	0x01, 0x01, 0x01, 0x01, 0x07, 0x01,   // char (052) '4'

	0x78, 0x48, 0x48, 0x48, 0x88,  
	0x02, 0x04, 0x04, 0x04, 0x03,   // char (053) '5'

	0xe0, 0x50, 0x48, 0x48, 0x80,  
	0x03, 0x04, 0x04, 0x04, 0x03,   // char (054) '6'

	0x08, 0x08, 0x88, 0x68, 0x18,  
	0x00, 0x06, 0x01, 0x00, 0x00,   // char (055) '7'

	0xb0, 0x48, 0x48, 0x48, 0xb0,  
	0x03, 0x04, 0x04, 0x04, 0x03,   // char (056) '8'

	0x70, 0x88, 0x88, 0x88, 0xf0,  
	0x00, 0x04, 0x04, 0x02, 0x01,   // char (057) '9'

	0x60,  
	0x06,   // char (058) ':'

	0x00, 0x60,  
	0x10, 0x0e,   // char (059) ';'

	0x80, 0x80, 0x40, 0x40, 0x20, 0x20,  
	0x00, 0x00, 0x01, 0x01, 0x02, 0x02,   // char (060) '<'

	0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  
	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,   // char (061) '='

	0x20, 0x20, 0x40, 0x40, 0x80, 0x80,  
	0x02, 0x02, 0x01, 0x01, 0x00, 0x00,   // char (062) '>'

	0x08, 0x88, 0x48, 0x30,  
	0x00, 0x05, 0x00, 0x00,   // char (063) '?'

	0xe0, 0x10, 0xc8, 0x28, 0x28, 0xe8, 0x08, 0xf0,  
	0x03, 0x04, 0x09, 0x0a, 0x0a, 0x09, 0x02, 0x01,   // char (064) '@'

	0x00, 0xe0, 0x18, 0x18, 0xe0, 0x00,  
	0x07, 0x01, 0x01, 0x01, 0x01, 0x07,   // char (065) 'A'

	0xf8, 0x48, 0x48, 0x48, 0x70, 0x80,  
	0x07, 0x04, 0x04, 0x04, 0x04, 0x03,   // char (066) 'B'

	0xe0, 0x10, 0x08, 0x08, 0x08, 0x08, 0x10,  
	0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02,   // char (067) 'C'

	0xf8, 0x08, 0x08, 0x08, 0x08, 0x10, 0xe0,  
	0x07, 0x04, 0x04, 0x04, 0x04, 0x02, 0x01,   // char (068) 'D'

	0xf8, 0x48, 0x48, 0x48, 0x48,  
	0x07, 0x04, 0x04, 0x04, 0x04,   // char (069) 'E'

	0xf8, 0x48, 0x48, 0x48, 0x08,  
	0x07, 0x00, 0x00, 0x00, 0x00,   // char (070) 'F'

	0xe0, 0x10, 0x08, 0x08, 0x88, 0x88, 0x90,  
	0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x03,   // char (071) 'G'

	0xf8, 0x40, 0x40, 0x40, 0x40, 0xf8,  
	0x07, 0x00, 0x00, 0x00, 0x00, 0x07,   // char (072) 'H'

	0x08, 0xf8, 0x08,  
	0x04, 0x07, 0x04,   // char (073) 'I'

	0x00, 0x08, 0x08, 0xf8,  
	0x04, 0x04, 0x04, 0x03,   // char (074) 'J'

	0xf8, 0x80, 0xc0, 0x20, 0x10, 0x08,  
	0x07, 0x00, 0x00, 0x01, 0x02, 0x04,   // char (075) 'K'

	0xf8, 0x00, 0x00, 0x00, 0x00,  
	0x07, 0x04, 0x04, 0x04, 0x04,   // char (076) 'L'

	0xf8, 0x18, 0x60, 0x80, 0x60, 0x18, 0xf8,  
	0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07,   // char (077) 'M'

	0xf8, 0x18, 0x60, 0x80, 0x00, 0xf8,  
	0x07, 0x00, 0x00, 0x01, 0x06, 0x07,   // char (078) 'N'

	0xe0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xe0,  
	0x01, 0x02, 0x04, 0x04, 0x04, 0x02, 0x01,   // char (079) 'O'

	0xf8, 0x88, 0x88, 0x88, 0x70,  
	0x07, 0x00, 0x00, 0x00, 0x00,   // char (080) 'P'

	0xe0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xe0,  
	0x01, 0x02, 0x04, 0x04, 0x0c, 0x12, 0x11,   // char (081) 'Q'

	0xf8, 0x88, 0x88, 0x88, 0x70, 0x00,  
	0x07, 0x00, 0x00, 0x01, 0x02, 0x04,   // char (082) 'R'

	0x30, 0x48, 0x48, 0x88, 0x88, 0x10,  
	0x02, 0x04, 0x04, 0x04, 0x04, 0x03,   // char (083) 'S'

	0x08, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x08,  
	0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,   // char (084) 'T'

	0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8,  
	0x03, 0x04, 0x04, 0x04, 0x04, 0x03,   // char (085) 'U'

	0x38, 0xc0, 0x00, 0x00, 0xc0, 0x38,  
	0x00, 0x01, 0x06, 0x06, 0x01, 0x00,   // char (086) 'V'

	0x18, 0xe0, 0x00, 0xe0, 0x18, 0xe0, 0x00, 0xe0, 0x18,  
	0x00, 0x01, 0x06, 0x01, 0x00, 0x01, 0x06, 0x01, 0x00,   // char (087) 'W'

	0x18, 0x20, 0xc0, 0xc0, 0x20, 0x18,  
	0x06, 0x01, 0x00, 0x00, 0x01, 0x06,   // char (088) 'X'

	0x08, 0x10, 0x20, 0xc0, 0x20, 0x10, 0x08,  
	0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,   // char (089) 'Y'

	0x08, 0x08, 0x88, 0x48, 0x28, 0x18,  
	0x06, 0x05, 0x04, 0x04, 0x04, 0x04,   // char (090) 'Z'

	0xfc, 0x04, 0x04,  
	0x1f, 0x10, 0x10,   // char (091) '['

	0x0c, 0x30, 0xc0, 0x00, 0x00,  
	0x00, 0x00, 0x00, 0x03, 0x0c,   // char (092) '\'

	0x04, 0x04, 0xfc,  
	0x10, 0x10, 0x1f,   // char (093) ']'

	0x40, 0x20, 0x10, 0x08, 0x10, 0x20, 0x40,  
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // char (094) '^'

	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
	0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,   // char (095) '_'

	0x04, 0x08,  
	0x00, 0x00,   // char (096) '`'

	0x00, 0xa0, 0xa0, 0xa0, 0xc0,  
	0x03, 0x04, 0x04, 0x04, 0x07,   // char (097) 'a'

	0xfc, 0x20, 0x20, 0x20, 0xc0,  
	0x07, 0x04, 0x04, 0x04, 0x03,   // char (098) 'b'

	0xc0, 0x20, 0x20, 0x20, 0x40,  
	0x03, 0x04, 0x04, 0x04, 0x02,   // char (099) 'c'

	0xc0, 0x20, 0x20, 0x20, 0xfc,  
	0x03, 0x04, 0x04, 0x04, 0x07,   // char (100) 'd'

	0xc0, 0xa0, 0xa0, 0xa0, 0xc0,  
	0x03, 0x04, 0x04, 0x04, 0x02,   // char (101) 'e'

	0x20, 0xf8, 0x24, 0x24,  
	0x00, 0x07, 0x00, 0x00,   // char (102) 'f'

	0xc0, 0x20, 0x20, 0x20, 0xe0,  
	0x03, 0x14, 0x14, 0x14, 0x0f,   // char (103) 'g'

	0xfc, 0x20, 0x20, 0x20, 0xc0,  
	0x07, 0x00, 0x00, 0x00, 0x07,   // char (104) 'h'

	0xe4,  
	0x07,   // char (105) 'i'

	0x00, 0x20, 0xe4,  
	0x10, 0x10, 0x0f,   // char (106) 'j'

	0xfc, 0x00, 0x80, 0x40, 0x20,  
	0x07, 0x01, 0x01, 0x02, 0x04,   // char (107) 'k'

	0xfc,  
	0x07,   // char (108) 'l'

	0xe0, 0x20, 0x20, 0x20, 0xc0, 0x20, 0x20, 0x20, 0xc0,  
	0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07,   // char (109) 'm'

	0xe0, 0x20, 0x20, 0x20, 0xc0,  
	0x07, 0x00, 0x00, 0x00, 0x07,   // char (110) 'n'

	0xc0, 0x20, 0x20, 0x20, 0xc0,  
	0x03, 0x04, 0x04, 0x04, 0x03,   // char (111) 'o'

	0xe0, 0x20, 0x20, 0x20, 0xc0,  
	0x1f, 0x04, 0x04, 0x04, 0x03,   // char (112) 'p'

	0xc0, 0x20, 0x20, 0x20, 0xe0,  
	0x03, 0x04, 0x04, 0x04, 0x1f,   // char (113) 'q'

	0xe0, 0x40, 0x20, 0x20,  
	0x07, 0x00, 0x00, 0x00,   // char (114) 'r'

	0xc0, 0xa0, 0x20, 0x20,  
	0x04, 0x04, 0x05, 0x03,   // char (115) 's'

	0x20, 0xf8, 0x20, 0x20,  
	0x00, 0x03, 0x04, 0x04,   // char (116) 't'

	0xe0, 0x00, 0x00, 0x00, 0xe0,  
	0x03, 0x04, 0x04, 0x04, 0x07,   // char (117) 'u'

	0x60, 0x80, 0x00, 0x80, 0x60,  
	0x00, 0x01, 0x06, 0x01, 0x00,   // char (118) 'v'

	0xe0, 0x00, 0x80, 0x60, 0x80, 0x00, 0xe0,  
	0x01, 0x06, 0x01, 0x00, 0x01, 0x06, 0x01,   // char (119) 'w'

	0x20, 0x40, 0x80, 0x40, 0x20,  
	0x04, 0x02, 0x01, 0x02, 0x04,   // char (120) 'x'

	0x20, 0xc0, 0x00, 0xc0, 0x20,  
	0x00, 0x11, 0x0e, 0x01, 0x00,   // char (121) 'y'

	0x20, 0x20, 0xa0, 0x60,  
	0x06, 0x05, 0x04, 0x04,   // char (122) 'z'

	0x80, 0x80, 0x78, 0x04, 0x04,  
	0x00, 0x00, 0x0f, 0x10, 0x10,   // char (123) '{'

	0xfc,  
	0x1f,   // char (124) '|'

	0x04, 0x04, 0x78, 0x80, 0x80,  
	0x10, 0x10, 0x0f, 0x00, 0x00,   // char (125) '}'

	0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0xc0,  
	0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00   // char (126) '~'


};

#endif

This my revised font file that letter "ı" has added.

//
// Created by GLCD_FC2_compatible on 10.08.2023
//
//   Font Name:  Verdana16_032_126
//   Orig. Name: Verdana
//
//   Start Char: 032 ' '
//   End Char:   126 '~'
//   # Chars:    95
//
//   Height:     16
//   Width:      10
//
//   Monospace:  False
//   Bold:       False
//   Italic:     False
//   Underline:  False
//   Strikeout:  False
//
//   Codesize:   1053
//
#include <inttypes.h>
#include <avr/pgmspace.h>

#ifndef _VERDANA_H_
#define _VERDANA_H_

#define VERDANA_WIDTH  10 
#define VERDANA_HEIGHT 16 

static const uint8_t Verdana16_032_126_R1[] PROGMEM = {
	0x04, 0x23,  // size
	0x0a,  // width
	0x10,  // height
	0x1f,  // first char
	0x60,  // char count


	// char widths
	0x01,
	0x04, 0x01, 0x03, 0x07, 0x05, 0x0a, 0x07, 0x01, 0x03, 0x03, 0x05, 0x07, 0x02, 0x03, 0x01, 0x05,  
	0x05, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x02, 0x06, 0x07, 0x06, 0x04,  
	0x08, 0x06, 0x06, 0x07, 0x07, 0x05, 0x05, 0x07, 0x06, 0x03, 0x04, 0x06, 0x05, 0x07, 0x06, 0x07,  
	0x05, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x09, 0x06, 0x07, 0x06, 0x03, 0x05, 0x03, 0x07, 0x07,  
	0x02, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x05, 0x05, 0x01, 0x03, 0x05, 0x01, 0x09, 0x05, 0x05,  
	0x05, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x07, 0x05, 0x05, 0x04, 0x05, 0x01, 0x05, 0x07, 

	// font data
	0xe0,  
	0x07,   // char (31) 'ı'

	0x00, 0x00, 0x00, 0x00,  
	0x00, 0x00, 0x00, 0x00,   // char (032) ' '

	0xf8,  
	0x05,   // char (033) '!'

	0x1c, 0x00, 0x1c,  
	0x00, 0x00, 0x00,   // char (034) '"'

	0x00, 0x20, 0xe0, 0x38, 0xe0, 0x38, 0x20,  
	0x01, 0x07, 0x01, 0x07, 0x01, 0x01, 0x00,   // char (035) '#'

	0x60, 0x90, 0xfc, 0x90, 0x10,  
	0x04, 0x04, 0x1f, 0x04, 0x03,   // char (036) '$'

	0x30, 0x48, 0x48, 0x30, 0x80, 0x60, 0x18, 0x80, 0x80, 0x00,  
	0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x03, 0x04, 0x04, 0x03,   // char (037) '%'

	0xb0, 0x48, 0x48, 0xb0, 0x00, 0xc0, 0x00,  
	0x03, 0x04, 0x04, 0x04, 0x03, 0x02, 0x04,   // char (038) '&'

	0x1c,  
	0x00,   // char (039) '''

	0xe0, 0x18, 0x04,  
	0x03, 0x0c, 0x10,   // char (040) '('

	0x04, 0x18, 0xe0,  
	0x10, 0x0c, 0x03,   // char (041) ')'

	0x28, 0x10, 0x7c, 0x10, 0x28,  
	0x00, 0x00, 0x00, 0x00, 0x00,   // char (042) '*'

	0x80, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80,  
	0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,   // char (043) '+'

	0x00, 0x00,  
	0x10, 0x0e,   // char (044) ','

	0x80, 0x80, 0x80,  
	0x00, 0x00, 0x00,   // char (045) '-'

	0x00,  
	0x06,   // char (046) '.'

	0x00, 0x00, 0xc0, 0x30, 0x0c,  
	0x0c, 0x03, 0x00, 0x00, 0x00,   // char (047) '/'

	0xf0, 0x08, 0x08, 0x08, 0xf0,  
	0x03, 0x04, 0x04, 0x04, 0x03,   // char (048) '0'

	0x10, 0x10, 0xf8, 0x00, 0x00,  
	0x04, 0x04, 0x07, 0x04, 0x04,   // char (049) '1'

	0x10, 0x08, 0x88, 0x48, 0x30,  
	0x06, 0x05, 0x04, 0x04, 0x04,   // char (050) '2'

	0x10, 0x08, 0x48, 0x48, 0xb0,  
	0x02, 0x04, 0x04, 0x04, 0x03,   // char (051) '3'

	0x80, 0x40, 0x20, 0x10, 0xf8, 0x00,  
	0x01, 0x01, 0x01, 0x01, 0x07, 0x01,   // char (052) '4'

	0x78, 0x48, 0x48, 0x48, 0x88,  
	0x02, 0x04, 0x04, 0x04, 0x03,   // char (053) '5'

	0xe0, 0x50, 0x48, 0x48, 0x80,  
	0x03, 0x04, 0x04, 0x04, 0x03,   // char (054) '6'

	0x08, 0x08, 0x88, 0x68, 0x18,  
	0x00, 0x06, 0x01, 0x00, 0x00,   // char (055) '7'

	0xb0, 0x48, 0x48, 0x48, 0xb0,  
	0x03, 0x04, 0x04, 0x04, 0x03,   // char (056) '8'

	0x70, 0x88, 0x88, 0x88, 0xf0,  
	0x00, 0x04, 0x04, 0x02, 0x01,   // char (057) '9'

	0x60,  
	0x06,   // char (058) ':'

	0x00, 0x60,  
	0x10, 0x0e,   // char (059) ';'

	0x80, 0x80, 0x40, 0x40, 0x20, 0x20,  
	0x00, 0x00, 0x01, 0x01, 0x02, 0x02,   // char (060) '<'

	0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  
	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,   // char (061) '='

	0x20, 0x20, 0x40, 0x40, 0x80, 0x80,  
	0x02, 0x02, 0x01, 0x01, 0x00, 0x00,   // char (062) '>'

	0x08, 0x88, 0x48, 0x30,  
	0x00, 0x05, 0x00, 0x00,   // char (063) '?'

	0xe0, 0x10, 0xc8, 0x28, 0x28, 0xe8, 0x08, 0xf0,  
	0x03, 0x04, 0x09, 0x0a, 0x0a, 0x09, 0x02, 0x01,   // char (064) '@'

	0x00, 0xe0, 0x18, 0x18, 0xe0, 0x00,  
	0x07, 0x01, 0x01, 0x01, 0x01, 0x07,   // char (065) 'A'

	0xf8, 0x48, 0x48, 0x48, 0x70, 0x80,  
	0x07, 0x04, 0x04, 0x04, 0x04, 0x03,   // char (066) 'B'

	0xe0, 0x10, 0x08, 0x08, 0x08, 0x08, 0x10,  
	0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02,   // char (067) 'C'

	0xf8, 0x08, 0x08, 0x08, 0x08, 0x10, 0xe0,  
	0x07, 0x04, 0x04, 0x04, 0x04, 0x02, 0x01,   // char (068) 'D'

	0xf8, 0x48, 0x48, 0x48, 0x48,  
	0x07, 0x04, 0x04, 0x04, 0x04,   // char (069) 'E'

	0xf8, 0x48, 0x48, 0x48, 0x08,  
	0x07, 0x00, 0x00, 0x00, 0x00,   // char (070) 'F'

	0xe0, 0x10, 0x08, 0x08, 0x88, 0x88, 0x90,  
	0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x03,   // char (071) 'G'

	0xf8, 0x40, 0x40, 0x40, 0x40, 0xf8,  
	0x07, 0x00, 0x00, 0x00, 0x00, 0x07,   // char (072) 'H'

	0x08, 0xf8, 0x08,  
	0x04, 0x07, 0x04,   // char (073) 'I'

	0x00, 0x08, 0x08, 0xf8,  
	0x04, 0x04, 0x04, 0x03,   // char (074) 'J'

	0xf8, 0x80, 0xc0, 0x20, 0x10, 0x08,  
	0x07, 0x00, 0x00, 0x01, 0x02, 0x04,   // char (075) 'K'

	0xf8, 0x00, 0x00, 0x00, 0x00,  
	0x07, 0x04, 0x04, 0x04, 0x04,   // char (076) 'L'

	0xf8, 0x18, 0x60, 0x80, 0x60, 0x18, 0xf8,  
	0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07,   // char (077) 'M'

	0xf8, 0x18, 0x60, 0x80, 0x00, 0xf8,  
	0x07, 0x00, 0x00, 0x01, 0x06, 0x07,   // char (078) 'N'

	0xe0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xe0,  
	0x01, 0x02, 0x04, 0x04, 0x04, 0x02, 0x01,   // char (079) 'O'

	0xf8, 0x88, 0x88, 0x88, 0x70,  
	0x07, 0x00, 0x00, 0x00, 0x00,   // char (080) 'P'

	0xe0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xe0,  
	0x01, 0x02, 0x04, 0x04, 0x0c, 0x12, 0x11,   // char (081) 'Q'

	0xf8, 0x88, 0x88, 0x88, 0x70, 0x00,  
	0x07, 0x00, 0x00, 0x01, 0x02, 0x04,   // char (082) 'R'

	0x30, 0x48, 0x48, 0x88, 0x88, 0x10,  
	0x02, 0x04, 0x04, 0x04, 0x04, 0x03,   // char (083) 'S'

	0x08, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x08,  
	0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,   // char (084) 'T'

	0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8,  
	0x03, 0x04, 0x04, 0x04, 0x04, 0x03,   // char (085) 'U'

	0x38, 0xc0, 0x00, 0x00, 0xc0, 0x38,  
	0x00, 0x01, 0x06, 0x06, 0x01, 0x00,   // char (086) 'V'

	0x18, 0xe0, 0x00, 0xe0, 0x18, 0xe0, 0x00, 0xe0, 0x18,  
	0x00, 0x01, 0x06, 0x01, 0x00, 0x01, 0x06, 0x01, 0x00,   // char (087) 'W'

	0x18, 0x20, 0xc0, 0xc0, 0x20, 0x18,  
	0x06, 0x01, 0x00, 0x00, 0x01, 0x06,   // char (088) 'X'

	0x08, 0x10, 0x20, 0xc0, 0x20, 0x10, 0x08,  
	0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,   // char (089) 'Y'

	0x08, 0x08, 0x88, 0x48, 0x28, 0x18,  
	0x06, 0x05, 0x04, 0x04, 0x04, 0x04,   // char (090) 'Z'

	0xfc, 0x04, 0x04,  
	0x1f, 0x10, 0x10,   // char (091) '['

	0x0c, 0x30, 0xc0, 0x00, 0x00,  
	0x00, 0x00, 0x00, 0x03, 0x0c,   // char (092) '\'

	0x04, 0x04, 0xfc,  
	0x10, 0x10, 0x1f,   // char (093) ']'

	0x40, 0x20, 0x10, 0x08, 0x10, 0x20, 0x40,  
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // char (094) '^'

	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
	0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,   // char (095) '_'

	0x04, 0x08,  
	0x00, 0x00,   // char (096) '`'

	0x00, 0xa0, 0xa0, 0xa0, 0xc0,  
	0x03, 0x04, 0x04, 0x04, 0x07,   // char (097) 'a'

	0xfc, 0x20, 0x20, 0x20, 0xc0,  
	0x07, 0x04, 0x04, 0x04, 0x03,   // char (098) 'b'

	0xc0, 0x20, 0x20, 0x20, 0x40,  
	0x03, 0x04, 0x04, 0x04, 0x02,   // char (099) 'c'

	0xc0, 0x20, 0x20, 0x20, 0xfc,  
	0x03, 0x04, 0x04, 0x04, 0x07,   // char (100) 'd'

	0xc0, 0xa0, 0xa0, 0xa0, 0xc0,  
	0x03, 0x04, 0x04, 0x04, 0x02,   // char (101) 'e'

	0x20, 0xf8, 0x24, 0x24,  
	0x00, 0x07, 0x00, 0x00,   // char (102) 'f'

	0xc0, 0x20, 0x20, 0x20, 0xe0,  
	0x03, 0x14, 0x14, 0x14, 0x0f,   // char (103) 'g'

	0xfc, 0x20, 0x20, 0x20, 0xc0,  
	0x07, 0x00, 0x00, 0x00, 0x07,   // char (104) 'h'

	0xe4,  
	0x07,   // char (105) 'i'

	0x00, 0x20, 0xe4,  
	0x10, 0x10, 0x0f,   // char (106) 'j'

	0xfc, 0x00, 0x80, 0x40, 0x20,  
	0x07, 0x01, 0x01, 0x02, 0x04,   // char (107) 'k'

	0xfc,  
	0x07,   // char (108) 'l'

	0xe0, 0x20, 0x20, 0x20, 0xc0, 0x20, 0x20, 0x20, 0xc0,  
	0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07,   // char (109) 'm'

	0xe0, 0x20, 0x20, 0x20, 0xc0,  
	0x07, 0x00, 0x00, 0x00, 0x07,   // char (110) 'n'

	0xc0, 0x20, 0x20, 0x20, 0xc0,  
	0x03, 0x04, 0x04, 0x04, 0x03,   // char (111) 'o'

	0xe0, 0x20, 0x20, 0x20, 0xc0,  
	0x1f, 0x04, 0x04, 0x04, 0x03,   // char (112) 'p'

	0xc0, 0x20, 0x20, 0x20, 0xe0,  
	0x03, 0x04, 0x04, 0x04, 0x1f,   // char (113) 'q'

	0xe0, 0x40, 0x20, 0x20,  
	0x07, 0x00, 0x00, 0x00,   // char (114) 'r'

	0xc0, 0xa0, 0x20, 0x20,  
	0x04, 0x04, 0x05, 0x03,   // char (115) 's'

	0x20, 0xf8, 0x20, 0x20,  
	0x00, 0x03, 0x04, 0x04,   // char (116) 't'

	0xe0, 0x00, 0x00, 0x00, 0xe0,  
	0x03, 0x04, 0x04, 0x04, 0x07,   // char (117) 'u'

	0x60, 0x80, 0x00, 0x80, 0x60,  
	0x00, 0x01, 0x06, 0x01, 0x00,   // char (118) 'v'

	0xe0, 0x00, 0x80, 0x60, 0x80, 0x00, 0xe0,  
	0x01, 0x06, 0x01, 0x00, 0x01, 0x06, 0x01,   // char (119) 'w'

	0x20, 0x40, 0x80, 0x40, 0x20,  
	0x04, 0x02, 0x01, 0x02, 0x04,   // char (120) 'x'

	0x20, 0xc0, 0x00, 0xc0, 0x20,  
	0x00, 0x11, 0x0e, 0x01, 0x00,   // char (121) 'y'

	0x20, 0x20, 0xa0, 0x60,  
	0x06, 0x05, 0x04, 0x04,   // char (122) 'z'

	0x80, 0x80, 0x78, 0x04, 0x04,  
	0x00, 0x00, 0x0f, 0x10, 0x10,   // char (123) '{'

	0xfc,  
	0x1f,   // char (124) '|'

	0x04, 0x04, 0x78, 0x80, 0x80,  
	0x10, 0x10, 0x0f, 0x00, 0x00,   // char (125) '}'

	0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0xc0,  
	0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00   // char (126) '~'


};

#endif

And, this is my program that controls panel:

#include <Verdana16_032_126.h>

#include <SPI.h>
#include <DMD2.h>

#define DISPLAY_WIDTH 3
#define DISPLAY_HEIGHT 4

int i=0;
int j=0;
int k=0;

const uint8_t *Font = Verdana16_032_126;

SoftDMD dmd(DISPLAY_WIDTH,DISPLAY_HEIGHT);
//BoxTr box(dmd);

void setup() {
  dmd.begin();
  dmd.setBrightness(50);
  dmd.selectFont(Font);   // Set the font size scale
  dmd.clearScreen();
}

void loop() {
  dmd.clearScreen();
  dmd.selectFont(Font);
  dmd.drawString(2, 2, "ı");
  delay(10000);
}

Program is working when I use English letters but, panel shows nothing when I type letter "ı".

How can I fix it?

Please open your sketch file with HEX editor and see what the charcode of the "ı" letter?

I've tried to do it, I'm not sure if I succeed.

It looks C4 B1.

This looks reasonable since I expected it will be a multibyte UTF character.
Obviously the character with code 0xC4B1 will not be printed as font letter with code 31.
You need convert your text codepage to font codepage first.

What is the language you trying to print?

1 Like

Ok, thats something I can understand.

And with that, I've no idea. Can you tell me how?

Turkish. It has 12 additional letters: ı İ ç Ç ğ Ğ ö Ö ş Ş ü Ü.

Also want to be able to write some special characters such as Ø ° ±. Thesee are not a must have properties, but it would be nice.

See this library to figure out how to output Turkish letters to DMD matrix panels;

Note the write() function in the DMD2_TUR.cpp - it contains a code to convert UTF charcodes to font codepage.

Yes, I know that libary. And thanks to Mr. Hakan I've already learnd so much about writing font libary. But, couldn't figure out this parrt yet.

Ok, I see the code although can't understand it. How can I use it?

size_t BoxTr::write(uint8_t character)
{
 
    if (character == 195)
    {
        f195 = 1;
        sent = 0;
        return 1;
    }
    if (character == 196)
    {
        f196 = 1;
        sent = 0;
        return 1;
    }
    if (character == 197)
    {
        f197 = 1;
        sent = 0;
        return 1;
    }
    if (f196 == 1)
    {
        resetFs();
        if (character == 177) // ı
            character = 0x1F;
        else if (character == 176) // İ
            character = 0x1E;
        else if (character == 158) // Ğ
            character = 0x1D;
        else if (character == 159) // ğ
            character = 0x1C;
    }

    if (f195 == 1)
    {
        resetFs();
        if (character == 182) // ö
            character = 0x1b;
        else if (character == 150) // Ö
            character = 0x1a;
        else if (character == 156) // Ü
            character = 0x19;
        else if (character == 188) // ü
            character = 0x18;
        else if (character == 135) // Ç
            character = 0x17;
        else if (character == 167) // ç
            character = 0x16;
    }
    if (f197 == 1)
    {
        resetFs();
        if (character == 158) // Ş
            character = 0x15;
        else if (character == 159) // ş
            character = 0x14;
    }

    if (sent)
        return box.write(character);
    return 1;
}

see how I use it in my Turkish print example:

/*--------------------------------------------------------------------------------------
  UTF8 Turkish char recoding
  Conversion code by HakkanR https://github.com/HakkanR/DMD2TUR
--------------------------------------------------------------------------------------*/

#define RESET_FS    {f195 = f196 = f197 = 0;sent = 1;}

// recode one char
char recode(uint8_t character)
{
    static uint8_t f195 = 0;
    static uint8_t f196 = 0;
    static uint8_t f197 = 0;
    static bool sent = true;
    if (character == 195)
    {
        f195 = 1;
        sent = 0;
        return 1;
    }
    if (character == 196)
    {
        f196 = 1;
        sent = 0;
        return 1;
    }
    if (character == 197)
    {
        f197 = 1;
        sent = 0;
        return 1;
    }
    if (f196 == 1)
    {
        RESET_FS;
        if (character == 177) // ı
            character = 0x1F;
        else if (character == 176) // İ
            character = 0x1E;
        else if (character == 158) // Ğ
            character = 0x1D;
        else if (character == 159) // ğ
            character = 0x1C;
    }

    if (f195 == 1)
    {
        RESET_FS;
        if (character == 182) // ö
            character = 0x1b;
        else if (character == 150) // Ö
            character = 0x1a;
        else if (character == 156) // Ü
            character = 0x19;
        else if (character == 188) // ü
            character = 0x18;
        else if (character == 135) // Ç
            character = 0x17;
        else if (character == 167) // ç
            character = 0x16;
    }
    if (f197 == 1)
    {
        RESET_FS;
        if (character == 158) // Ş
            character = 0x15;
        else if (character == 159) // ş
            character = 0x14;
    }

    if (sent)
        return character;
    return 1;
}

//recode string
int utf8_turk(char* dest, char* src) {
    int cnt = 0;
    while (*src != 0) {
        char new_char = recode(*src);
        if (new_char != 1) { *dest = new_char; dest++; cnt++; }
        src++;
    }
    *dest = 0;
    return cnt;
}

// Turkish text 
   char t[] = "Küçük ördek ve büyük baykuş";  //"Small duck and big owl"

// transcode message to UTF for use with GFX fonts
    
    char kt[35];
    utf8_turk(kt, t);
    
    // select Turkish font
    dmd.selectFont(&Turk_Arial_F);

    // set text foreground and background colors
    dmd.setTextColor(RED, BLACK);
   // print decoded turkish text to the DMD panel
    dmd.drawString(0,0, kt, strlen(kt));

This is a "pseudo-code", only to show an idea. I copied it from the dmd_rgb_turk.ino example for DMD_STM32 library.

"pseudo-code"...Hımm...
Ok, I will search and study on it. Thanks.

Yes, pseudo-code, because it is a snippet from other library example - DMD_STM32. This code can be slightly incompatible with DMD library, but still show the general idea of how to use Mr. Hakan's code.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.