C oman fontin luominen tulostaululle. Pikselien tulostaminen Max72xxPanel-kirjastolla

Vihdoinkin matriisimoduulit ovat saapuneet Keski-Britanniasta. Jokainen moduuli koostuu MAX7219 () -mikropiiristä, LED-matriisista ja johtosarjassa on yksi kondensaattori ja yksi vastus.


Ohjataan MAX7219:llä SPI-liitännän kautta.


Klusterin sirut on kytketty sarjaan. Luin Internetistä, että suurin mahdollinen sarjaliitäntä sallii vain 8 kpl MAX7219:ää. Älä usko sitä. Yhdistin 16 moduulia ja kaikki toimii hyvin.

Alissa esitellyistä moduuleista on useita versioita. Suosituimmat ovat 2 tyyppiä: sirulla DIP- ja SOIC-pakkauksissa. DIP-sirulla varustettu moduuli suurempi koko eikä niin kätevää klusteriin kytkettäessä. Yhdistettäväksi tulee joukko johtoja.


SOIC-pakkauksessa olevat sirulla varustetut moduulit ovat LED-matriisin kokoisia ja ne yhdistetään juottamalla tai jumppereilla. Siitä tulee kaunis ja siisti.


Tunnetuimmat kirjastot matriisien ja klustereiden kanssa työskentelyyn ovat Mark Ricen MAX72xx-paneeli Ja MajicDesignsin Parola: Ensimmäinen kirjasto on helpompi käyttää, toinen on monimutkaisempi ja enemmän ominaisuuksia. Kuvailen sitä tarkemmin.

MAX72xx paneeli

Käytettäessä MAX72xx Panelia kirjasto on asennettava Adafruit GFX.

Tekstin venäläistämiseksi sinun on ladattava TÄMÄ TIEDOSTO ja vaihda standardi tiedosto glcdfont.c Arduino/Libraries/Adafruit-GFX-Library-master-hakemistossa. Kuvattu myös tässä tiedostossa, paitsi tarvittavat kirjaimet ja numerot, joukko erilaisia ​​symboleja. Kaikista niistä ei voi olla hyötyä. Alla oleva kuva selittää kuinka symbolit muodostuvat.

Tarvittaessa voit luoda omia symboleita ja korvata niillä tiedostossa olevat käyttämättömät symbolit. Lähes kaikki eri kirjastoissa käytetyt pistefontit on muodostettu samalla tavalla.

Joten MAX72xx Panel- ja Adafruit GFX -kirjastot asennetaan ja glcdfont.c-tiedosto korvataan. Aloitetaan Arduino IDE, auki TIEDOSTO. Luonnos sisältää utf8rus-funktion. Se tarjoaa merkkitaulukon muunnoksen venäjän kielelle. Sitä tarvitaan vain ohjelman normaalille ulostulolle, toisin sanoen ohjelmassa pakollinen teksti kirjoitettu venäjäksi. Jos tekstiä syötetään COM-portin kautta, merkkikoodit korjataan Serial_Read-funktiossa. Kehittäjät käyttivät erilaisia ​​koodauksia IDE:ssä ja konsolissa.

Tiedoston alussa on kirjaston toimintaan tarvittavat rivit.

int numberOfHorizontalDisplays = 1;

int numberOfVerticalDisplays = 16;

Minulla on mikropiirillä varustetut moduulit SOIC-paketissa. Niissä on pieni erikoisuus. Moduulien matriisi asennetaan 90 astetta kierrettynä. Tämä on maksu yhteyden mukavuudesta. Jos suoritat kirjastojen mukana tulevat luonnokset, ne tulostavat tekstiä alhaalta ylös jokaisessa moduulissa. Teksti näkyy siksakina. Tämän ongelman korjaamiseksi kirjastolle on "kerrottava", että pystysuoria näyttöjä on 16 (fyysisesti ne sijaitsevat vaakasuorassa). Määritä sitten void Setupissa rivi kirjastoon

matrix.setRotation(matrix.getRotation() + 1);

Se kääntää jokaisen matriisin ohjelmallisesti. Ja kaikki näkyy normaalisti.

DIP-sirupaketilla varustetuissa moduuleissa tätä ei ole. Siellä on kaikki kaunista, paitsi joukko johtoja.

MAX72xx Panel -kirjasto on melko vaatimaton. Visuaaliset tehosteet ei ole johtopäätöstä. Klusteri nähdään yhtenä kokonaisuutena. Asiat ovat paljon paremmin MD Parolan kanssa.

MajicDesignsin Parola.

SOIC-paketissa sirulla varustettujen moduulien omistajat kohtaavat myös ongelman moduulien suuntaamisessa klusterissa. Se vain näyttää hieman erilaiselta kuin MAX72xx. Tässä moduulit näyttävät olevan epäkunnossa.


HelloWorld-luonnos kirjaston mukana olevista näytteistä.

En pystynyt parantamaan tätä tautia ohjelmallisesti luonnoksessa. Kohtelin häntä eri tavalla. Tiedoston Adruino/libraries/MD_MAX72xx_lib.h lopusta tulee löytää kuvan mukaiset rivit.


Ja korjaa korostettu 1 arvoksi 0 valitulla rivillä. Tallenna tiedosto. Arduino IDE:tä ei tarvitse käynnistää uudelleen. Täytetään se ja katsotaan.


Voit nyt käyttää 24 animaatiotehostetta. Animaatio käynnistetään komennolla P.displayText("Näytettävä teksti", "tekstin tasaus", nopeus, näyttöviive, ulkoasuefekti, katoamisefekti). Kuten näet, asetuksia on melko paljon.

Ja eniten nautintoa on klusterin jakaminen virtuaaliset vyöhykkeet. Työskentely vyöhykkeiden kanssa ei ole kovin vaikeaa. En julkaise luonnosta, se on kirjaston mukana tulevissa näytteissä. Nyt voit näyttää kellon klusterin alussa ja uutiskellon jäljellä olevissa moduuleissa lähes ilman ongelmia.

Kuten jo arvasit, ongelma on kyrillisissä kirjaimissa. Se on myös ratkaistavissa. Vieressä edellinen tiedosto samassa hakemistossa on tiedosto MD_MAX72xx_font.cpp. Tämä on fonttitiedosto. Sen merkit muodostetaan samalla tavalla kuin GFX-kirjastofonttitiedosto. Siinä on pieni ero. Tässä symbolin koko voi olla pienempi kuin 5 pistettä. Adafruit GFX -kirjastossa huutomerkki Esimerkiksi , on myös 5 pistettä leveä, kuten mikä tahansa muu symboli, vain yksi pisterivi on käytössä. Loput eivät syty, vaan niitä käytetään symboleina. Parolassa sama huutomerkki on myös yhdellä pisterivillä, mutta lähellä ei ole tyhjiä pisteitä, vaan vierekkäisiä symboleja voi esiintyä. Se on selkeämpi ymmärtää kuvasta.


Ei ole vielä aikaa lisätä kyrillisiä merkkejä tiedostoon samalla tavalla kuin ensimmäisen käsitellyn kirjaston tiedosto. Jos joku tekee tämän ja lähettää minulle tiedoston, lisään sen tähän artikkeliin, ja sekä minä että sivustoni vieraat olemme sinulle kiitollisia.

Bottom line. Mark Ricen MAX72xx Panel -kirjasto on helppokäyttöinen ja ymmärrettävä, mutta sen toimivuus on heikko.

MajicDesignsin Parola-kirjasto on monimutkaisempi ja sen ominaisuudet riittävät lähes kaikkiin sovelluksiin.

Hei hyvät LPgeneratorin käyttäjät!

Huomaa: fontin yhdistämiseksi tavallisella tavalla, käytä valmista työkalua. Sitä on helppo käyttää ja voit lisätä lisäfontteja ilman ylimääräistä vaivaa:

Tässä viestissä opit lisäämään lisäfontin aloitussivullesi käyttämällä Google-palvelu Fontit lisäämällä skriptejä.

2. Muista ilmoittaa aakkoset eli merkkisarja.

Jos aloitussivu on venäjäksi, valitse latina ( latina) ja kyrillinen ( Kyrillinen):

3. Valitse haluamasi kirjasimet ja napsauta " +":

4. Siirry lisättyjen fonttien kokoelmaan. Voit tehdä tämän napsauttamalla alla olevaa mustaa palkkia:

5. Avautuvan ikkunan ensimmäinen kohde näyttää aiemmin valitut fontit.

Muista: käytä suuri määrä erilaisia ​​fontteja Google-kirjasimet voi hidastaa aloitussivusi latausaikaa. Valittujen tyylien vaikutus sivun latausnopeuteen näkyy oikealla.

6. Jos asetettu ja ulkonäkö olet tyytyväinen lisättyihin fontteihin, siirry "EMBED"-osioon ja kopioi "STANDART"-kentän sisältö kokonaan:

Älä sulje Google-välilehti Fontit, tarvitsemme niitä myöhemmin.

Avaa haluamasi aloitussivu LPgenerator-editorissa ja napsauta työkalua "Skriptit":

  • napsauta avautuvassa ikkunassa "Lisää uusi kirjoitus";
  • kirjoita käsikirjoituksen nimi;
  • valitse skriptin paikka "HEAD-tunnisteen sisällä";
  • liitä kopioitu koodi;
  • älä unohda tallentaa muutoksiasi.

7. Palaa Google Fonts -välilehteen.

Kopioi CSS-koodi, joka on luotu ladattujen fonttien käyttöä varten.

Kukin fontti käyttää omaa CSS-koodiaan.

Esimerkiksi Lobster-fontin koodi näyttää tältä: font-family: "Lobster", kursiivinen;

8. Palaa LPgenerator-editoriin ja napsauta elementtiä (tekstiä tai painiketta), johon haluat käyttää ladattua fonttia.

Tyylien käytössä on ominaisuuksia erilaisia ​​elementtejä aloitussivu.

CTA-elementit

Jos haluat muuttaa painikkeen kirjasintyyliä, napsauta sitä ja lisää oikealla oleviin lisäominaisuuksiin fontille CSS (kopioitu vaiheessa kahdeksan).

Aloitussivun tekstilohkot

Ulkoisen kirjasimen käyttämiseksi tekstilohkoon, jonka fontin olet jo vaihtanut, ei riitä, että määrität tyylin sen lisäominaisuuksissa. Sinun on myös nollattava nykyinen muotoilu. Voit tehdä tämän valitsemalla tekstin ja napsauttamalla "Poista muotoilu" -painiketta tekstin muokkauslohkossa.

Huomaa: Tämä nollaa kaikki muutokset, jotka olet tehnyt kirjasinkokoon, fontin tyyliin, tasaukseen jne.

Voit sitten määrittää koon, tasauksen ja muut attribuutit uudelleen.

Jos tekstilohko aloitussivulla luodaan ensimmäistä kertaa, etkä ole vaihtanut sen fonttia, napsauta sitten tekstiä ja lisää CSS fontille elementin lisäominaisuuksiin.

9. Tallenna muutokset ja ihaile tulosta.

Huomaa: LPgenerator-editorissa kirjasin pysyy samana. Muut kirjasimet näkyvät vain esikatselussa ja julkaistulla aloitussivulla.

LED Matrix on graafinen ilmaisin, jota voidaan käyttää näyttämään yksinkertaisia ​​kuvia, kirjaimia ja numeroita. Tutustuimme matriisiindikaattoreiden rakenteeseen yksityiskohtaisesti osoitteessa. Sitten kävi selväksi, että useiden matriisien ryhmittely yhteen ei ole helppo tehtävä. Jokaiselle uusi rivi tai matriisien sarake, sinun on lisättävä uusi siirtorekisteri johtoineen ja vastuksineen, ja sovinnollisesti myös ULN2003-mikropiiri.

Onneksi insinöörit ovat jo pitkään kehittäneet erikoistuneita mikropiirejä erilaisten indikaattoreiden ohjaamiseen. Tässä opetusohjelmassa tarkastellaan matriisimoduulia, jossa on MAX7219-siru. Kuten myöhemmin käy ilmi, työskentely tällaisen moduulin kanssa on ilo.

1. LED-matriisimoduuli MAX7219-sirun kanssa

Moduuli on levy, jossa on mikropiiri, siihen tarvittavat johdotukset ja itse asiassa matriisiosoitin. Yleensä ilmaisinta ei juoteta levyyn, vaan se työnnetään liittimeen. Tämä tehdään siten, että moduuliryhmä voidaan ensin kiinnittää johonkin pintaan ruuveilla ja sitten matriisit työnnetään niihin.

Ja tältä moduuli näyttää matriisin kanssa.

Moduulin kummallakin puolella on viisi nastaa. Toisella puolella data tulee moduuliin, toisaalta data poistuu moduulista ja siirretään seuraavaan. Tämän avulla voit yhdistää matriiseja ketjuun.

Tuloliitin:

  • VCC, GND - virtalähde;
  • DIN - tiedonsyöttö;
  • CLK - synkronointipulssi.

Lähtöliitin:

  • VCC, GND - virtalähde;
  • DOUT - tiedonanto;
  • CS - moduulin valinta (sirun valinta);
  • CLK - synkronointipulssi.

Moduuli toimii 5 voltin jännitteellä.

Yhteys

Yhdistämme matriisimoduulin Arduino Uno -ohjaimeen seuraavan kaavion mukaisesti:

8x8 LED-matriisi MAX7219:llä VCC GND CIN C.S. CLK
Arduino Uno +5V GND 11 9 13

Kaaviokaavio

Asettelun ulkonäkö

2. Pikselien tulostaminen Max72xxPanel-kirjaston avulla

MAX7219-sirun ohjaamiseen käytämme kirjastoa Max72xxPanel. Voit ladata sen oppitunnin lopussa olevista linkeistä.

Asennetaan kirjasto ja kirjoitetaan pieni ohjelma, joka näyttää vain yhden pisteen koordinaatilla x=3 ja y=4. Piste vilkkuu 600 millisekunnin ajan.

#sisältää #sisältää #sisältää int pinCS = 9; int numberOfHorizontalDisplays = 1; // matriisien lukumäärä vaakasuunnassa int numberOfVerticalDisplays = 1; // matriisien määrä pystysuunnassa Max72xxPanel matriisi = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); void setup() ( matrix.setIntensity(4); // kirkkaus 0 - 15 ) void loop() ( matrix.drawPixel(3, 4, HIGH); // valaise pikseli koordinaatteilla (3,4) matriisi. kirjoittaa ();

Kuten aiemmin mainittiin, matriisimoduulit, joissa on MAX7219-siru, voidaan yhdistää helposti. Tätä tarkoitusta varten asetamme ohjelman alussa matriisien lukumäärän vaaka- ja pystysuunnassa. Tässä tapauksessa käytetään yhtä matriisia, joten molemmat parametrit ovat yhtä suuria kuin 1.

On tärkeää huomata, että pikselien päälle- ja poiskytkemisen jälkeen toimintoa käyttämällä piirrä pikseliä, sinun on kutsuttava toiminto kirjoittaa. Ilman kirjoitustoimintoa pikselit eivät näy matriisissa!

Nyt kirjoitetaan ohjelma, joka näyttää hymiön menneisyydestä matriisiin. Salaamme hymyn kahdeksan tavun joukolla. Jokainen taulukon tavu on vastuussa matriisin rivistä ja jokainen tavun bitti vastaa rivin pisteestä.

#sisältää #sisältää #sisältää int pinCS = 9; int numberOfHorizontalDisplays = 1; // matriisien lukumäärä vaakasuunnassa int numberOfVerticalDisplays = 1; // matriisien määrä pystysuunnassa Max72xxPanel matriisi = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); const-tavun tiedot = ( 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b001); void setup() ( matrix.setIntensity(7); // kirkkaus 0 - 15 matrix.fillScreen(LOW); // matriisin tyhjennys kohteelle (int y = 0; y< 8; y++) { for (int x = 0; x < 8; x++) { // зажигаем x-й пиксель в y-й строке matrix.drawPixel(x, y, data[y] & (1<

Huom. Max72xxPanel-kirjastossa on setRotation-toiminto, joka määrittää kuvan suunnan matriisissa. Jos esimerkiksi haluamme kiertää hymiötä 90 astetta, meidän on kutsuttava setRotation sopivilla argumenteilla heti setIntensity-funktion kutsumisen jälkeen:

matrix.setRotation(0, 1);

ensimmäinen parametri on matriisiindeksi, tässä tapauksessa se on nolla; toinen parametri on 90 asteen kierrosten lukumäärä.

3. Tekstin tulostus käyttämällä Adafruit-GFX-Librarya

Samalla tavalla voit näyttää minkä tahansa muun symbolin, esimerkiksi kirjaimen, matriisissa. Mutta jotta voimme näyttää minkä tahansa englannin aakkosten kirjaimen, meidän on määritettävä ohjelmaan jopa 26 kahdeksantavuista taulukkoa! Tämä on erittäin tylsää, ja tietysti joku on tehnyt tämän jo ennen meitä.

Suosittu Adafruit-GFX-Library sisältää grafiikan ja tekstin kanssa työskentelyyn tarkoitettujen toimintojen lisäksi myös tietokannan latinalaisista kirjaimista isoilla ja pienillä kirjaimilla sekä kaikki välimerkit ja muut palvelusymbolit. Linkki kirjastoon on oppitunnin lopussa.

Voit näyttää symbolin matriisissa käyttämällä toimintoa drawChar.

drawChar(x, y, merkki, väri, tausta, koko);

Toiminnon kaksi ensimmäistä parametria vastaavat symbolin vasemman yläkulman koordinaateista. Kolmas parametri on itse symboli. Symbolin väri meidän tapauksessamme on yhtä suuri kuin 1 tai KORKEA, koska matriisi on kaksivärinen. Tausta on 0 tai LOW. Asetetaan viimeiseksi parametriksi "koko" 1.

Kirjoitetaan ohjelma, joka näyttää yksitellen matriisissa kaikki lauseen "HELLO WORLD" kirjaimet!

#sisältää #sisältää #sisältää int pinCS = 9; int numberOfHorizontalDisplays = 1; int NumberOfVerticalDisplays = 1; Max72xxPanelmatriisi = Max72xxPanel(pinCS, vaakasuuntaisten näyttöjen lukumäärä, pystynäyttöjen lukumäärä); String tape = "HELLO WORLD!"; int odottaa = 20; void setup() ( matrix.setIntensity(7); // kirkkaus 0 - 15 ) void loop() ( for (int i = 0 ; i< tape.length(); i++) { matrix.fillScreen(LOW); matrix.drawChar(0, 0, tape[i], HIGH, LOW, 1); matrix.write(); } delay(wait); }

Huom. Adafruit_GFX-kirjastossa on monia toimintoja grafiikan kanssa työskentelemiseen. Esimerkiksi drawCircle(3, 3, 2, HIGH) piirtää ympyrän, jonka keskipiste (3,3) ja säde 2. Viimeinen parametri on väri, mutta yksivärisen matriisin tapauksessa se on 1 tai HIGH. DrawLine(0, 0, 3, 6, HIGH) -funktio piirtää viivan pisteiden (0,0) ja (3,6) väliin.

3. Ohjelma. Hiipivä viiva max7219:ssä

Jos haluat näyttää useita kirjaimia kerralla, meidän on yhdistettävä useita LED-matriiseja ketjuun. Kuten aiemmin mainittiin, tämä tehdään hyvin yksinkertaisesti. Kaavio kuuden moduulin liittämiseksi näyttää tältä.

Kaaviokaavio

Asettelun ulkonäkö

Ohjelmoida

Teemme juoksuviivan siirtämällä kirjainten koordinaatteja. Kirjaimen näyttämiseksi vaadituissa koordinaateissa käytämme samaa drawChar-toimintoa.

