Max7219, how to change language

I am using an arduino uno and hc06 to control the max7219, everything works fine.
When I send Hebrew letters thru my mobile, it's send wierd text.
What is the steps should I do?
I am using the md parola code

I am guessing you are sending Unicode characters to a sketch that can only deal with ASCII. I think you will need to add both a Unicode parser and a Unicode font. Since a Unicode font is much larger than an ASCII font you may need a processor with more memory or some form of external memory.

Where does one find the "md parola" code?

MD Parola is a library for modular scrolling LED matrix text displays using MAX7219 or MAX7221 controllers.

Good news! The library supports Unicode. Start with the "Parola_UFT-8_Display" example. That can do the first 256 Unicode characters (Extended ASCII font). You will need to implement the Hebrew part of the Unicode font to get it to display Hebrew.

"The Unicode Hebrew block extends from U+0590 to U+05FF and from U+FB1D to U+FB4F. It includes letters, ligatures, combining diacritical marks (niqqud and cantillation marks) and punctuation. The Numeric Character References are included for HTML."

johnwasser, thank for your comments
I am a bit lost.
I opened the parola_fonts_data. h and didn't know what to do.
Which line to change and to what?
Sorry for the noob questions

The font in Parola_Fonts_data.h contains the first 256 characters of the Unicode font. The first byte of each character is the number of columns. The following bytes are the bitmaps for each column.

To get to code 0x0590 (1424) I think you have to put in 1168 bytes of 0 to represent the unused 1168 characters between 256 and 1424. Then you need to find an 8-row Hebrew font to add to the end and format it as above: column count followed by column data.

Good luck.

Note: If you have a limited number of messages it might be easier to store bitmap images of each message.

johnwasser:
The font in Parola_Fonts_data.h contains the first 256 characters of the Unicode font. The first byte of each character is the number of columns. The following bytes are the bitmaps for each column.

To get to code 0x0590 (1424) I think you have to put in 1168 bytes of 0 to represent the unused 1168 characters between 256 and 1424. Then you need to find an 8-row Hebrew font to add to the end and format it as above: column count followed by column data.

I don’t think that’s correct. The library doesn’t actually support Unicode, only extended ASCII. The way the UTF-8 example works is by mapping multi-byte UTF-8 Unicode code points to 8-bit characters in the 128-255 range that isn’t used by ASCII.
Then you define a custom font that determines how these non-ASCII values are displayed.

So you need to adapt the example to convert only ASCII and Hebrew characters to a value between 0 and 255. You’ll have to understand how UTF-8 works first. Then define the font for these mapped characters.
I don’t know if Hebrew has ligatures, but if so, you cannot display them (AFAIK).

Pieter

PieterP:
I don't think that's correct. The library doesn't actually support Unicode, only extended ASCII. The way the UTF-8 example works is by mapping multi-byte UTF-8 Unicode code points to 8-bit characters in the 128-255 range that isn't used by ASCII.

That might be. I did notice that several places in the GitHub comments, including on the "UFT-8" example, it says: "Changed to use 16 bit character code"

The change to use 16 bit characters is to allow for up to 65535 characters in future. At this stage the majority of users (entry level Arduino Uno and AVR architecture) would not have enough flash memory to store the required character tables.

Broadly PieterP is right, you need to remap the characters. The characters received from the Serial monitor, which is what the OP is trying to get onto the display, are actually UTF-8 encoded.

The font table can be replaced. You can redesign the font using a number of methods described in this blog post Parola A to Z – Defining Fonts – Arduino++. The fonts are actually a component of the MD_MAX72xx library and are documented as part of that code.

I am not familiar with how Hebrew is written, but if it has ligatures like the Arabic language, then it may be hard to get a good looking font with just 8 LEDs for the vertical resolution. If you get a good hebrew font designed, please contribute it back to the main library as it would be good to have this available for others.

i found this site MD_MAX72XX Font Editor

