Pokud se nespokojíte s výstupem na sériovou linku nebo hledáte kvalitnější výstup, který třeba nemusí být připojený k PC, pravděpodobně sáhnete po LCD displeji. Relativně levný LCD displej se vyrábí v různých velikostech (16x2, 16x4, 20x4…). Co ty čísla znamenají? První číslo určuje počet znaků na řádku a druhé číslo určuje počet řádků. Dále si můžete vybrat ze dvou barev pozadí displeje – modré a zelené.
Mezi hlavní výhody LCD displeje patří jejich dobrá čitelnost i na slunci, schopnost pracovat při nízkých teplotách a jednoduchost použití. A na to se teď podíváme podrobněji.
zapojení LCD displeje
Zapojení LCD displeje jsou dvě. Základní zapojení a zapojení pomocí sběrnice I2C (stačí 4 vodiče). My si nyní ukážeme zapojení klasické (základní). Co si nachystáme na naše pokusy s LCD displejem?
- řídící desku (pro začátek doporučujeme Arduino UNO) - pro řízení displeje
- LCD displej 20x4
- Kolíková lišta 40pin 2,54mm - přímá
- Trimr nebo potenciometr 10 kΩ - pro nastavení kontrastu
- Propojovací kit
Pokud máme všechno připravené, můžeme se naplno vrhnout do práce. Arduino UNO a LCD displej propojte podle následujícího schématu.
Zásadní věc, kterou třeba zdůraznit je, že zapojení pro všechny velikosti displejů jsou stejná! Jediná změna nastává v kódu na řádku lcd.begin(20,4);. Asi není těžké uhádnout, jak se příkaz změní. Ale pro úplnost je to lcd.begin(počet znaků na řádku,počet řádků);
Trimrem (potenciometrem) nastavíte jas znaků. Pokud tedy po zapojení a nahrání programu nic nevidíte, tak nepanikařte a zkuste pokroutit potenciometrem.
Poslední 2 vodiče (červený a černý) mají na starosti LED podsvětlení displeje, pokud displej nesvítí vůbec, hledejte chybu právě tam. Pokud jsou na displeji všechny znaky bílé, pak to upravte nastavením potenciometru, aby byly tak akorát neviditelné.
Jak donutit LCD ukázat znaky?
Programování displeje vyžaduje knihovnu, tu ale nemusíme importovat, protože v případě Arduina IDE je knihovna obsažena v základním balíčku. A to je vše. Pojďme si tedy napsat něco na displej.
// importování knihovny #include <LiquidCrystal.h> // definice pinů pro lcd LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // řekneme, že displej je 20x4, kdo má 16x2 nebo 16x4 musí to přepsat lcd.begin(20, 4); } void loop() { // nastavíme kurzor na 1. znak, 1. řádek (čísluje se od 0, zleva, shora) lcd.setCursor(0,0); // napíšeme, co chceme lcd.print("===================="); // posuneme se na 2. řádek, 3. znak lcd.setCursor(2,1); lcd.print("www.hwkitchen.cz"); // posuneme se na 3. řádek, 8. znak lcd.setCursor(7,2); lcd.print("navody"); // posuneme se na 4. řádek, 1. znak lcd.setCursor(0,3); lcd.print("===================="); }
Jak vidíte, zobrazit něco na LCD displeji není vůbec složité. Jediné, co je třeba si pamatovat je, jak fungují souřadnice pro určení polohy kurzoru. Na displeji se čísluje od (0,0) => kurzor na 1. znak, 1. řádku definujeme jako lcd.setCursor(0,0);. Ukážeme si pár příkladů, ať je to jasnější.
Další věc, se kterou se setkáte jsou české znaky. Ty bohužel LCD nezobrazí a většinou vám ukáže znaky, kterým nebudete rozumět. Můžeme ale zobrazovat znaky ASCII kódu nebo si definovat vlastní.
jak naučit LCD displej ASCII?
K tomu, abychom mohli definovat ASCII znak, budeme potřebovat tabulku, kde jsou všechny znaky definovány. Pokud byste se ptali proč to není jak obyčejná ASCII, tak je to způsobeno řadičem HD44780. To je integrovaný obvod, který se používá pro řízení řádkových displejů. Ale zpět k tabulce. V našem příkladu budeme chtít použít znak stupeň (°). V tabulce si ho najdeme ve sloupečku, který je označen jako 1101 a na řádku označeném jako xxxx1111. Místo xxxx dosadíme číslo sloupečku a vznikne číslo
1101 1111
Tady nastává čas, abyste oprášili znalosti informatiky a začali převádět z binární do desítkové soustavy, nebo zapněte třeba obyčejnou Windows kalkulačku a číslo převeďte.
Teď víme, že stupeň je v desítkové soustavě definován jako 223 a můžeme ho zobrazit na displeji:
lcd.print((char)223);
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(20, 4); } void loop() { lcd.setCursor(0,0); lcd.print((char)223); }
jak naučit lcd znaky, které nejsou v ascii?
Chcete napsat znak, který není ani v tabulce? Řešení existuje a není vůbec složité. Nejprve je třeba si uvědomit, že jednotlivé znaky se skládají z pixelů, konkrétně 8 na výšku a 5 na šířku. My můžeme displeji říct, které chceme rozsvítit. Vytvořme například znak teploměru. Jak budeme postupovat? Otevřete stránku http://maxpromer.github.io/LCD-Character-Creator/ a naklikejte si znak.
Vedle v boxu se v reálném čase mění pole, konkrétně se mění 1 a 0. 1 je na místě, kde má pixel svítit a 0 je na místě, kde pixel svítit nemá. Výsledný program pro Arduino bude vypadat takto:
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // definování vlastního znaku, pomocí pixelů (1 - svítí, 0 - nesvítí) byte teplomer[8] = { B00100, B01010, B01010, B01010, B01010, B10001, B10001, B01110, }; void setup() { // vytvoření znaku lcd.createChar(1, teplomer); lcd.begin(20, 4); lcd.setCursor(0, 0); lcd.print("nas znak: "); // vypíše náš znak lcd.write(byte(1)); } void loop() { }
pár rad na konec
LCD displej je velmi užitečná součástka, která najde své uplatnění v mnoha Arduino projektech. Ukázali jsem si pouze základní funkce, se kterými si časem asi nevystačíte, proto se podívejte také do „examples“ v Arduino IDE. Zajímavý tip je například užitečná funkce lcd.clear(). Pokud budete tápat, podívejte se na ostatní návody, kde se LCD hojně vyskytuje a uvidíte, jak funguje v praxi. Také se můžete zeptat v sekci komentářů pod tímto Arduino návodem. Rozhodně se nevzdávejte, výsledek za to stojí a LCD displej si vaši pozornost rozhodně zaslouží.
Bastlení ZDAR!