Image
17.12.2015 0 Comments

ARDUINO - tvorba vlastných znakov na prácu s LCD displejom /11.časť

Späť na úvod >> Späť na programovanie >> Späť na seriál

V predošlej časti sme vysvetlili, akým spôsobom môžeme LCD displej pripojiť k Arduinu - a to buď pomocou už hotového shieldu, alebo tí zručnejší priamo, napríklad cez prepojovacie pole. Ukázali sme aj základný program na výpis textu na LCD.

Špeciálne znaky

V predchádzajúcom príklade sme vypisovali na LCD displeji texty so znakmi bez diakritiky (mäkčeňov a dĺžňov). A za domácu úlohu sme mali vypísať text aj s diakritikou, teda text: „Ako sa máš?" Čo sa stalo? Znaky á a š sa nezobrazili správne, ale ako akési nejasné obdĺžniky. To preto, že LCD displej (s radičom HD44780) vo svojej pamäti CGROM neobsahuje slovenské znaky s diakritikou. Aké je teda riešenie? Radič HD44780 obsahuje aj pamäť CGRAM, kde možno uložiť až osem znakov definovaných používateľom. Niekto namietne, že osem pozícií na všetky slovenské znaky s mäkčeňom a dĺžňom je málo. Ako tento hendikep obísť, to uvedieme neskôr.

Definovanie vlastných znakov

Ešte prv ako sa naučíme definovať vlastné znaky, musíme ozrejmiť, aký tvar majú znaky v radiči LCD displeja. Tie sa skladajú z matice bodov 5 × 8, teda z piatich stĺpcov a ôsmich riadkov. Jednotlivé stĺpce definujú bity od bit0 (nultého) sprava po bit4. Tieto bity tvoria bajt riadkov, a to od byte0 zhora až po byte7 (pozri tabuľku č. 1).

Teraz môžeme do tejto matice „nakresliť" nami definovaný znak, v tomto prípade dlhé malé á, tak ako to v tabuľke č. 2.

Nech žlté políčka v matici predstavujú bity s hodnotou 0 (nula) a zelené políčka, tvoriace znak, nech predstavujú bity s hodnotou 1 (jedna). Potom v zmysle binárneho zápisu môžeme napísať pri jednotlivých riadkoch zodpovedajúce hodnoty v binárnom tvare. Tieto hodnoty použijeme v našom programe.

Podobným spôsobom nadefinujeme aj písmenko š (tabuľka č. 3).

Definovanie znaku v programe

Nami vytvorený znak musíme najprv definovať v definičnej časti programu. Pre znak á použijeme zápis:

byte dlhe_a[8] = {
0b00010,
0b00100,
0b01110,
0b00001,
0b01111,
0b10001,
0b01111,
0b00000
};

kde vytvoríme pole s názvom dlhe_a, ktoré bude obsahovať 8 bajtov. Obsah jednotlivých bajtov je definovaný v zátvorkách ako binárna hodnota každého riadka uvedenej matice. Binárny tvar sa začína dvojznakom 0b (nula-bé). Môžeme použiť aj zápis v hexadecimálnej sústave, ktorá sa začína dvojznakom 0x, ale binárne čísla musíme previesť do tejto sústavy.

A podobne pre znak š použijeme zápis:

byte make_s[8] = {
0b01010,
0b00100,
0b01110,
0b10000,
0b01110,
0b00001,
0b11110,
0b00000
};

Tu vytvoríme pole s názvom makke_s.

Zapísanie znakov do pamäte CGRAM displeja

Nami vytvorené a nadefinované znaky musíme teraz zapísať do pamäte CGRAM radiča displeja. Na to použijeme metódu lcd.createChar(adresa, názov). Adresa určuje pozíciu v pamäti, je typu byte a môže obsahovať hodnoty od 0 (nula) po 7, čo je spolu osem miest pre nami definované znaky. Názov určuje meno poľa, v ktorom sme definovali znak.

V našom prípade teda použijeme zápis:

lcd.createChar(0, dlhe_a);
lcd.createChar(1, make_s);

čím sme znak á dali na nultú a znak š na prvú pozíciu v pamäti CGRAM.

Výpis definovaného znaku z pamäte na displej

Na výpis znaku z konkrétnej pozície pamäte použijeme príkaz lcd.write(adresa), kde adresa je pozícia v pamäti CGRAM. Keďže ide o bajtovú pozíciu, na výpis znaku á použijeme príkaz

lcd.write(byte(0));

a na výpis znaku š použijeme príkaz

lcd.write(byte(1));

Takže ak chceme, aby príklad z predchádzajúcej časti vypisoval text Ako sa máš? správne po slovensky, upravíme ho takto:

#include <LiquidCrystal.h>
byte dlhe_a[8] = {
0b00010,
0b00100,
0b01110,
0b00001,
0b01111,
0b10001,
0b01111,
0b00000
};
byte make_s[8] = {
0b01010,
0b00100,
0b01110,
0b10000,
0b01110,
0b00001,
0b11110,
0b00000
};
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup()
{
lcd.createChar(0, dlhe_a);
lcd.createChar(1, make_s);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("Ahoj Svet!");
lcd.setCursor(0,1);
lcd.print("Ako sa m");
lcd.write(byte(0));
lcd.write(byte(1));
lcd.print("?");
}
void loop()
{
}

Všimnite si, ako sme vyriešili výpis. Najprv sme na prvý riadok displeja vypísali text „Ahoj Svet!" tak ako v predchádzajúcom príklade. Potom sme procedúrou setCursor prešli na druhý riadok a vypísali text „Ako sa m". Hneď za týmto textom sme procedúrou lcd.write vypísali znak z nultej pozície pamäte radiča, teda á a hneď za ním znak z prvej pozície pamäte radiča, a to znak š. Keďže si displej pamätá nastavenie kurzora, môžeme pokračovať procedúrou lcd.print vypísaním otáznika. Takto sa nám na LCD displeji zobrazia správne znaky s diakritikou, teda: „Ako sa máš?"

Obr. č. 1 Eternetový shield

Obr. č. 2 Eternetový modul

Použitie generátorov znakov

Na internete existuje mnoho programov, ktoré nám dokážu zjednodušiť prácu pri tvorbe a definovaní vlastných znakov. Volajú sa generátory a práca s nimi je príjemná. Stačí iba klikať myšou do pripravenej matice a na konci dostaneme kód definície znaku.

Už sme si spomenuli, že na vlastné znaky je v pamäti CGRAM voľných osem znakov. Niekto môže namietnuť, že tento počet pre všetky slovenské znaky s diakritikou nestačí. Áno, je to pravda, ale musíme si uvedomiť, že my sa na LCD displeji nechystáme vypisovať celé romány či dennú tlač. Veľmi často si v jednotlivých aplikáciách vystačíme s hláseniami, kde je obmedzený počet diakritických znakov - ako v našom prípade, kde sme použili iba dva.

Preto je veľmi vhodné v aplikácii zvoliť takú formuláciu hlásení, kde osem miest na definované znaky bude dosť. A ak sa tomu už nedá vyhnúť, napríklad musíme používať 10 diakritických znakov, použijeme jednoduchú fintu: Vytvoríme všetkých 10 znakov. Tie zapíšeme do definičnej časti každý pod svojím menom. Potom pomocou metódy lcd.createChar zapíšeme do pamäte radiča displeja najpoužívanejšie z nich. V prípade, že v texte potrebujeme použiť deviaty znak, použitím metódy lcd.createChar predefinujeme ľubovoľnú pozíciu v pamäti radiča, napríklad na nultej pozícii. Po vypísaní deviateho znaku na displeji opätovne uložíme do pamäte radiča pôvodný nultý znak. Takýmto istým spôsobom si môžeme „požičať" pamäťovú pozíciu aj na desiaty znak.

Nabudúce si Arduino pripojíme k počítačovej sieti a začneme tvoriť programy na jeho ovládanie a zasielanie údajov pokojne aj cez internet. Preto si zabezpečte eternetový shield (obr. č. 1) alebo eternetový modul (obr. č. 2).

 

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá