Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 8 - Arduino - LCD displej a jeho programování

V minulé lekci, Arduino - Membránová klávesnice a její programování, jsme se seznámili s membránovou klávesnicí a uvedli jsme si dva příklady jejího použití.

V dnešní lekci našeho Arduino tutoriálu si ukážeme, jak správně zapojit a naprogramovat další Arduino komponentu, a to LCD displej. Stejně jako u ostatních projektů si nejdříve vysvětlíme, jak LCD displej v Arduinu funguje. V pokročilejším příkladu si jej pak propojíme s dalšími komponentami a vytvoříme si projekt.

LCD displej

LCD (Liquid-crystal display) u Arduina slouží jako zobrazovací jednotka. Jeho napájení je 5 V a díky I2C redukci má pouhé čtyři piny. Bez redukce jich má mnohem více a je proto složitější ho jak zapojit, tak naprogramovat. My máme I2C redukci zapojenou přímo na displeji, pokud vám na LCD displeji chybí, doporučujeme si ji dokoupit a k displeji připojit.

Pojďme se podívat na samotnou konfiguraci LCD displeje a ukažme si nejprve základní využití LCD displeje.

Seznam součástek

Na sestavení našeho jednoduchého obvodu budeme potřebovat jen následující součástky:

  • Arduino,
  • LCD displej a
  • propojovací kabely.

Jak už je zvykem, je náš projekt realizován v rozhraní Tinkercad. Projekt je samozřejmě možné vytvořit také s reálnými součástkami, funkčnost se nijak nemění.

Zapojení LCD displeje

Když máme součástky připraveny, můžeme se pustit do zapojení LCD displeje. Jak již bylo zmíněno, z I2C redukce nám vedou pouhé čtyři piny, těmi jsou VCC, GND, SDA a SCL. Začneme tím jednodušším, tedy VCC a GND. Náš VCC pin zapojíme do 5V pinu Arduina a GND pin do GND pinu Arduina.

Zbývá tedy SDA a SCL. Tyto piny jsou na Arduinu přímo vyznačeny stejnojmennými názvy. Pokud máte například Arduino Mega, jsou dvojice SDA a SCL pinů dvě, skrývají se také na pinech 20 a 21. Proto doporučujeme zjistit, kolik dvojic I2C pinů se nachází na vašem Arduinu, stejně jako jejich umístění. SDA pin LCD tedy zapojíme do SDA Arduina a SCL pin pak obvykle bývá hned vedle SDA pinu. Finální zapojení vypadá následovně:

LCD - Arduino - Hardware

Programování LCD displeje

Zapojení jsme zvládli bez problémů, je tedy načase se pustit do úplně prvního kódu LCD displeje. Jdeme na to.

Hlavička programu bude celkem jednoduchá, vzápětí si ji popíšeme:

#include <Adafruit_LiquidCrystal.h>
int pocet_vypsani = 0;

Adafruit_LiquidCrystal LCD(0);

Než začneme dělat cokoliv jiného, musíme do programu vložit knihovnu, která podporuje funkce LCD displeje. Tato knihovna se jmenuje Adafruit_LiquidCrystal. Knihovnu přidáme příkazem #include <Adafruit_LiquidCrystal.h> a můžeme se posunout dále.

Pokud projekt děláte v reálu, můžete si ji jednoduše stáhnout v manažeru knihoven.

Dále si vytvoříme proměnnou datového typu int, do které budeme ukládat počet vypsání na displeji. Tuto proměnnou si budeme později zvyšovat, aby nám displej v cyklu vypisoval kontinuální řadu celých čísel.

Nakonec si musíme ještě definovat I2C adresu displeje, použijeme příkaz Adafruit_LiquidCrystal LCD(). Protože projekt děláme ve virtuálním prostředí, dáme do argumentu funkce LCD() hodnotu 0, jelikož virtuální LCD displej nemá svou adresu.

Jestliže projekt tvoříte v reálné podobě, do argumentu definice adresy napíšete reálnou adresu vašeho LCD displeje. Většinou to bývá hodnota 0x27, ale může se pro každý displej lišit.

LCD displej poté inicializujeme ve funkci setup():

void setup()
{
  LCD.begin(16, 2);
  LCD.print("Hello world!");
}

Použijeme příkaz LCD.begin(), do jehož argumentu přijdou dva parametry pro určení délky řádku a výšky sloupce. Náš displej je velký 16x2, čemuž odpovídají zadané hodnoty. Pro nás to znamená, že 16x2 displej dokáže najednou zobrazit až 32 znaků, častá je také varianta 20x4, kde můžeme zobrazit až 80 znaků.

Někdy se můžeme setkat s také s příkazem LCD.init(), což je alternativa příkazu LCD.begin(), rozdíl mezi nimi spočívá v použité knihovně.

Abychom se ujistili, že displej opravdu funguje, vypíšeme si na displej pomocí příkazu LCD.print() ještě ikonickou hlášku Hello world!.

Hlavní smyčka

Nyní se můžeme přesunout do funkce loop(). Tam doplníme následující kód:

void loop()
{
  LCD.setCursor(0, 1);
  LCD.print(pocet_vypsani);
  LCD.setBacklight(1);
  delay(500);
  LCD.setBacklight(0);
  delay(500);
  pocet_vypsani++;
}

Jako první hned užijeme příkazu LCD.setCursor(), který nám určuje, kam chceme začít vypisovat znaky. V argumentu přijímá dva parametry, a to pozici řádku a pozici sloupce. Obrazovku displeje si tedy ti kreativnější z nás mohou představit jako takové 2D pole.

Když máme nastavenou pozici, můžeme vypsat naší proměnnou na displej, které jsme v hlavičce nastavili hodnotu 0. Text je vypsán, ale není moc dobře vidět, to proto, že ještě nemáme zapnuté podsvícení displeje. To provedeme příkazem LCD.setBacklight(), kterému zadáme v argumentu hodnotu 1 pro zapnutí, nebo hodnotu 0 pro vypnutí podsvícení.

Poté přidáme krátkou prodlevu a podsvícení zase zhasneme. Počkáme další půl sekundu a nakonec inkrementujeme naší proměnnou. Cyklus se bude opakovat nadále a náš LCD displej bude vypisovat číselnou řadu.

Kombinace displeje a tlačítka

Když jsme si úspěšně zapojili náš LCD displej, co takhle si otestovat jeho kompatibilitu s nějakou další komponentou, třeba tlačítkem? Jdeme to zkusit.

Seznam součástek

Tentokrát budeme potřebovat tyto součástky:

  • Arduino,
  • LCD displej,
  • tlačítko,
  • rezistor 1 [kΩ],
  • Arduino kabely a
  • nepájivé pole

Zapojení LCD displeje a tlačítka

Ponecháme si naše předešlé zapojení Arduina a LCD displeje a přidáme si navíc tlačítko:

LCD_A_TLACITKO - Arduino - Hardware

Jak můžeme vidět, zapojení zůstalo vesměs stejné, jedinou změnou je přidání tlačítka, které je zapojeno přes rezistor 1 [kΩ]. Jako pin tlačítka jsme použili digitální PWM pin 3, ale fungovat bude libovolný pin. Jdeme se tedy přesunout ke kódu.

Programování LCD displeje a tlačítka

V pokročilém příkladu budeme vycházet z kódu našeho prvního projektu, který si lehce doplníme a upravíme.

Do hlavičky přidáme definici tlačítka a protože použijeme tlačítko, nezapomeneme ošetřit zákmity. Doplníme tedy i potřebné proměnné:

#include <Adafruit_LiquidCrystal.h>
#define TLACITKO 3
int pocet_vypsani, doba_stisku, limit = 25;
unsigned long casomira;

Adafruit_LiquidCrystal LCD(0);

Poté spolu s LCD displejem inicializujeme také tlačítko, které nastavíme na INPUT:

void setup()
{
  pinMode(TLACITKO, INPUT);
  LCD.setBacklight(1);
  LCD.begin(16, 2);
  LCD.print("Hello world!");
}

Protože v hlavní smyčce již nebudeme displej zhasínat, nechali jsme ho rozsvítit už při inicializaci.

V hlavní smyčce voláme funkci millis() a hodnoty ukládáme do proměnné casomira. Pak nastavíme pozici kurzoru a vypíšeme aktuální hodnotu proměnné pocet_vypsani:

void loop()
{
  casomira = millis();
  LCD.setCursor(0, 1);
  LCD.print(pocet_vypsani);

  while (!digitalRead(TLACITKO))
  {
    doba_stisku = millis() - casomira;
  }
  if (doba_stisku >= limit)
  {
    pocet_vypsani++;
    doba_stisku = 0;
  }
}

While cyklem a následnou podmínkou ošetřujeme použití tlačítka, jak jsme si ukazovali v lekci Pokročilá práce s tlačítky.

Pokud bylo tlačítko stisknuto, zvýšíme naši proměnnou a nezapomeneme vynulovat pomocnou proměnnou doba_stisku. Takto jednoduše jsme zařídili navýšení proměnné o 1, kdykoli stiskneme tlačítko.

Máme hotovo! Program můžeme spustit a otestovat.

Zájemci si mohou projekt rozšířit o další funkcionalitu, kterou jsme si ukazovali v již zmíněné lekci a implementovat si například skokové navýšení hodnoty v případě delšího stisku tlačítka.

V dalším dílu, Arduino - Sedmisegmentový displej a pole, si představíme sedmisegmentový displej, ukážeme si jeho zapojení a nakonec si ho i naprogramujeme s využitím pole.


 

Předchozí článek
Arduino - Membránová klávesnice a její programování
Všechny články v sekci
Arduino - Hardware
Přeskočit článek
(nedoporučujeme)
Arduino - Sedmisegmentový displej a pole
Článek pro vás napsal Adam Ježek
Avatar
Uživatelské hodnocení:
33 hlasů
Autor se převážně věnuje Arduinu a psaní tutoriálů z této oblasti, občas napíše příležitostně nějakou tu zprávičku. Většinu svého volného času momentálně věnuje Linuxu a/nebo Raspberry Pi. Také umí C#, HTML, CSS, PHP a Python.
Aktivity