Cześć,
do tej pory z naszym Arduino komunikowaliśmy się tylko po przez UART, było ono w stanie zapalać i gasić diody po spełnieniu jakiegoś warunku. Nie mniej jednak żyjemy już w czasach, gdzie prawie każde urządzenie elektroniczne posiada wyświetlacz, przez co widzimy co nasze urządzenie do nas mówi. W dzisiejszej części kursu pokaże Wam jak obsługiwać ekran LCD na sterowniku HD44780 (wyświetlacze 16×2, 20×4 itp.). Zapraszam.
Spis treści:
- Jak podłączyć LCD do Arduino ?
- Potrzebne funkcje do obsługi LCD
- Hello World!
- Dodatkowe funkcje dla wyświetlacza LCD
Co będziemy potrzebować do tej części kursu:
- Arduino
- Wyświetlacz LCD HD44780
- potencjometr 10k ohm x2
- rezystor 220 ohm x2
- diody LED
- zestaw przewodów połączeniowych
1. Jak podłączyć LCD do Arduino ?
Na ten temat pisałem już kiedyś. Warto się zapoznać z tym poradnikiem, w którym dowiesz się jak poprawnie podłączyć ekran i mieć pewność, że go nie uszkodzisz ;)
2. Potrzebne funkcje do obsługi LCD
W pierwszej kolejności, aby móc obsługiwać nasz ekran to potrzebujemy wstawić/zaimportować do naszego programu bibliotekę LiquidCrystal.h, w której znajdują się wszystkie funkcje obsługi ekranu.
|
1 |
#include <LiquidCrystal.h> //wstaw bibliotekę LiquidCrystal.h |
Gdy już to mamy to musimy zdefiniować w jakim trybie chcemy obsługiwać nasz ekran. Mamy do dyspozycji cztery tryby:
1. 4-bitowy z pinami RS i E
|
1 2 3 4 5 6 7 8 |
LiquidCrystal lcd(rs, e, d4, d5, d6, d7); //rs - pin do którego podłączyliśmy rs wyświetlacza //e - pin do którego podłączyliśmy e wyświetlacza //d4 - pin do którego podłączyliśmy d4 wyświetlacza //d5 - pin do którego podłączyliśmy d5 wyświetlacza //d6 - pin do którego podłączyliśmy d6 wyświetlacza //d7 - pin do którego podłączyliśmy d7 wyświetlacza |
2. 4-bitowy z piami RS, RW i E
|
1 2 3 4 5 6 7 8 9 |
LiquidCrystal lcd(rs, rw, e, d4, d5, d6, d7); //rs - pin do którego podłączyliśmy rs wyświetlacza //rw - pin do którego podłączyliśmy rw wyświetlacza //e - pin do którego podłączyliśmy e wyświetlacza //d4 - pin do którego podłączyliśmy d4 wyświetlacza //d5 - pin do którego podłączyliśmy d5 wyświetlacza //d6 - pin do którego podłączyliśmy d6 wyświetlacza //d7 - pin do którego podłączyliśmy d7 wyświetlacza |
3. 8-bitowy z pinami RS i E
|
1 2 3 4 5 6 7 8 9 10 11 12 |
LiquidCrystal lcd(rs, e, d0, d1, d2, d3, d4, d5, d6, d7); //rs - pin do którego podłączyliśmy rs wyświetlacza //e - pin do którego podłączyliśmy e wyświetlacza //d0 - pin do którego podłączyliśmy d0 wyświetlacza //d1 - pin do którego podłączyliśmy d1 wyświetlacza //d2 - pin do którego podłączyliśmy d2 wyświetlacza //d3 - pin do którego podłączyliśmy d3 wyświetlacza //d4 - pin do którego podłączyliśmy d4 wyświetlacza //d5 - pin do którego podłączyliśmy d5 wyświetlacza //d6 - pin do którego podłączyliśmy d6 wyświetlacza //d7 - pin do którego podłączyliśmy d7 wyświetlacza |
4. 8-bitowy z pinami RS, RW i E
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
LiquidCrystal lcd(rs, rw, e, d0, d1, d2, d3, d4, d5, d6, d7); //rs - pin do którego podłączyliśmy rs wyświetlacza //rw - pin do którego podłączyliśmy rw wyświetlacza //e - pin do którego podłączyliśmy e wyświetlacza //d0 - pin do którego podłączyliśmy d0 wyświetlacza //d1 - pin do którego podłączyliśmy d1 wyświetlacza //d2 - pin do którego podłączyliśmy d2 wyświetlacza //d3 - pin do którego podłączyliśmy d3 wyświetlacza //d4 - pin do którego podłączyliśmy d4 wyświetlacza //d5 - pin do którego podłączyliśmy d5 wyświetlacza //d6 - pin do którego podłączyliśmy d6 wyświetlacza //d7 - pin do którego podłączyliśmy d7 wyświetlacza |
Zatem który wybrać ? Tak właściwie to możemy każdy, bo efekt końcowy będzie taki sam i nie ma to większego znaczenia. Wiadomo jak skorzystamy z wariantu 1. to wykorzystamy tylko 6 pinów Arduino, a jak z 4. wariantu to 11 pinów, także właściwie to tutaj może decydować nasz projekt, ile wykorzystamy w nim peryferiów i ile pinów tak na prawdę potrzebujemy. Możemy również skorzystać z ekspandera I2C, wtedy zużyjemy tylko 2 piny, ale o tym to za niedługo napiszę ;)
Gdy już wybraliśmy sposób komunikacji z LCD to teraz musimy ustalić jego rozdzielczość. Z pomocą przychodzi nam funkcja lcd.begin():
|
1 2 3 4 5 6 |
lcd.begin(kolumny, wiersze); //przeważnie jest to: //(16, 2) //(20,4) //(8,2) itp.. |
Aby nasz ekran był dobrze zaincjalizowany to musimy go wyczyścić, czyli usunąć wszelkie informacje z jego buforu. Pytanie dlaczego ? Ano dlatego, żeby podczas uruchamiania naszego urządzenia na ekranie wszystko się wyświetlało w odpowiedni sposób, bez żadnych „krzaczków”, przesunięć itp.