Skriftbibliotek for LCD-skjermer. Hvordan legge til flere fonter på landingssider i LPgenerator

LED-matrisen er en grafisk indikator som kan brukes til å vise enkle bilder, bokstaver og tall. Vi ble nærmere kjent med strukturen til matriseindikatorer på. Da ble det klart at gruppering av flere matriser ikke er en enkel oppgave. For hver ny rad eller kolonne med matriser må du legge til et nytt skiftregister sammen med ledninger og motstander, og på en vennskapelig måte også en ULN2003-brikke.

Heldigvis har ingeniører lenge utviklet spesialiserte mikrokretser for å kontrollere ulike typer indikatorer. I denne opplæringen skal vi se på matrisemodulen med MAX7219-brikken. Som det vil bli klart senere, er det en glede å jobbe med en slik modul.

1. LED-matrisemodul med MAX7219-brikke

Modulen er et kort med en mikrokrets, den nødvendige ledningen for den og faktisk en matriseindikator. Vanligvis er indikatoren ikke loddet inn i brettet, men satt inn i kontakten. Dette gjøres slik at en gruppe moduler først kan festes til en overflate med skruer, og deretter kan matrisene settes inn i dem.

Og slik ser modulen ut med matrisen.

Modulen har fem pinner på hver side. På den ene siden kommer data inn i modulen, på den andre siden går data ut av modulen og overføres til den neste. Dette lar deg koble matriser i en kjede.

Inngangskontakt:

  • VCC, GND - strømforsyning;
  • DIN - datainngang;
  • CLK - synkroniseringspuls.

Utgangskontakt:

  • VCC, GND - strømforsyning;
  • DOUT - datautgang;
  • CS - modulvalg (brikkevalg);
  • CLK - synkroniseringspuls.

Modulen fungerer på en spenning på 5 volt.

Forbindelse

Vi kobler matrisemodulen til Arduino Uno-kontrolleren i henhold til følgende skjema:

8x8 LED-matrise med MAX7219 VCC GND CIN C.S. CLK
Arduino Uno +5V GND 11 9 13

Skjematisk diagram

Layout utseende

2. Utdata piksler ved hjelp av Max72xxPanel-biblioteket

For å kontrollere MAX7219-brikken vil vi bruke biblioteket Max72xx Panel. Du kan laste den ned fra lenkene på slutten av leksjonen.

La oss installere biblioteket og skrive et lite program som viser bare ett punkt med koordinatene x=3 og y=4. Prikken vil blinke med en periode på 600 millisekunder.

#inkludere #inkludere #inkludere int pinCS = 9; int numberOfHorizontalDisplays = 1; // antall matriser horisontalt int numberOfVerticalDisplays = 1; // antall matriser vertikalt Max72xxPanel matrise = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); void setup() ( matrix.setIntensity(4); // lysstyrke fra 0 til 15 ) void loop() ( matrix.drawPixel(3, 4, HIGH); // lys pikselen med koordinater (3,4) matrise. skriv (); // ut alle piksler til matriseforsinkelsen(300); matrix.drawPixel(3, 4, LOW); // blank ut pikselmatrisen.write(); delay(300); )

Som nevnt tidligere kan matrisemoduler med MAX7219-brikken enkelt kombineres. Det er for dette formålet at vi i begynnelsen av programmet setter antall matriser horisontalt og vertikalt. I dette tilfellet brukes en matrise, så begge disse parameterne vil være lik 1.

Det er viktig å merke seg at etter å ha slått piksler på og av ved å bruke funksjonen drawPixel, må du kalle opp funksjonen skrive. Uten skrivefunksjonen vil ikke pikslene vises på matrisen!

La oss nå skrive et program som viser en smiley fra fortiden på matrisen. Vi vil kryptere smilet ved å bruke en rekke på åtte byte. Hver byte i matrisen vil være ansvarlig for en rad i matrisen, og hver bit i byten vil være ansvarlig for et punkt i raden.

#inkludere #inkludere #inkludere int pinCS = 9; int numberOfHorizontalDisplays = 1; // antall matriser horisontalt int numberOfVerticalDisplays = 1; // antall matriser vertikalt Max72xxPanel matrise = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); const byte data = ( 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b001); void setup() ( matrix.setIntensity(7); // lysstyrke fra 0 til 15 matrix.fillScreen(LOW); // sletter matrisen for (int y = 0; y< 8; y++) { for (int x = 0; x < 8; x++) { // зажигаем x-й пиксель в y-й строке matrix.drawPixel(x, y, data[y] & (1<

Merk. Max72xxPanel-biblioteket har en setRotation-funksjon, som setter retningen til bildet på matrisen. For eksempel, hvis vi ønsker å rotere en smiley 90 grader, må vi kalle setRotation med de riktige argumentene umiddelbart etter å ha kalt setIntensity-funksjonen:

matrix.setRotation(0, 1);

den første parameteren er matriseindeksen, i vårt tilfelle er den lik null; den andre parameteren er antallet 90 graders svinger.

3. Tekstutgang ved hjelp av Adafruit-GFX-Library

På samme måte kan du vise et hvilket som helst annet symbol, for eksempel en bokstav, på matrisen. Men for å kunne vise hvilken som helst bokstav i det engelske alfabetet, må vi definere så mange som 26 åtte-byte arrays i programmet! Dette er veldig kjedelig, og noen har selvfølgelig allerede gjort dette før oss.

I tillegg til funksjoner for å jobbe med grafikk og tekst, inneholder det populære Adafruit-GFX-Library også en database med latinske bokstaver med store og små bokstaver, samt alle skilletegn og andre tjenestesymboler. Lenken til biblioteket er på slutten av leksjonen.

Du kan vise et symbol på en matrise ved hjelp av funksjonen drawChar.

drawChar(x, y, karakter, farge, bakgrunn, størrelse);

De to første parameterne til funksjonen er ansvarlige for koordinatene til øvre venstre hjørne av symbolet. Den tredje parameteren er selve symbolet. Fargen på symbolet i vårt tilfelle vil være lik 1 eller HØY, siden matrisen er tofarget. Bakgrunnen er 0 eller LAV. La oss sette den siste parameteren "størrelse" til 1.

La oss skrive et program som en etter en viser alle bokstavene i setningen på matrisen: "HELLO VERDEN!"

#inkludere #inkludere #inkludere int pinCS = 9; int numberOfHorizontalDisplays = 1; int numberOfVerticalDisplays = 1; Max72xxPanel matrise = Max72xxPanel(pinCS, numberOfHorizontal Displays, numberOfVerticalDisplays); String tape = "HELLO WORLD!"; int vente = 20; void setup() ( matrix.setIntensity(7); // lysstyrke fra 0 til 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); }

Merk. Adafruit_GFX-biblioteket har mange funksjoner for arbeid med grafikk. For eksempel vil drawCircle(3, 3, 2, HIGH) tegne en sirkel med sentrum (3,3) og radius 2. Den siste parameteren er farge, men i tilfelle en monokrom matrise er den 1 eller HØY. Funksjonen drawLine(0, 0, 3, 6, HIGH) vil tegne en linje mellom punktene (0,0) og (3,6).

3. Program. Krypende line på max7219

For å vise flere bokstaver samtidig, må vi koble sammen flere LED-matriser i en kjede. Som nevnt tidligere, gjøres dette veldig enkelt. Diagrammet for tilkobling av seks moduler vil se slik ut.

Skjematisk diagram

Layout utseende

Program

Vi vil lage en løpende linje ved å forskyve koordinatene til bokstavene. For å vise bokstaven i de nødvendige koordinatene bruker vi den samme drawChar-funksjonen.

#inkludere #inkludere #inkludere int pinCS = 9; int numberOfHorizontalDisplays = 6; // nå har vi 6 matriser horisontalt int numberOfVerticalDisplays = 1; // og vertikalt, som før, er det én Max72xxPanel-matrise = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); String tape = "site"; // tekst som vil flyte int wait = 20; // tid mellom ekstreme bevegelser av bokstaver int spacer = 1; // avstand mellom bokstaver int width = 5 + spacer; // skriftstørrelse void setup() ( matrix.setIntensity(7); // lysstyrke ) 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 && bokstav >= 0) ( if (bokstav< tape.length()) { matrix.drawChar(x, y, tape, HIGH, LOW, 1); } letter--; x -= width; } matrix.write(); delay(wait); } }

Last programmet inn på Arduino Uno og se tickeren!

Oppgaver

  1. Digital klokke. Sett sammen en krets med fire LED-matriser og en sanntidsklokkemodul. Skriv et program for Arduino som viser timer og minutter på skjermen fra matriser.
  2. Slangespill. Sett sammen en skjerm med en oppløsning på 16x16 piksler fra fire LED-matriser. Implementer et så kjent spill som "slange" (eller "python") på Arduino. Det er nødvendig å legge til fire knapper til kretsen for å kontrollere bevegelsesretningen, samt en summer for å signalisere hendelsen med å spise epler.

Konklusjon

Ved å koble sammen matrisemoduler på max7219 kan du sette sammen ganske store skjermer og bruke dem i Arduino-prosjekter der utgang av lyse bilder er nødvendig. LED-skjermer, i motsetning til flytende krystall-skjermer, er motstandsdyktige mot lave temperaturer. For eksempel kan en ticker laget av matriser plasseres ute selv i 30-graders frost.

I tillegg til enfargede matrisemoduler basert på max7219, finnes det andre lignende enheter. For eksempel trefargede LED-skjermer med en oppløsning på 32x16 og til og med 64x32 piksler. Vi vil snakke om slike moduler i følgende leksjoner og artikler.

nyttige lenker

1. Bibliotek Max72xx Panel:

2. Bibliotek Adafruit-GFX-bibliotek.

Endelig har matrisemodulene kommet fra Midtriket. Hver modul består av en MAX7219 () mikrokrets, en LED-matrise, og det er en kondensator og en motstand i selen.


Styres av MAX7219 via SPI-grensesnitt.


Brikkene i klyngen er koblet i serie. Jeg leste på Internett at maksimal mulig seriell tilkobling tillater bare 8 MAX7219 stykker. Ikke tro det. Jeg koblet til 16 moduler og alt fungerer utmerket.

Modulene som presenteres på Ali kommer i flere versjoner. De mest populære er 2 typer: med en brikke i DIP og i SOIC-pakker. Modulen med en DIP-brikke er større og ikke så praktisk når den er koblet til en klynge. Det vil være en haug med ledninger å koble til.


Moduler med brikke i en SOIC-pakke er på størrelse med en LED-matrise og kobles sammen med lodding eller jumpere. Det blir vakkert og pent.


De mest kjente bibliotekene for arbeid med matriser og klynger er MAX72xx Panel av Mark Rice Og Parola av MajicDesigns: Det første biblioteket er enklere å bruke, det andre er mer komplekst med flere muligheter. Jeg skal beskrive det mer detaljert.

MAX72xx Panel

Når du bruker MAX72xx Panel, må biblioteket være installert Adafruit GFX.

For å russifisere teksten må du laste ned DENNE FILEN og erstatte standard fil glcdfont.c i katalogen Arduino/Libraries/Adafruit-GFX-Library-master. Også i denne filen, i tillegg til de nødvendige bokstavene og tallene, er en haug med alle slags symboler beskrevet. Ikke alle kan være nyttige. Bildet nedenfor forklarer hvordan symbolene er dannet.

Om nødvendig kan du lage dine egne symboler og erstatte eventuelle ubrukte symboler i filen med dem. Nesten alle punktfonter som brukes i ulike biblioteker er dannet på lignende måte.

Så MAX72xx Panel og Adafruit GFX-bibliotekene er installert, glcdfont.c-filen erstattes. La oss lansere Arduino IDE, åpen FIL. Skissen inneholder funksjonen utf8rus. Det gir tegntabellkonvertering for det russiske språket. Det er bare nødvendig for normal utgang fra programmet, det vil si i programmet nødvendig tekst skrevet på russisk. Hvis tekst legges inn via COM-porten, blir tegnkodene korrigert i Serial_Read-funksjonen. Utviklerne brukte forskjellige kodinger i IDE og i konsollen.

I begynnelsen av filen er det nødvendige linjer for at biblioteket skal fungere.

int numberOfHorizontalDisplays = 1;

int numberOfVerticalDisplays = 16;

Jeg har moduler med mikrokrets i en SOIC-pakke. De har en liten særegenhet. Matrisen til modulene er installert rotert 90 grader. Dette er et gebyr for å gjøre tilkoblingen enklere. Hvis du kjører skissene som følger med bibliotekene, vil de skrive ut tekst fra bunn til topp i hver modul. Teksten vil vises i sikksakk. For å kurere dette problemet, må biblioteket bli "fortalt" at det er 16 vertikale skjermer (fysisk er de plassert horisontalt). Og deretter i void Setup spesifiser linjen til biblioteket

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

Den vil reversere hver matrise programmatisk. Og alt vil vises normalt.

Moduler med DIP-brikkepakker har ikke dette. Alt er vakkert der, bortsett fra en haug med ledninger.

MAX72xx Panel-biblioteket er ganske beskjedent. Visuelle effekter det er ingen konklusjon. Klyngen oppfattes som én helhet. Ting er mye bedre med MD Parola.

Parola av MajicDesigns.

Eiere av moduler med en chip i en SOIC-pakke vil også møte problemet med å orientere modulene i klyngen. Det ser bare litt annerledes ut enn i MAX72xx. Her vil modulene se ut til å være ute av drift.


HelloWorld skisse fra prøver som følger med biblioteket.

Jeg klarte ikke å kurere denne sykdommen programmatisk i skissen. Jeg behandlet ham annerledes. I filen Adruino/libraries/MD_MAX72xx_lib.h på slutten må du finne linjene som på bildet.


Og korriger den uthevede 1 til 0 i den valgte linjen. Lagre filen. Arduino IDE trenger ikke å startes på nytt. La oss fylle den opp og ta en titt.


Nå kan du bruke 24 animasjonseffekter. Animasjonen startes med kommandoen P.displayText("Tekst som skal vises", "tekstjustering", hastighet, visningsforsinkelse, utseendeeffekt, forsvinningseffekt). Som du kan se, er det ganske mange innstillinger.

Og det beste er å dele klyngen i virtuelle soner. Å jobbe med soner er ikke veldig vanskelig. Jeg legger ikke ut skissen, den er i prøvene som følger med biblioteket. Nå kan du vise en klokke i begynnelsen av klyngen og en nyhetsticker på de resterende modulene uten problemer, nesten.

Som du allerede har gjettet, er problemet med kyrilliske bokstaver. Det er også løsbart. Nær forrige fil i samme katalog er det en fil MD_MAX72xx_font.cpp. Dette er en fontfil. Tegnene i den er formet på samme måte som GFX-bibliotekets fontfil. Det er en liten forskjell. Her kan symbolstørrelsen være mindre enn 5 poeng. I Adafruit GFX-biblioteket Utropstegn, for eksempel, er også 5 prikker bred, som alle andre symboler brukes bare én rad med prikker. Resten lyser ikke, men brukes som symbol. I Parola opptar det samme utropstegnet også én rad med prikker, bare det er ikke tomme prikker i nærheten, men tilstøtende symboler kan dukke opp. Det vil være tydeligere å forstå fra bildet.


Det er ennå ikke tid til å legge til kyrilliske tegn til filen på samme måte som filen fra det første biblioteket som ble diskutert. Hvis noen gjør dette og sender meg en fil, vil jeg legge den til denne artikkelen, og både jeg og gjestene på siden min vil være deg takknemlig.

Bunnlinjen. MAX72xx Panel-biblioteket fra Mark Rice er enkelt å bruke og forstå, men har dårlig funksjonalitet.

Parola-biblioteket fra MajicDesigns er mer komplekst og dets evner er tilstrekkelige for nesten alle applikasjoner.

Hei, kjære LPgenerator-brukere!

Vennligst merk: for å koble til fonten på en standard måte, bruk et ferdig verktøy. Den er enkel å bruke og lar deg legge til ekstra fonter uten ekstra innsats:

I dette innlegget lærer du hvordan du legger til en ekstra font på landingssiden din ved å bruke Google-tjeneste Skrifter ved å legge til skript.

2. Sørg for å angi alfabetet, det vil si et sett med tegn.

Hvis landingssiden er på russisk, velg latin ( latin) og kyrillisk ( Kyrillisk):

3. Velg skriften(e) du liker, og klikk " +":

4. Gå til samlingen av lagt til fonter. For å gjøre dette, klikk på den svarte linjen nedenfor:

5. I vinduet som åpnes, viser det første elementet de tidligere valgte skriftene.

Husk: bruk stor kvantitet diverse Google fonter Skrifter kan gjøre at landingssiden din laster tregere. Effekten av de valgte stilene på sidelastingshastigheten vises til høyre.

6. Hvis settet og utseende du er fornøyd med de tillagte skriftene, gå til "EMBED"-delen og kopier innholdet i "STANDART"-feltet fullstendig:

Ikke lukk Google-fanen Fonter, vi trenger det senere.

Åpne ønsket landingsside i LPgenerator redaktør og klikk verktøyet "Skript":

  • i vinduet som åpnes, klikk "Legg til nytt skript";
  • skriv ned navnet på manuset;
  • velg skriptposisjonen "Inne i HEAD-taggen";
  • lim inn den kopierte koden;
  • ikke glem å lagre endringene dine.

7. Gå tilbake til Google Fonts-fanen.

Kopier CSS-koden som genereres for å bruke de innlastede skriftene.

Hver font bruker sin egen CSS.

For eksempel, for Lobster-fonten ser koden slik ut: font-family: "Hummer", kursiv;

8. Gå tilbake til LPgenerator-editoren og klikk på elementet (tekst eller knapp) som du vil bruke den nedlastede fonten på.

Det er funksjoner ved bruk av stiler for forskjellige elementer destinasjonsside.

CTA-elementer

For å endre skriftstilen på en knapp klikker du bare på den og i de avanserte egenskapene til høyre legger du til CSS for skriften (kopiert i trinn åtte).

Tekstblokker for landingssider

For å bruke en ekstern skrift på en tekstblokk som du allerede har endret skrift for, er det ikke nok å spesifisere stilen i dens avanserte egenskaper. Du må også tilbakestille gjeldende formatering. For å gjøre dette, velg teksten og klikk på "Fjern formatering"-knappen i tekstredigeringsblokken.

Merk: Dette vil tilbakestille eventuelle endringer du har gjort i skriftstørrelse, skriftstil, justering osv.

Du kan deretter spesifisere størrelse, justering og andre attributter igjen.

Hvis dette er første gang du har opprettet en tekstblokk på en landingsside og du ikke har endret fonten, kan du ganske enkelt klikke på teksten og legge til CSS for fonten i elementets avanserte egenskaper.

9. Lagre endringene og beundre resultatet.

Vennligst merk: i LPgenerator-editoren vil skriften forbli den samme; ytterligere fonter vises bare i forhåndsvisningen og når du besøker en publisert landingsside.

13. januar 2017 klokken 18.15

Russifisering av openGLCD-biblioteket for Arduino

  • Elektronikk for nybegynnere

Å skrive russiskspråklig tekst på grafiske skjermer med ks0108-kontrolleren eller dens analoger byr fortsatt på betydelige vanskeligheter. openGLCD-biblioteket, som anbefales av de offisielle Arduino-nettstedene, i den opprinnelige konfigurasjonen av sistnevnte på dette øyeblikket versjonen inneholder ingen Kyrilliske fonter, bortsett fra skriften cp437font8x8. I praksis er den til liten nytte fordi den i den russiskspråklige delen støtter Win-1251-koding. Derfor, for å vise tegn i denne fonten, må de enten settes inn i teksten som oktal eller heksadesimale koder(og samtidig gjenstår det uklarheter med liten bokstav"I", som skaperen av fonten selv påpeker i kommentaren), eller fortsatt skrive en egen konverteringsfunksjon, slik arduinec gjorde for Adafruit-GFX-biblioteket.

