6. díl - Arduino - LCD Display
Hardware PC Arduino Arduino - LCD Display


V dnešním tutoriálu o Arduinu se zaměříme na LCD displej. Vím, že jsem v minulém díle sliboval měření vzdálenosti, ale chtěl jsem jí přitom zobrazovat lépe než posíláním na sériovou linku, takže si teď probereme LCD a vzdálenost bude (snad) v příštím díle.
LCD display, neboli display z tekutých krystalů, je zobrazovací zařízení s nízkou spotřebou a proto se hodí do zařízení na baterie nebo k Arduinu. Takže si nějaký seženeme , jen budeme dbát na to, aby měl řadič HD44780 nebo alespoň kompatibilní, protože jinak nám to fungovat nebude. Piny jsou u většiny displayů stejné, je ale lepší se pro jistotu podívat do datasheetu k danému modelu. Ve většině případů jsou ale již piny popsané, takže se obejdeme bez něj, a v případě jiného pořadí na to budeme dbát.
Display má celkem 16 pinů, nám ale bude nyní stačit jen 12. Displaye se často prodávají bez "nožiček" a budeme je muset přidělat. Mně bohatě postačily kousky nastříhaného drátku, které bude potřeba do dírek připájet. Takže na chvíli vezmeme do ruky pájku a jdeme pájet, nebo si seženeme nějaký, který již nožičky má, ale to bude těžší.
Zapojení pinů
Zapojení pinů je poměrně jednoduché:
- 1 VSS - Připojíme jednoduše na zem
- 2 VDD - Vstup 5V
- 3 V0 - Kontrast. Někdy lepší na zem, někdy 5V. U mě bylo oboje špatné, takže jsem připojil potenciometr a nastavil si kontrast jaký chci.
- 4 RS - Připojíme k Arduinu a v kódu poté zvolíme pin
- 5 RW - Zem
- 6 E (Enable) - Arduino
- 7-10 - D0-D3 - Datové piny, které používat nebudeme
- 11-14 - D4-D7 - Další datové piny, které připojíme k Arduinu
- 15 - A - Anoda podsvícení, +5V
- 16 - K - Katoda podsvícení, zem
To by byly piny. Abychom měli co zobrazovat, tak si připojíme nám již známé DHT11 ze 4. dílu.