i wrote the hebrew letters, and get code

  1. I am not sure if i put the letters in the right line, i start at 192. (photo attached)
    Pasteboard - Uploaded Image

  2. if it's correct, where i put it in the parola code, which line should i replace?

  3. i also notice that all of the alphabet wroted in the code are in 5px wide, i do it in 8px wide, will it be wierd in real matrix board?

this is the code that came up

MD_MAX72XX::fontType_t newFont[] PROGMEM = 
{
 0, // 0 MD_MAX72XX::fontType_t newFont[] PROGMEM = 
 0, // 1 
 0, // 2 
 0, // 3 
 0, // 4 
 0, // 5 
 0, // 6 
 0, // 7 
 0, // 8 
 0, // 9 
 0, // 10 
 0, // 11 
 0, // 12 
 0, // 13 
 0, // 14 
 0, // 15 
 0, // 16 
 0, // 17 
 0, // 18 
 0, // 19 
 0, // 20 
 0, // 21 
 0, // 22 
 0, // 23 
 0, // 24 
 0, // 25 
 0, // 26 
 0, // 27 
 0, // 28 
 0, // 29 
 0, // 30 
 0, // 31 
 0, // 32 
 0, // 33 
 0, // 34 
 0, // 35 
 0, // 36 
 0, // 37 
 0, // 38 
 0, // 39 
 0, // 40 
 0, // 41 
 0, // 42 
 0, // 43 
 0, // 44 
 0, // 45 
 0, // 46 
 0, // 47 
 0, // 48 
 0, // 49 
 0, // 50 
 0, // 51 
 0, // 52 
 0, // 53 
 0, // 54 
 0, // 55 
 0, // 56 
 0, // 57 
 0, // 58 
 0, // 59 
 0, // 60 
 0, // 61 
 0, // 62 
 0, // 63 
 0, // 64 
 0, // 65 
 0, // 66 
 0, // 67 
 0, // 68 
 0, // 69 
 0, // 70 
 0, // 71 
 0, // 72 
 0, // 73 
 0, // 74 
 0, // 75 
 0, // 76 
 0, // 77 
 0, // 78 
 0, // 79 
 0, // 80 
 0, // 81 
 0, // 82 
 0, // 83 
 0, // 84 
 0, // 85 
 0, // 86 
 0, // 87 
 0, // 88 
 0, // 89 
 0, // 90 
 0, // 91 
 0, // 92 
 0, // 93 
 0, // 94 
 0, // 95 
 0, // 96 
 0, // 97 
 0, // 98 
 0, // 99 
 0, // 100 
 0, // 101 
 0, // 102 
 0, // 103 
 0, // 104 
 0, // 105 
 0, // 106 
 0, // 107 
 0, // 108 
 0, // 109 
 0, // 110 
 0, // 111 
 0, // 112 
 0, // 113 
 0, // 114 
 0, // 115 
 0, // 116 
 0, // 117 
 0, // 118 
 0, // 119 
 0, // 120 
 0, // 121 
 0, // 122 
 0, // 123 
 0, // 124 
 0, // 125 
 0, // 126 
 0, // 127 
 0, // 128 
 0, // 129 
 0, // 130 
 0, // 131 
 0, // 132 
 0, // 133 
 0, // 134 
 0, // 135 
 0, // 136 
 0, // 137 
 0, // 138 
 0, // 139 
 0, // 140 
 0, // 141 
 0, // 142 
 0, // 143 
 0, // 144 
 0, // 145 
 0, // 146 
 0, // 147 
 0, // 148 
 0, // 149 
 0, // 150 
 0, // 151 
 0, // 152 
 0, // 153 
 0, // 154 
 0, // 155 
 0, // 156 
 0, // 157 
 0, // 158 
 0, // 159 
 0, // 160 
 0, // 161 
 0, // 162 
 0, // 163 
 0, // 164 
 0, // 165 
 0, // 166 
 0, // 167 
 0, // 168 
 0, // 169 
 0, // 170 
 0, // 171 
 0, // 172 
 0, // 173 
 0, // 174 
 0, // 175 
 0, // 176 
 0, // 177 
 0, // 178 
 0, // 179 
 0, // 180 
 0, // 181 
 0, // 182 
 0, // 183 
 0, // 184 
 0, // 185 
 0, // 186 
 0, // 187 
 0, // 188 
 0, // 189 
 0, // 190 
 0, // 191 
 8, 115, 127, 28, 56, 127, 111, 64, 0, // 192 
 8, 99, 99, 99, 99, 127, 126, 96, 0, // 193 
 8, 99, 115, 19, 22, 28, 120, 112, 0, // 194 
 8, 3, 3, 3, 127, 127, 3, 3, 0, // 195 
 8, 115, 115, 3, 3, 3, 127, 126, 0, // 196 
 8, 3, 3, 127, 127, 0, 0, 0, 0, // 197 
 8, 1, 123, 126, 12, 24, 16, 0, 0, // 198 
 8, 127, 127, 3, 3, 3, 127, 127, 0, // 199 
 8, 127, 127, 96, 100, 102, 127, 127, 0, // 200 
 8, 3, 3, 15, 15, 0, 0, 0, 0, // 201 
 8, 99, 99, 99, 99, 99, 127, 62, 0, // 202 
 8, 99, 103, 100, 124, 56, 0, 0, 0, // 203 
 8, 107, 111, 100, 102, 127, 62, 0, 0, // 204 
 8, 96, 96, 96, 99, 99, 127, 126, 0, // 205 
 8, 3, 31, 123, 99, 99, 63, 31, 0, // 206 
 8, 96, 111, 127, 96, 96, 63, 31, 0, // 207 
 8, 110, 111, 107, 99, 127, 127, 62, 0, // 208 
 8, 97, 99, 102, 108, 127, 119, 96, 0, // 209 
 8, 3, 243, 243, 3, 31, 30, 0, 0, // 210 
 8, 3, 3, 3, 3, 3, 127, 127, 0, // 211 
 8, 3, 63, 104, 107, 111, 96, 51, 31, // 212 
 8, 96, 96, 127, 127, 3, 127, 126, 0, // 213 
 8, 3, 3, 3, 3, 255, 255, 0, 0, // 214 
 8, 3, 127, 127, 99, 99, 127, 127, 0, // 215 
 8, 3, 3, 255, 255, 0, 0, 0, 0, // 216 
 8, 31, 27, 3, 255, 255, 0, 0, 0, // 217 
 8, 3, 255, 248, 12, 7, 3, 0, 0, // 218 
 0, // 219 
 0, // 220 
 0, // 221 
 0, // 222 
 0, // 223 
 0, // 224 
 0, // 225 
 0, // 226 
 0, // 227 
 0, // 228 
 0, // 229 
 0, // 230 
 0, // 231 
 0, // 232 
 0, // 233 
 0, // 234 
 0, // 235 
 0, // 236 
 0, // 237 
 0, // 238 
 0, // 239 
 0, // 240 
 0, // 241 
 0, // 242 
 0, // 243 
 0, // 244 
 0, // 245 
 0, // 246 
 0, // 247 
 0, // 248 
 0, // 249 
 0, // 250 
 0, // 251 
 0, // 252 
 0, // 253 
 0, // 254 
 0, // 255
}

To make your font proportional, for each line that has trailing 0's, remove the zeroes and subtract that many from the '8' at the start of the line. For example:

 8, 3, 243, 243, 3, 31, 30, 0, 0, // 210

has two trailing blank (0) columne. Remove those two zeroes and subtract 2 from the 8 to get 6:

 6, 3, 243, 243, 3, 31, 30, // 210
  1. I am not sure if i put the letters in the right line, i start at 192. (photo attached)
    Pasteboard - Uploaded Image

link does not work.

  1. if it's correct, where i put it in the parola code, which line should i replace?

You should probably replace the characters in the standard font file in the MD_MAX72xx library. Edit the file MD_MAX72xx_font.cpp and put your definitions in place of the standard ones starting at code 192.

  1. i also notice that all of the alphabet wroted in the code are in 5px wide, i do it in 8px wide, will it be wierd in real matrix board?

It can be as wide as you like and each character can be a different width. I would take johnwassers's advice and make the characters proportionally spaced as this will look better on the display.