Blant annet er cp437font8x8 for stor for 128x64 pikslers skjermer. Optimal størrelse Fonten for å støtte etiketter på en slik skjerm forblir System5x7. Her vil vi fokusere på russifisering spesifikt systemfont, selv om leseren kan bruke dette eksemplet til uavhengig russifisere enhver annen font (spesielt hvis den har en større skjerm).

Hva er problemet?

Først, la oss fordype oss i røttene til problemet. Arduino IDE er en vanlig en tekstredigerer Windows, som kjører i den universelle UTF-8-kodingen, som alle andre i moderne versjoner Windows (Notepad, for eksempel). UTF-8 er en lavprisversjon av multi-byte UNICODE-koding. I UTF-8 er engelske tegn, tall, prikker, kommaer, parenteser og alle slags andre tegn representert av én byte, som samsvarer med standard ASCII-koding. Derfor byr ikke representasjonen deres i skissekoden på noen vanskeligheter: en streng med engelske tegn etter kompilering overføres til den innlastede hex-filen uten endringer og er forståelig for 8-bits kontrolleren, som de sier, "uten oversettelse."

I prosessen med denne transformasjonen blir hvert tegn, som i ethvert program i et hvilket som helst programmeringsspråk, representert direkte i form av sin kode, dvs. serienummer i fonttabellen, hvorfra programmet trekker ut den grafiske stilen til det tilsvarende tegnet. I fontfilen System5x7.h openGLCD-bibliotekets antall tegn representert av variabel font_Char_Count type uint8_t, det vil si kan ikke overskride størrelsen på én byte. Derfor kan ikke kyrilliske tegn, som opptar to byte i UTF-8, overføres til kontrolleren på vanlig måte.

Tidligere løsningsforsøk

Merk at dette ikke alltid var tilfelle. Versjoner av Arduino 1.0.x (og, ifølge rykter, 1.6.0) kuttet to-byte-koden til én-byte, og forkastet ganske enkelt den høye byten (som for kyrillisk, som følger fra UTF-8-tabellen i lenken ovenfor , er lik enten 0xD0 eller 0xD1). Derfor, for å avgrense skriften i disse versjonene av miljøet, er det gamle GLCD v3-biblioteket egnet, der fontarrayen ganske enkelt ble supplert med kyrilliske bokstavtegn, slik at deres posisjoner falt sammen med den lave byten til UTF-8-kodingen (bytes) 0x80 til 0xBF). Denne moderniseringen er beskrevet mer detaljert i forfatterens artikkel "Arbeid med tekst på et grafisk display". Jeg gjentar - det krever en av versjonene av Arduino IDE 1.0.x i forbindelse med GLCD v3-biblioteket, og ikke deres mer moderne versjoner.

I ny Arduino-versjoner IDE-er har blitt stadig mer komplekse. Biblioteket nekter resolutt å forstå dobbelbyte-tegntall, og sender ut tomrom i stedet, så det holder ikke å endre fonten. Vi må supplere den med en funksjon for å konvertere dobbelbyte-tegn til enkeltbyte-tegn.

Løsning

Forfatteren fordypet seg ikke i dybden av bibliotekfunksjoner, men skrev et tillegg for openGLCD i form av en funksjon outstr(), som itererer gjennom alle elementene i inndatastrengen, og sender dem gjennom utvalgsoperatoren Bytte om. Den trekker ut kyrilliske tegn fra en streng og erstatter dem med enkeltbytekoder som tilsvarer den moderniserte fontfilen System5x7R.h.

For eksempel, for den store russiske bokstaven "F" vil erstatningsstrengen være slik:

Sak "F": GLCD.PutChar(0xA4); gå i stykker;
Her er 0xA4 den lave byten for kodingen av bokstaven "F" i UTF-8 (se lenken over). Kompilert i samsvar med denne kodingen ny fil font System5x7R.h. I prinsippet, med denne tilnærmingen, kan du bruke hvilken som helst koding av russiske tegn og andre glyfer som du vil sette inn i skriften. Hvis bare deres totale antall ikke overstiger 128 stykker: fra begynnelsen av tabellen til symbolet 0x7F (127 - siste tegn standard ASCII-tabell) anbefales det å la skriften være intakt.

Riktignok et par friheter med ASCII-tabell Jeg ga meg selv tillatelse. Faktum er at i den originale fonten System5x7.h Gradikonet er plassert i den siste raden i tabellen, og opptar symbolet 0x80, som i vårt tilfelle allerede tilhører det kyrilliske alfabetet. For ikke å bryte rekkefølgen for å konstruere den kyrilliske tabellen i samsvar med UTF-8, fjernes denne linjen fra filen. Og gradikonet er vedlagt i stedet ASCII-tegn"~" (nummer 0x7E), som uansett ikke ble brukt til det tiltenkte formålet i fonten. Men denne erstatningen lar deg legge inn gradikonet i teksten til skissen direkte fra tastaturet i form av "~"-symbolet.

En annen frihet skyldes det faktum at forfatteren ikke tåler det overkryssede nullpunktet - en arkaisk ting fra tiden med ATsPU og monokrome tekstvisninger. Derfor er nullen i den moderniserte fonten erstattet av glyfen til bokstaven "O". De som holder seg til puristiske prinsipper kan ganske enkelt slette fonten i filen System5x7R.h dette innlegget (den gamle glyphen til den kryssede nullen der er kommentert ut, koden er 0x30).

I det moderniserte biblioteket åpenGLCD, som du kan laste ned fra lenken på slutten av artikkelen, er det gjort en annen korreksjon - rekkefølgen for tilkobling av pinnene for skjermer med ks0108-kontrolleren er endret. Hvorfor forfatteren av biblioteket valgte denne rekkefølgen (se tabellen på lenken på den offisielle Arduino-nettsiden) er ukjent. I den moderniserte versjonen utføres skjermtilkoblingen (den populære MT-12864J ble valgt som eksempel) i henhold til følgende diagram:

Tilkoblingsskjema MT-12864J


Variabel motstand R1 kobles her i henhold til produsentens anbefalinger, og motstand R2 tjener til å begrense bakgrunnsbelysningsstrømmen dersom den ikke er koblet til en spenning på 5 V, men direkte til en inngangsstrømkilde (Arduino Vin pin) med høyere spenning.

Et eksempel på visning av det russiske alfabetet blandet med latin på MT-12864J-skjermen, samt tall og et gradikon, er vist på bildet:


Skissetekst for dette eksemplet:

Teksten til skissen med utgangen av det russiske alfabetet

#inkludere //inkluder biblioteket #include //fil med funksjon for å skrive ut russiske bokstaver #include //fil med russiske bokstavkoder void setup() ( GLCD.Init(); //initialisering GLCD.ClearScreen(); ) void loop() ( GLCD.SelectFont(System5x7R); //velg fonten GLCD.CursorTo(0 , 0); //sett markøren til startposisjonen //output blandede engelsk-russiske linjer: outstr("ABC AVGDEZZIKLMNOP\n"); outstr("PRQ RSTUFHTSCHSHSHSHYYYYYYYAY\n"); outstr("nts abvgdezhzIKLMNOP\n" ); outstr ("xyz rstufkhchshshshshjeyey\n"); GLCD.println("1234567890"); GLCD.CursorTo(19,4); //sett markøren til den nest siste posisjonen til den femte linjen GLCD.print("~C "); // grad C GLCD.println("@;/.,|<>()=-_()\"""); GLCD.CursorTo(4,7); //sett markøren til posisjon 4 på linje 8 GLCD.print("MT-12864J"); )


Siden filer med funksjonen utstr.h og font System5x7R.h plassert i rotkatalogen modernisert bibliotek, så må separate lenker til dem plasseres i begynnelsen av skissen ved hjelp av direktivet #inkludere. For engelskspråklige inskripsjoner er det fortsatt praktisk å bruke standard funksjoner println/print, men hvis du trenger en linjemating i russisk tekst, må du spesifisere "\n"-tegnet.

Du kan laste ned den korrigerte versjonen av biblioteket