Do tej pory nasza komunikacja z płytką Arduino była stosunkowo ograniczona. Mogliśmy użyć diod święcących do sygnalizowania pewnych stanów lub UART do połączenia z komputerem.
Ten ostatni sposób pozwalał na stosunkowo dużo jednak był mało mobilny. Teraz przyszła pora na pierwszy program z wykorzystaniem LCD.
Podłączenie i sterowanie wyświetlaczem graficznym lub tekstowym może wydawać się pozornie bardzo trudne. W końcu na ekranie mamy ogrom pikseli i każdym trzeba jakoś sterować. Spójrz jeszcze raz na zdjęcie z pierwszej części kursu Arduino:
Przykładowy napis na LCD tekstowym.
Każda litera składa się z wielu pikseli, które poukładane są w prostokątach -16 w każdym, z dwóch wierszy. To jest właśnie wyświetlacz tekstowy LCD 2x16 (lub 16x2). Zapis ten oznacza, że w jednej chwili na ekranie możemy wyświetlić 2 wiersze, po 16 znaków.
Jest to ograniczenie typowe dla wyświetlaczy tekstowych, służących do pokazywania napisów (i małych symboli). Innaczej byłoby w przypadku wyświetlaczy graficznych, tam mamy większą swobodę, ponieważ wszystkie piksele ułożone są w jednym prostokącie np.: 128x128. Dzięki temu możliwe jest dodatkowo rysowanie np.: linii, czy okręgów.
W tym kursie zajmiemy się monochromatycznymi (jednokolorowymi) wyświetlaczami tekstowymi.
Jak zmusić wyświetlacz do pracy?
Tak jak wspomniałem litery składają się z pixeli. Sterowanie każdym z osobna generowałoby dużą, ba - olbrzymią ilość linii sterujących. Oczywiście wszystko działa znacznie prościej, ponieważ wyświetlacze wyposażone są we wbudowane sterowniki! Najpopularniejszy z nich to HD44780.
Najczęściej w opisie danego LCD znajdziesz "Wyświetlacz zgodny ze sterownikiem HD44780". Wtedy wiadomo, że jego obsługa będzie wręcz banalna!
Gotowe zestawy do kursów Forbota
Komplet elementów Gwarancja pomocy Wysyłka w 24h
Teraz możesz kupić zestaw ponad 70 elementów niezbędnych do przeprowadzenia ćwiczeń z kursu u naszych dystrybutorów!
Masz już zestaw? Zarejestruj go wykorzystując dołączony do niego kod. Szczegóły »
Jak w takim razie należy przesyłać tekst do wyświetlacza? Konieczne jest podłączenie około 12 przewodów. Oczywiście tylko część z nich służy do komunikacji, pozostałe to zasilanie oraz inne sygnały, które nie zmieniają się podczas pracy wyświetlacza.
Najczęściej, ekran taki, jest wyposażony w 16-pinowe złącze:
Wyświetlacz tekstowy LCD 2x16 znaków.
Licząc od lewej, podłączenia prezentują się jak poniżej. Znaczenie wszystkich pinów od 4 do 12 nie jest najważniejsze, przedstawiam je dla ciekawskich czytelników:
GND - masa
Vcc - zasilanie dodatnie, 5V
V0 - regulacja kontrastu
RS - wybór rejestrów (komenda, dane)
RW - wybór opcji odczyt/zapis
E - zezwolenie na zapis do rejestrów
D0 - dane
D1 - dane
D2 - dane
D3 - dane
D4 - dane
D5 - dane
D6 - dane
D7 - dane
Vpod - zasilanie dodatnie podświetlenia
GNDpod - masa podświetlenia
Piny od 1 do 3 służą do zasilania układu, od 4 do 14 do sterowania, zaś pod 15 i 16 znajduje się wewnętrzna dioda święcąca, która podświetla ekran. Wyświetlacze kompatybilne ze sterownikiem HD44780 mogą komunikować się z otoczeniem w trybie 4-bitowym oraz 8-bitowym.
W pierwszym z nich konieczne jest 7 połączeń Arduino <-> wyświetlacz. Natomiast w przypadku trybu 8-bitowego należy zrobić ich aż 11. Korzystając z mniejszej ilości wyprowadzeń zachowamy praktycznie wszystkie opcje wyświetlacza.
Dlatego w prawie każdej sytuacji LCD podłączamy w trybie 4-bitowym. Wtedy należy wykorzystać tylko piny pogrubione na powyższej liście.
Podłączenie wyświetlacza do Arduino
Arduino jest wyposażone w specjalną bibliotekę przygotowaną do wyświetlania tekstów. Jednak zanim przejdziemy do pracy z wyświetlaczem pora go podłączyć. Na szczęście w tej części kursu nie będzie wielu schematów montażowych - wystarczy tylko kilka. Pierwszy znajduje się poniżej.
Potrzebne są: Arduino, płytka stykowa, LCD, potencjometr oraz oczywiście przewody.
Podłączenie LCD do Arduino.
Wyjaśnienia może wymagać potencjometr. Jest on podłączony w roli dzielnika napięcia, za pomocą którego regulowany jest kontrast wyświetlacza. Druga ważna sprawa, to podświetlenie. Napięcie można podłączyć przez rezystor ograniczający prąd lub bezpośrednio (ponieważ najczęściej w środku wyświetlacza jest już wbudowany rezystor). Kwestia doboru jasności, każdy musi tutaj samodzielnie eksperymentować. U mnie ładny efekt uzyskałem bez rezystora.
Po podłączeniu Arduino do prądu (tutaj wystarczy zasilanie z USB) ekran powinien się świecić. Tak jak widoczne jest to poniżej.
Efekt źle ustawionego kontrastu (po lewej).
Kręcąc potencjometrem od kontrastu uzyskać można jeden z dwóch wariantów. Pusty ekran lub górny wiersz zapełniony prostokątami. Czy oznacza to uszkodzenie wyświetlacza?
Nie! To dobry objaw, sprawny wyświetlacz podłączony do prądu powinien właśnie tak wyglądać. Dlatego ustaw w tym momencie potencjometr w taki sposób, aby widzieć prostokąty.
Wyświetlacze dostępne są w różnych kolorach - często zielonym lub niebieskim. Ja tym razem posłużyłem się wyświetlaczem czerwonym/bursztynowym.
Teraz możemy przejść do programowania...
Pierwszy program - wyświetlanie tekstu
Tak jak w przypadku serwomechanizmów w Arduino znajdziemy osobną bibliotekę ułatwiającą pracę z wyświetlaczami tekstowymi. Tym razem jej nazwa to LiquidCrystal. Na początku przykład, a później omówienie programu. Nie wgrywaj jeszcze kodu do swojego Arduino!
LiquidCrystallcd(2,3,4,5,6,7);//Informacja o podłączeniu nowego wyświetlacza
voidsetup(){
lcd.begin(16,2);//Deklaracja typu
lcd.setCursor(0,0);//Ustawienie kursora
lcd.print("Kurs Arduino");//Wyświetlenie tekstu
lcd.setCursor(0,1);//Ustawienie kursora
lcd.print("Na Forbocie!");//Wyświetlenie tekstu
}
voidloop(){
}
Biblioteka do obsługi wyświetlacza umieszczona jest w pliku: LiquidCrystal.h. Aby rozpocząć pracę z wyświetlaczem należy zainicjować nowy obiekt. Służy do tego linijka:
Arduino
1
LiquidCrystallcd(2,3,4,5,6,7);
Zapis taki informuje, że podłączyliśmy wyświetlacz nazwany lcd do pinów od 2 do 7. Konkretnie sygnały zostały podpięte kolejno do: 2 (RS), 3 (Enable), 4 (D4), 5 (D5), 5 (D6) i 7 (D7).
Oczywiście wybór podłączenia jest dowolny.
Ważne, aby zgadzał się z fizycznymi połączeniami.
Funkcja lcd.begin(znaki, linie) ustawia ilość znaków i wierszy, na których będzie wyświetlany tekst. W naszym przypadku wyświetlacz pozwala na 16 znaków, w każdej z 2 linii.
Inny popularny rozmiar wyświetlaczy to 2x8.
Funkcja lcd.setCursor(pozycja, wiersz) ustawia kursor w zadanej pozycji. Przykładowo zapis (0,0) oznacza początek napisu od pierwszego znaku, pierwszego wiersza. Z kolei zapis (0,1), to tekst od początku drugiej linijki.
Najważniejsza funkcja - lcd.print(napis) wypisuje na wyświetlaczu tekst. Podczas wyświetlania kolejnych liter przesuwa się kursor. Dlatego kolejne wywołanie lcd.print zaczyna się od miejsca, gdzie był koniec poprzedniego tekstu. Chyba, że pomiędzy wywołaniami skorzystamy z setCursor. Wszystko stanie się jasne podczas kolejnych przykładów.
Teraz pora, aby wgrać program do Arduino! Efekt powinien prezentować się tak, jak poniżej:
Tekst wyświetlany na LCD z Arduino!
Co jeśli nie działa?
Jeśli na ekranie nie widzisz tekstu sprawdź poniższe 3 punkty, rozwiązują one 99,99% problemów!
Brak zasilania podłączonego do LCD
Błędna kolejność połączenia sygnałów z Arduino
Złe ustawienie kontrastu
Ostatni punkt został pogrubiony, bo jest najłatwiejszy w sprawdzeniu, a początkujący często o nim zapominają! Mam nadzieję, że po sprawdzeniu powyższych punktów wszystko zadziałało. Teraz możemy zająć się omówieniem najważniejszych funkcji powiązanych z LCD. Jednak najpierw proste zadanie domowe
Zadanie domowe 7.1
Napisz program, który wyświetli na ekranie w pierwszej linii Twoje imie, a w drugiej adres forbot.pl Zdjęcie obowiązkowo wrzuć w komentarzu!
Włączanie i wyłączanie kursora - Arduino
Tak jak w edytorze tekstu, na LCD możemy mieć włączony lub wyłączony kursor. Będzie to znak "_" umiejscowiony za ostatnio napisanym znakiem. Domyślnie jest on wyłączony. Do sterowania służą dwie, proste funkcje: lcd.cursor() oraz lcd.noCursor().
LiquidCrystallcd(2,3,4,5,6,7);//Informacja o podłączeniu nowego wyświetlacza
voidsetup(){
lcd.begin(16,2);//Deklaracja typu
lcd.setCursor(0,0);//Ustawienie kursora
lcd.print("Kurs Arduino");//Wyświetlenie tekstu
lcd.setCursor(0,1);//Ustawienie kursora
lcd.print("Na Forbocie!");//Wyświetlenie tekstu
lcd.cursor();//Włącznie kursora
}
voidloop(){
}
Otrzymamy następujący efekt:
LCD sterowane z Arduino - włączony kursor.
Oczywiście efekty te można mieszać, sprawdźcie sami efekt programu, gdy w loop wpiszemy:
Arduino
1
2
3
4
5
6
voidloop(){
lcd.noCursor();//Wyłącz kursor
delay(250);//Odczekaj
lcd.cursor();//Włącz kursor
delay(250);//Odczekaj
}
Inna wersja kursora...
Jest jeszcze zbliżona funkcja, która z automatu wprowadza miganie kursora. Tym razem jest nim jednak zamalowany prostokąt. Funkcje do włączenia i wyłączenia tej opcji nazywają się bardzo analogicznie: lcd.noBlink() oraz lcd.blink(). Użycie tej funkcji jest bardzo proste, przykład:
LiquidCrystallcd(2,3,4,5,6,7);//Informacja o podłączeniu nowego wyświetlacza
voidsetup(){
lcd.begin(16,2);//Deklaracja typu
lcd.setCursor(0,0);//Ustawienie kursora
lcd.print("Kurs Arduino");//Wyświetlenie tekstu
lcd.setCursor(0,1);//Ustawienie kursora
lcd.print("Na Forbocie!");//Wyświetlenie tekstu
lcd.blink();//Włącznie kursora
}
voidloop(){
}
Efekt migającego kursora:
Migający kursor - Arduino i LCD
Włączanie i wyłączanie wyświetlacza
Tytuł mówi wszystko, możemy włączać lub wyłączać, to co wyświetlone na ekranie. Uwaga, należy jednak pamiętać, że funkcje te wyłączają jedynie wyświetlanie tekstu.
Nie mają wpływu na podświetlenie!
Kolejny raz nazwy funkcji okazują się wymowne: lcd.display() oraz lcd.noDisplay(). Oczywiście po wyłączeniu i włączeniu wyświetlacza pojawi się na nim poprzedni tekst. Nie ma konieczności ponownego wysyłania zawartości, która ma być widoczna. Przykładowy program:
LiquidCrystallcd(2,3,4,5,6,7);//Informacja o podłączeniu nowego wyświetlacza
voidsetup(){
lcd.begin(16,2);//Deklaracja typu
lcd.setCursor(0,0);//Ustawienie kursora
lcd.print("Kurs Arduino");//Wyświetlenie tekstu
lcd.setCursor(0,1);//Ustawienie kursora
lcd.print("Na Forbocie!");//Wyświetlenie tekstu
lcd.blink();//Włącznie kursora
}
voidloop(){
lcd.noDisplay();//Wyłącz i poczekaj
delay(500);
lcd.display();//Włącz i poczekaj
delay(500);
}
Oraz efekt:
Chwilowe wyłączanie wyświetlacza - LCD i Arduino.
Usuwanie zawartości LCD
Testując wyświetlanie tekstów na LCD możesz zauważyć, że czasami nachodzą one na siebie. Wyświetlacz nie czyści automatycznie swojej zawartości (ma to swoje zalety). Jeśli chcemy jednak usunąć cały tekst korzystamy z funkcji lcd.clear(). Sprawdź samodzielnie jak ona działa!
Wyświetlanie wyniku ADC na wyświetlaczu
Program służy do wyświetlania wartości napięcia występującego na fotorezystorze. Fotorezystor z rezystorem tworzą dzielnik napięcia, zaś napięcie to podawane jest na wejście analogowe A0.
Schemat podłączenia czujnika światła.
Przy zmianie natężenia światła padającego na dzielnik, zmienia się (odczytywana) wartość napięcia na przetworniku. Wynik binarny przetwarzany jest na odpowiadający mu wynik napięcia. Zadanie to powinno być banalne, jeśli zapoznaliście się wcześniej z częścią o ADC.
lcd.setCursor(0,1);//Ustawienie kursora w odpowiednim momencie
lcd.print(odczyt);//Wyświetlenie tekstu
delay(250);//Opóźnienie
}
Zwróć uwagę, że w tym przypadku napisy wyświetlamy tylko raz i już nigdy ich nie nadpisujemy. Zmieniamy tylko pierwsze 4 znaki dolnej linijki, czyli nasz odczyt. Sprawdź czy program działa poprawnie. U mnie wynik wyglądał przykładowo tak:
Przenośny miernik natężenia światła!
Tym sposobem zbudowaliśmy przenośne urządzenie, które może prezentować swoje wyniki bez potrzeby podłączania go do komputera!
Zadanie domowe 7.2
Wyświetlacz ma pewną bezwładność. Sprawdź co dzieje się, gdy staramy się zbyt szybko pokazać nowe dane (usuwając zawartość ekranu przy każdym obiegu pętli).
Zadanie domowe 7.3
Sprawdź, co działoby się, gdybyśmy w powyższym przykładzie woltomierza odświeżali częściej cały tekst. Czy wynik nadal byłby taki łatwy do odczytania, do jakiej wartości?
Zadanie domowe 7.4
Napisz program, który jest prostym stoperem. W momencie przyciśnięcia jednego przycisku pomiar rusza, a na ekranie pojawią się aktualny czas. Po wciśnięciu drugiego przycisku na ekranie pojawia się napis "Koniec" oraz zmierzony czas w sekundach.
Co z tym podświetleniem...
Na koniec jeszcze jedna ciekawostka. Wspomniałem wcześniej, że nie mamy możliwości kontroli podświetlenia. Czy na pewno? W końcu jest to tylko dioda święcąca. Gdyby tak podłączyć ją do mikrokontrolera? Wystarczy przełożyć jeden przewód:
Doświadczenie może być szkodliwe dla Arduino. Sprawdź, ile prądu pobiera Twoje podświetlenie. Informacje o pomiarach prądu znajdziesz w kursie elektroniki. Dla bezpieczeństwa warto podłączyć podświetlenie przez rezystor lub tranzystor!
Pełna kontrola nad wyświetlaczem.
Pamiętacie jakie możliwości daje generowanie sygnału PWM? Sprawdźcie jak zachowuje się LCD po wgraniu poniższego programu. Wierzę, że wiecie już dlaczego tak się dzieje!
LiquidCrystallcd(2,3,4,5,6,7);//Informacja o podłączeniu nowego wyświetlacza
voidsetup(){
lcd.begin(16,2);//Deklaracja typu
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Witaj na");
lcd.setCursor(0,1);
lcd.print("FORBOT.pl");
}
intjasnosc=0;
intzmiana=5;
voidloop()
{
analogWrite(11,jasnosc);//Generuj sygnał PWM o zadanym wypełnieniu
jasnosc=jasnosc+zmiana;//W następnym obiegu zmien jasnosc o wartosc zmiennej zmiana
if(jasnosc==0||jasnosc==255){//Jeśli wypełnienie to 0% lub 100%
zmiana=0-zmiana;//To zmień znak zmiany (zacznij zmieniać w przeciwną stronę)
}
delay(30);//Czekaj dla lepszego efektu
}
Masz już pełną kontrolę nad wyświetlaczami LCD. Od teraz będziemy korzystać z nich przy kolejnych projektach. Do tego czasu dobrze opanuj ich działanie!
Podsumowanie
W tej części kursu omówiliśmy najważniejsze informacje dotyczące wyświetlaczy tekstowych. Z pewnością będziecie z nich korzystali w wielu projektach. Oprócz tego, że są użyteczne, to dość znacznie poprawiają odbiór całego urządzenia, które wygląda dużo profesjonalniej!
W kolejnej części kursu wrócimy do sygnałów PWM. Pokażę, jak łatwo można sterować silnikiem. Jak zawsze zachęcam do komentowania oraz zadawania pytań!
Autor: Damian (Treker) Szymański
PS Nie chcesz przeoczyć kolejnych części naszego darmowego kursu programowania Arduino? Skorzystaj z poniższego formularza i zapisz się na powiadomienia o nowych publikacjach!
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY na bazie Arduino i Raspberry Pi.
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY z Arduino i RPi.
Trwa ładowanie komentarzy...