#sisältää #sisältää #sisältää int pinCS = 9; int numberOfHorizontalDisplays = 6; // nyt meillä on 6 matriisia vaakasuunnassa int numberOfVerticalDisplays = 1; // ja pystysuunnassa, kuten ennenkin, on yksi Max72xxPanel-matriisi = Max72xxPanel(pinCS, vaakasuuntaisten näyttöjen lukumäärä, pystynäyttöjen lukumäärä); String tape = "sivusto"; // kelluva teksti int wait = 20; // kirjainten ääriliikkeiden välinen aika int spacer = 1; // kirjainten välinen etäisyys int leveys = 5 + välilyönti; // fontin koko void setup() ( matrix.setIntensity(7); // kirkkaus ) void loop() ( for (int i = 0 ; i< width * tape.length() + matrix.width() - 1 - spacer; i++) { matrix.fillScreen(LOW); int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; // center the text vertically while (x + width - spacer >= 0 && kirjain >= 0) ( if (kirjain< tape.length()) { matrix.drawChar(x, y, tape, HIGH, LOW, 1); } letter--; x -= width; } matrix.write(); delay(wait); } }

Lataa ohjelma Arduino Unoon ja katso tickeriä!

Tehtävät

  1. Elektroninen kello. Kokoa neljän LED-matriisin piiri ja reaaliaikakellomoduuli. Kirjoita Arduinolle ohjelma, joka näyttää tunnit ja minuutit näytöllä matriiseista.
  2. Käärme peli. Kokoa näyttö, jonka resoluutio on 16x16 pikseliä neljästä LED-matriisista. Toteuta sellainen kuuluisa peli kuin "snake" (tai "python") Arduinossa. Piiriin on lisättävä neljä painiketta liikesuunnan ohjaamiseksi sekä summeri omenoiden syömistapahtuman ilmoittamiseksi.

Johtopäätös

Kytkemällä yhteen max7219:n matriisimoduuleja, voit koota melko suuria näyttöjä ja käyttää niitä Arduino-projekteissa, joissa tarvitaan kirkkaita kuvia. LED-näytöt, toisin kuin nestekidenäyttö, kestävät alhaisia ​​lämpötiloja. Esimerkiksi matriiseista tehty ticker voidaan sijoittaa ulos jopa 30 asteen pakkasessa.

Max7219-pohjaisten yksiväristen matriisimoduulien lisäksi on olemassa muita vastaavia laitteita. Esimerkiksi kolmiväriset LED-näytöt, joiden resoluutio on 32x16 ja jopa 64x32 pikseliä. Puhumme tällaisista moduuleista seuraavissa tunneissa ja artikkeleissa.

Hyödyllisiä linkkejä

1. Kirjasto Max72xxPanel:

2. Kirjasto Adafruit-GFX-kirjasto.

13. tammikuuta 2017 klo 18.15

OpenGLCD-kirjaston venäläistäminen Arduinolle

  • Elektroniikka aloittelijoille

Kirjoittaminen Venäjän teksti graafisilla näytöillä ks0108-ohjaimella tai sen analogeilla on edelleen merkittäviä vaikeuksia. OpenGLCD-kirjasto, jota viralliset Arduinon verkkosivustot suosittelevat, jälkimmäisen alkuperäisessä kokoonpanossa tällä hetkellä versio ei sisällä yhtään Kyrilliset fontit, paitsi kirjasin cp437font8x8. Käytännössä siitä on vähän hyötyä, koska se tukee venäjänkielisessä osassa Win-1251-koodausta. Siksi, jotta merkit näyttäisivät tässä fontissa, ne on joko lisättävä tekstiin oktaalina tai heksadesimaalikoodit(ja samalla on edelleen epäselvyyksiä pieni kirjain"Minä", kuten fontin luoja itse huomauttaa kommentissa), tai silti kirjoittaa erillisen muunnosfunktion, kuten arduinec teki Adafruit-GFX-kirjastolle.

Muun muassa cp437font8x8 on liian suuri 128x64 pikselin näytöille. Optimaalinen koko Tällaisen näytön tarrojen tukemisen fontti on edelleen System5x7. Tässä keskitymme erityisesti venäläistämiseen järjestelmän fontti, vaikka lukija voi käyttää tätä esimerkkiä itsenäisesti venäläistääkseen minkä tahansa muun fontin (varsinkin jos sillä on suurempi näyttö).

Mikä on ongelma?

Ensin syvennytään ongelman juuriin. Arduino IDE on tavallinen tekstieditori Windows, joka toimii yleisellä UTF-8-koodauksella, kuten mikä tahansa muu nykyaikainen Windows-versiot(esimerkiksi Muistilehtiö). UTF-8 on edullinen versio monitavusta UNICODE-koodaukset. UTF-8:ssa englanninkielisiä merkkejä, numeroita, pisteitä, pilkkuja, sulkeita ja kaikenlaisia ​​muita merkkejä edustaa yksi tavu, joka vastaa tavallista ASCII-koodausta. Siksi niiden esittäminen luonnoskoodissa ei aiheuta vaikeuksia: englanninkielinen merkkijono kääntämisen jälkeen siirretään ladattuihin hex-tiedostoon ilman muutoksia ja on ymmärrettävissä 8-bittiselle ohjaimelle, kuten sanotaan, "ilman käännöstä".

Tämän muunnoksen prosessissa jokainen merkki, kuten missä tahansa ohjelmassa millä tahansa ohjelmointikielellä, esitetään suoraan koodinsa muodossa, joka on sarjanumero fonttitaulukossa, josta ohjelma poimii vastaavan merkin graafisen tyylin. Fonttitiedostossa Järjestelmä5x7.h openGLCD-kirjasto muuttujan edustamien merkkien lukumäärä font_Char_Count tyyppi uint8_t, eli se ei voi ylittää yhden tavun kokoa. Siksi Kyrilliset merkit, jotka vievät kaksi tavua UTF-8:ssa, ei voi välittää ohjaimelle normaalilla tavalla.

Aiemmat ratkaisuyritykset

Huomaa, että näin ei aina ollut. Arduino 1.0.x:n (ja huhujen mukaan 1.6.0:n) versiot katkaisivat kaksitavuisen koodin yhdeksi tavuksi yksinkertaisesti hylkäämällä korkean tavun (joka kyrilliselle, kuten yllä olevan linkin UTF-8-taulukosta seuraa , on joko 0xD0 tai 0xD1). Siksi fontin tarkentamiseen näissä ympäristön versioissa sopii vanha GLCD v3 -kirjasto, jossa fonttitaulukkoa on yksinkertaisesti täydennetty kyrillisillä kirjainmerkeillä niin, että niiden paikat osuivat yhteen UTF-8-koodauksen matalan tavun kanssa (tavua 0x80 - 0xBF). Tämä modernisointi on kuvattu yksityiskohtaisemmin kirjoittajan artikkelissa "Tekstityöskentely graafisessa näytössä". Toistan - se vaatii yhden Arduino IDE 1.0.x -versioista yhdessä GLCD v3 -kirjaston kanssa, ei niiden nykyaikaisempia versioita.

Arduino IDE:n uusissa versioissa siitä on tullut yhä vaikeampaa. Kirjasto kieltäytyy päättäväisesti ymmärtämästä kaksitavuisia merkkinumeroita ja tulostaa sen sijaan tyhjää tilaa, joten pelkkä fontin vaihtaminen ei auta. Meidän on täydennettävä sitä funktiolla, joka muuntaa kaksitavuisia merkkejä yksitavuisiksi.

Ratkaisu

Kirjoittaja ei syventynyt kirjastotoimintojen syvyyksiin, vaan kirjoitti lisäosan openGLCD:lle funktion muodossa outstr(), joka toistuu syötemerkkijonon kaikkien elementtien läpi ja välittää ne valintaoperaattorin kautta Kytkin. Se poimii kyrilliset merkit merkkijonosta ja korvaa ne yksitavuisilla koodeilla, jotka vastaavat modernisoitua fonttitiedostoa Järjestelmä5x7R.h.

Esimerkiksi ison venäläisen kirjaimen "F" korvaava merkkijono on seuraava:

Tapaus "F": GLCD.PutChar(0xA4); tauko;
Tässä 0xA4 on alhainen tavu kirjaimen "F" koodauksessa UTF-8:ssa (katso linkki yllä). Käytetty tämän koodauksen mukaisesti uusi tiedosto fontti Järjestelmä5x7R.h. Periaatteessa tällä lähestymistavalla voit käyttää mitä tahansa venäläisten merkkien koodausta ja mitä tahansa muita kuvioita, jotka haluat lisätä fonttiin. Jos vain niiden kokonaismäärä ei ylitä 128 kappaletta: taulukon alusta symboliin 0x7F (127 on viimeinen symboli vakiopöytä ASCII) on suositeltavaa jättää fontti ennalleen.

Totta, pari vapautta ASCII-taulukko Annoin itselleni luvan. Tosiasia on, että alkuperäisellä fontilla Järjestelmä5x7.h Astekuvake sijoitetaan taulukon viimeiselle riville symbolilla 0x80, joka meidän tapauksessamme kuuluu jo kyrillisiin aakkosiin. Tämä rivi poistetaan tiedostosta, jotta se ei riko kyrillisen taulukon muodostamisjärjestystä UTF-8:n mukaisesti. Ja asteen kuvake on liitetty sen sijaan ASCII-merkki"~" (numero 0x7E), jota ei muutenkaan käytetty fontissa aiottuun tarkoitukseen. Mutta tämän korvauksen avulla voit syöttää astekuvakkeen luonnoksen tekstiin suoraan näppäimistöltä "~" -symbolin muodossa.

Toinen vapaus johtuu siitä, että kirjoittaja ei voi sietää yliviivattua nollaa - arkaaista asiaa ATsPU:n ja yksiväristen tekstinäyttöjen ajoilta. Siksi modernisoidun fontin nolla on korvattu O-kirjaimen glyfillä. Ne, jotka noudattavat puristisia periaatteita, voivat yksinkertaisesti poistaa fontin tiedostosta Järjestelmä5x7R.h tämä lisäys (siellä olevan yliviivatun nollan vanha merkki on jätetty pois kommentoidusti, sen koodi on 0x30).

Uudistetussa kirjastossa openGLCD, jonka voit ladata artikkelin lopussa olevasta linkistä, toinen korjaus on tehty - näyttöjen nastojen kytkentäjärjestystä ks0108-ohjaimen kanssa on muutettu. Miksi kirjaston kirjoittaja valitsi tämän tilauksen (katso taulukko Arduinon virallisen verkkosivuston linkissä), ei tiedetä. Modernisoidussa versiossa näyttöliitäntä (esimerkiksi valittu suosittu MT-12864J) suoritetaan seuraavan kaavion mukaan:

Kytkentäkaavio MT-12864J


Muuttuva vastus R1 on kytketty tähän valmistajan suositusten mukaisesti, ja vastus R2 rajoittaa taustavalon virtaa, jos sitä ei ole kytketty 5 V:n jännitteeseen, vaan suoraan tulovirtalähteeseen (Arduino Vin -nasta), jolla on korkeampi jännite.

Kuvassa on esimerkki venäläisten aakkosten näyttämisestä latinalla sekoitettuna MT-12864J-näytöllä sekä numerot ja astekuvake:


Luonnosteksti tälle esimerkille:

Luonnoksen teksti venäjän aakkosten tulosteella

#sisältää //sisällytä kirjasto #sisällytä //tiedosto, jossa on toiminto venäläisten kirjainten tulostamiseen #include //tiedosto venäläisillä kirjainkoodeilla void setup() ( GLCD.Init(); //alustaminen GLCD.ClearScreen(); ) void loop() ( GLCD.SelectFont(System5x7R); //valitse fontti GLCD.CursorTo(0 , 0 //asettaa kohdistimen alkuasentoon //tulostaa sekalaiset englanninkieliset rivit: outstr("PRQ RSTUFHTSCHSHYYYAY\n"); GLCD.println("1234567890"); ;/.,|<>()=-_()\"""); GLCD.CursorTo(4,7); //asettaa kohdistimen rivin 8 kohtaan 4 GLCD.print("MT-12864J"); )


Koska tiedostot funktiolla outstr.h ja fontti Järjestelmä5x7R.h sijoitettu sisään juurihakemisto modernisoitu kirjasto, niin luonnoksen alkuun tulee sijoittaa niihin erilliset linkit ohjeen avulla #sisältää. Englanninkielisille kirjoituksille se on edelleen kätevä käyttää vakioominaisuudet println/print, mutta jos tarvitset venäjänkielisen rivinsiirron, sinun on määritettävä \n-merkki erikseen.

Voit ladata kirjaston korjatun version