Nějak to sestavíme dohromady podle schématu a přesuneme se rovnou k psaní kódu.
#include <dht11.h>
#include <LiquidCrystal.h>
int rs_pin = 2;
int e_pin = 3;
int d4_pin = 4;
int d5_pin = 5;
int d6_pin = 6;
int d7_pin = 7;
LiquidCrystal LCD(rs_pin, e_pin, d4_pin, d5_pin, d6_pin, d7_pin);
dht11 cidlo;
int dht11pin = 12;
void setup()
{
LCD.begin(16,2);
LCD.setCursor(0,0);
LCD.print("itnetwork.cz");
LCD.setCursor(0,1);
LCD.print("teplota: ");
}
void loop()
{
cidlo.read(dht11pin);
LCD.setCursor(9,1);
LCD.print(" ");
LCD.setCursor(9,1);
LCD.print(cidlo.temperature);
LCD.setCursor(13,1);
LCD.print((char)223);
LCD.print("C");
delay(500);
}
A teď k vysvětlování:
#include <dht11.h>
#include <LiquidCrystal.h>
Naimportujeme si knihovny k dht11 a LCD. LiquidCrystal.h by mělo být již v základech, takže nebude třeba nic stahovat.
int rs_pin = 2;
int e_pin = 3;
int d4_pin = 4;
int d5_pin = 5;
int d6_pin = 6;
int d7_pin = 7;
Pro připojené LCD použijeme piny RS, E, D4-D7. Ostatní půjdou na zem/napájení (popřípadě potenciometr). Kromě datových pinů D4-D7 se zde logicky nachází také D0-D3, které ale potřebovat nebudeme.
LiquidCrystal LCD(rs_pin, e_pin, d4_pin, d5_pin, d6_pin, d7_pin);
Funkce LiquidCrystal vytvoří objekt LCD display, v našem případě s názvem LCD. Jako parametry bere oněch 6 pinů. Nemusíme je dávat do těchto proměnných, stačí jen napsat čísla, ale je důležité dodržovat pořadí RS,E,D4,D5,D6,D7.
dht11 cidlo;
int dht11pin = 12;
Tuto část snad ani vysvětlovat nemusím, protože připojit DHT11 umíme již ze 4. dílu.
LCD.begin(16,2);
Spustí display s 16 znaky a 2 řádky. Pokud máte jiný, upravte dle sebe. Tento begin je trochu jiný. Display se na začátku spuštění musí inicializovat. Schválně zkuste po vypsání textu odpojit všechnu zem a vstupních 5V do displaye a poté opětovně zapojte. Výsledkem bude buď jakýsi patvar znaků nebo jen samé obdélníčky. Pak na Arduinu stiskněte reset a display bude zas fungovat normálně. Pokud budete mít projekt, ve kterém se display během běhu programu může odpojit nějakým přerušením kontaktu, doporučuji přidat begin na začátek loopu. Mějte však na paměti, že tím dojde k smazání celého textu na display, takže v našem případě by se nám zobrazovalo jen 22 °C bez nápisů itnetwork.cz a teplota, které máme v setupu.
LCD.setCursor(0,0);
Nastaví kurzor na první znak, první řádek - začíná se od nuly. Tento řádek je naprosto zbytečný, protože na tuto pozici se kurzor nastaví ihned po spuštění displaye.
LCD.print("itnetwork.cz");
LCD.setCursor(0,1);
LCD.print("teplota: ");
Funkce print napíše na display text. Poté si posuneme kurzor na druhý řádek a napíšeme další text.
cidlo.read(dht11pin);
Přečteme hodnotu z DHT11.
LCD.setCursor(9,1);
Nastavíme kurzor za nápis teplota
LCD.print(" ");
Pro jistotu smažemr předchozí hodnotu, kdyby náhodou ubylo jedno číslo, tak to poslední zůstane za aktuálním a nepřepíše se. Je sice velice nepravděpodobné, že dostaneme 3-místnou teplotu, ale pokud budeme např. číst hodnotu z analogového pinu, tak je toto nutné.
LCD.setCursor(9,1);
Vrátí kurzor za nápis teplota.
LCD.print(cidlo.temperature);
Vypíše teplotu z čidla. Jak vidíte, lze také vypisovat rovnou hodnoty, které nám vracejí funkce bez nutnosti ukládání do meziproměnných.
LCD.setCursor(13,1);
LCD.print((char)223);
LCD.print("C");
Nyní nastavíme kurzor za nápis a napíšeme nejdříve znak stupňů. Napsat jej jen tak do uvozovek nemusí fungovat, proto napíšeme (char)223, což vyústí k vypsání znaku s ASCI hodnotou 223, což je právě značka stupňů. Poté jen napíšeme C a je hotovo. Tato část textu se nemění, tudíž bychom jí mohli napsat rovnou v setupu, ale není to nutnost.
delay(500);
A nakonec chvíli počkáme.
Kód nahrajeme a v první řadě se podíváme, jak jsme na tom s kontrastem. Pokud je display nečitelný, zkuste přepojit z 5V na GND (nebo naopak), popřípadě připojte potenciometr a pohrajte si s ním, dokud nebude text krásně čitelný. Také nezapomeňte na podsvícení, bez něj nebude nic vidět. Když něco nebude fungovat, zkontrolujte zda máte správně napojeny piny. Ke stažení je k dispozici okomentovaný zdrojový kód.

Takto to bude vypadat
To by bylo pro dnešní díl vše, příště již snad bude ono slibované
měření vzdálenosti, takže si začněte shánět Ultrasonický
modul HC-SR04
Stáhnout
Staženo 378x (1.57 kB)
Aplikace je včetně zdrojových kódů
Komentáře


Zobrazeno 10 zpráv z 30. Zobrazit vše