Russificarea bibliotecii openglcd pentru arduino

Printre altele, cp437font8x8 este mare pentru ecranele de 128x64 pixeli. Dimensiunea optimă a fontului pentru etichetele auxiliare de pe acest afișaj este System5x7. Ne vom concentra aici asupra rusificării fontului sistemului, deși cititorul poate rusi orice alt font (mai ales dacă are un ecran mai mare).







Și care este problema?

În procesul acestei transformări, fiecare simbol, ca în orice program din orice limbaj de programare, este reprezentat direct sub forma codului său, adică numărul de secvență din tabelul de fonturi din care programul extrage conturul grafic al simbolului corespunzător. În fișierul de fonturi System5x7.h al bibliotecii openGLCD, numărul de caractere este reprezentat de variabila font_Char_Count de tip uint8_t. adică, nu poate depăși valoarea unui octet. Prin urmare, caracterele chirilice, care în UTF-8 ocupă doi octeți. nu pot fi transferate la controler în mod obișnuit.

Încercările anterioare de a rezolva

În versiunile mai noi ale IDE-ului Arduino, lucrurile au devenit mai complicate. Biblioteca refuză cu fermitate să înțeleagă numerele de caractere de două octeți, afișând în schimb un spațiu gol, astfel încât să nu poți face fără o simplă modificare a fontului. Este necesară completarea acesteia cu funcția de transcodificare a caracterelor cu două octeți în cele cu un singur octet.

De exemplu, pentru litera rusească de capital "F", șirul de înlocuire va fi:


Aici 0xA4 este octetul scăzut al codării literei "F" în UTF-8 (vezi referința de mai sus). În conformitate cu această codificare, a fost compilat un nou fișier de fonturi System5x7R.h. În principiu, cu această abordare în font, puteți folosi orice codificare a caracterelor rusești și orice alte glifuri pe care doriți să le inserați în font. Dacă numărul lor total nu depășește 128 de bucăți: de la începutul tabelului până la simbolul 0x7F (127 - ultimul caracter al tabelului standard ASCII), este recomandabil să lăsați fontul intact.







Adevărat, mi-am permis câteva libertăți cu masa ASCII. Faptul este că în fontul original System5x7.h pictograma grad este plasată în ultima linie a tabelului, ocupând simbolul 0x80, pe care deja îl referim la alfabetul chirilic. Pentru a nu încălca ordinea construirii mesei chirilice în conformitate cu UTF-8, această linie este aruncată din dosar. Iar pictograma grad este adăugată în loc de caracterul ASCII "

"(Numărul 0x7E), care în font nu era încă folosit în scopul propus. Dar o astfel de înlocuire vă permite să introduceți simbolul grad în textul schiței direct de la tastatură sub forma simbolului "

Diagrama conexiunii MT-12864J



Rezistorul variabil R1 este conectat aici, conform recomandării producătorului. iar rezistența R2 servește la limitarea curentului luminii de fundal dacă nu este conectat la o tensiune de 5 V, dar direct la sursa de alimentare de intrare (ieșire Vin Arduino) cu o tensiune mai mare.

Un exemplu de afișare a alfabetului rus în MT-12864J, în combinație cu alfabetul latin, precum și cifrele și pictograma gradului, este prezentat în fotografie:


Textul schițat pentru acest exemplu:

Textul schiței cu ieșirea din alfabetul rusesc


Deoarece fișierele cu funcția outstr.h și fontul System5x7R.h sunt localizate în directorul rădăcină al bibliotecii actualizate, ele trebuie plasate la începutul schiței utilizând directiva #include. Pentru inscripțiile în limba engleză, este convenabil să utilizați în continuare funcțiile de tipărire / imprimare standard. dar dacă trebuie să traduceți un șir în textul rusesc, trebuie să specificați explicit caracterul "\ n".

Poate că va funcționa, dar probabil că nu. Am încercat să scurtez algoritmul în orice mod, firește (vedeți legătura cu arduinec la începutul articolului). Înlocuirea simplă a codului pentru un element rând - cer. Dar în nici un caz nu a funcționat - tocmai pentru că personajele originale sunt dublu-byte. String-uri de tip String, sincer nu am încercat, dar sunt sigur că va fi același lucru: nicăieri nu este scris că String acceptă caractere dublu-byte (adică, cu siguranță nu suportă - elementele sale sunt de tip char). Pentru că am scuipat la delicatese, care a durat mult timp și a făcut o schimbare nemaipomenită a personajelor direct - permiteți compilatorului să înțeleagă. Și pentru că, apropo, că reducerea timpului de lucru încă nu funcționează, va exista doar o reducere a codului sursă.







Articole similare

Trimiteți-le prietenilor: