7 Kurs Arduino #7 Wyświetlacz tekstowy, LCD 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. Krótki wstęp o wyświetlaczach 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 - w każdym, z dwóch wierszy. To jest właśnie wyświetlacz tekstowy LCD (lub ). Zapis ten oznacza, że w jednej chwili na ekranie możemy wyświetlić wiersze, po 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.:. Dzięki temu możliwe jest dodatkowo rysowanie np.: linii, czy okręgów. W tym kursie zajmiemy się monochromatycznymi (jednokolorowymi) wyświetlaczami tekstowymi. Graficzne pojawią się w kontynuacji kursu. 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 HD70. Najczęściej w opisie danego LCD znajdziesz Wyświetlacz zgodny ze sterownikiem HD70. Wtedy wiadomo, że jego obsługa będzie wręcz banalna! Pamiętaj, że podstawą w zrozumieniu programowania jest praktyka. Nie będziesz umiał wykorzystać zdobytej tu wiedzy, jeśli nie wykonasz ćwiczeń z kursu. Zestaw elementów do przeprowadzenia ćwiczeń Gwarancja pomocy na forum dla osób, które kupią poniższy zestaw!
Teraz możesz kupić zestaw ponad 70 elementów niezbędnych do przeprowadzenia ćwiczeń z kursu u naszych dystrybutorów! Jak w takim razie należy przesyłać tekst do wyświetlacza? Konieczne jest podłączenie około 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 -pinowe złącze: Wyświetlacz tekstowy LCD znaków. Licząc od lewej, podłączenia prezentują się jak poniżej. Znaczenie wszystkich pinów od do nie jest najważniejsze, przedstawiam je dla ciekawskich czytelników:. GND masa. Vcc zasilanie dodatnie, V. V0 regulacja kontrastu. RS wybór rejestrów (komenda, dane). RW wybór opcji odczyt/zapis. E zezwolenie na zapis do rejestrów 7. D0 dane. D dane. D dane. D dane. D dane
. D dane. D dane. D7 dane. Vpod zasilanie dodatnie podświetlenia. GNDpod masa podświetlenia Piny od do służą do zasilania układu, od do do sterowania, zaś pod i znajduje się wewnętrzna dioda święcąca, która podświetla ekran. Wyświetlacze kompatybilne ze sterownikiem HD70 mogą komunikować się z otoczeniem w trybie -bitowym oraz -bitowym. W pierwszym z nich konieczne jest 7 połączeń Arduino <-> wyświetlacz. Natomiast w przypadku trybu -bitowego należy zrobić ich aż. Korzystając z mniejszej ilości wyprowadzeń zachowamy praktycznie wszystkie opcje wyświetlacza. Dlatego w prawie każdej sytuacji LCD podłączamy w trybie -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! 7 lcd.begin(, ); //Deklaracja typu lcd.setcursor(0, 0); //Ustawienie kursora lcd.print("kurs Arduino"); //Wyświetlenie tekstu lcd.setcursor(0, ); //Ustawienie kursora lcd.print("na Forbocie!"); //Wyświetlenie tekstu void loop() { 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: LiquidCrystal lcd(,,,,, 7); Zapis taki informuje, że podłączyliśmy wyświetlacz nazwany lcd do pinów od do 7. Konkretnie sygnały zostały podpięte kolejno do: (RS), (Enable), (D), (D), (D) 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 znaków, w każdej z linii. Inny popularny rozmiar wyświetlaczy to. 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,), 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 punkty, rozwiązują one,% 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. 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(). Gdy kursor zostanie włączony: 7 lcd.begin(, ); //Deklaracja typu lcd.setcursor(0, 0); //Ustawienie kursora lcd.print("kurs Arduino"); //Wyświetlenie tekstu lcd.setcursor(0, ); //Ustawienie kursora lcd.print("na Forbocie!"); //Wyświetlenie tekstu lcd.cursor(); //Włącznie kursora void loop() { 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: void loop() { lcd.nocursor(); //Wyłącz kursor delay(0); //Odczekaj lcd.cursor(); //Włącz kursor delay(0); //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: 7 lcd.begin(, ); //Deklaracja typu lcd.setcursor(0, 0); //Ustawienie kursora lcd.print("kurs Arduino"); //Wyświetlenie tekstu lcd.setcursor(0, ); //Ustawienie kursora lcd.print("na Forbocie!"); //Wyświetlenie tekstu lcd.blink(); //Włącznie kursora void loop() { 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! Po raz kolejny 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: 7 7 lcd.begin(, ); //Deklaracja typu lcd.setcursor(0, 0); //Ustawienie kursora lcd.print("kurs Arduino"); //Wyświetlenie tekstu lcd.setcursor(0, ); //Ustawienie kursora lcd.print("na Forbocie!"); //Wyświetlenie tekstu lcd.blink(); //Włącznie kursora void loop() { lcd.nodisplay(); //Wyłącz i poczekaj delay(00); lcd.display(); //Włącz i poczekaj delay(00); 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.begin(, ); //Deklaracja typu lcd.clear();
7 7 0 lcd.setcursor(0, 0); //Ustawienie kursora lcd.print("nap. odczytane"); lcd.setcursor(0,); lcd.print("0.00v"); double odczyt; void loop() { odczyt = analogread(a0)*.0/.0; //Wartość napięcia lcd.setcursor(0, ); //Ustawienie kursora w odpowiednim momencie lcd.print(odczyt); //Wyświetlenie tekstu delay(0); //Opóźnienie Zwróć uwagę, że w tym przypadku napisy wyświetlamy tylko raz i już nigdy ich nie nadpisujemy. Zmieniamy tylko pierwsze 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. 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. 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. 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! 7 7 0 lcd.begin(, ); //Deklaracja typu lcd.clear(); lcd.setcursor(0,0); lcd.print("witaj na"); lcd.setcursor(0,); lcd.print("forbot.pl"); int jasnosc = 0; int zmiana = ; void loop() { analogwrite(, 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 == ) { //Jeśli wypełnienie to 0% lub 0% zmiana = 0-zmiana; //To zmień znak zmiany (zacznij zmieniać w przeciwną stronę) delay(0); //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!