Zatem już mamy wszystko skonfigurowane, pozostały nam tylko funkcje odpowiadające za wyświetlanie znaków.
Pierwsza funkcja bez której się nie obejdziemy to lcd.setCursor():
|
1 2 3 4 5 |
lcd.setCursor(kolumna, wiersz); //UWAGA: kolumna: 0 to jest pierwsza kolumna od lewej strony wiersz: 0 to pierwszy wiersz |
Jak widać w tej funkcji mamy małą pułapkę- numeracja kolumn i wierszy zaczyna się od 0 a nie od 1. Po takim ustawieniu nasz wyświetlacz wie, w którym miejscu zacząć wyświetlać znaki. W przeciwnym wypadku na wyświetlaczu nie pojawi się nic albo w randomowych miejscach.
Druga funkcja, właściwa już to lcd.print():
|
1 |
lcd.print(data); |
Przy pomocy tej funkcji możemy wyświetlać napisy, czy też zmienne i tak na ten moment to tyle z podstawowych funkcji. W dalszej części przedstawię dodatkowe funkcje biblioteki.
3. Hello World!
Klasykiem, już jest fakt, że pierwszy program programisty to wyświetlający się napis „Hello World!”. Zatem nie bądźmy gorsi i też wyświetlmy ten napis

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <LiquidCrystal.h> //dodaj biblitekę LiquidCrystal.h LiquidCrystal lcd(3,4,5,6,7,8,9); //konfigurujemy ekran: //RS - pin 3 //RW - pin 4 //E - pin 5 //D4 - pin 6 //D5 - pin 7 //D6 - pin 8 //D7 - pin 9 void setup() { lcd.begin(20,4); //ustaw rozdzielczość ekranu 20x4 lcd.clear(); //wyczysc ekran } void loop() { lcd.setCursor(0,0); //ustaw kursor w pozycji 0,0 (lewy górny róg ekranu) lcd.print("Hello World!"); //wyświetl napis Hello World! } |
Tak jak omawiałem wcześniej. Najpierw dodajemy do naszego programu bibliotekę obsługującą wyświetlacz. Następnie ustalamy pod jakie piny podłączamy nasz ekran (wybrałem wariant 2.). Gdy już to zrobimy to do bloku setup() wpisujemy informację o naszym ekranie, jaką posiada rozdzielczość oraz informację o tym, że ma być wyczyszczony. Do pętli głównej programu wprowadzamy informację w jakim miejscu znajduje się kursor ekranu, względem którego są wyświetlanie znaki. W naszym przypadku jest to pierwsza kolumna i pierwszy wiersz (lewy górny róg). Teraz pozostało nam już tylko wysłać do naszego ekranu napis „Hello World!”. Po tak wykonanym programie powinniśmy otrzymać efekt jak na zdjęciu poniżej:

Rozbudujmy nasz program !
oprócz wyświetlania „Hello World!” dodajmy możliwość odczytu wartości przetwornika A/C, do którego podłączyliśmy potencjometr

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <LiquidCrystal.h> //dodaj biblitekę LiquidCrystal.h int potencjometr = A0; //defniujemy pin A0 jako potencjometr int wartosc = 0; //definiujemy nową zmienną "wartosc" o wartosci poczatkowej 0 LiquidCrystal lcd(3,4,5,6,7,8,9); //konfigurujemy ekran: //RS - pin 3 //RW - pin 4 //E - pin 5 //D4 - pin 6 //D5 - pin 7 //D6 - pin 8 //D7 - pin 9 void setup() { pinMode(potencjometr, INPUT); //ustaw potencjometr jako wejście lcd.begin(20,4); //ustaw rozdzielczość ekranu 20x4 lcd.clear(); //wyczysc ekran } void loop() { lcd.setCursor(0,0); //ustaw kursor w pozycji 0,0 (lewy górny róg ekranu) lcd.print("Hello World!"); //wyświetl napis Hello World! lcd.setCursor(0,2); //ustaw kursor w pozycji 0,2 (trzecia linijka) lcd.print("Wartosc A/C: "); //wyświetl napis "Wartosc A/C: " wartosc = analogRead(potencjometr); //zmiennej wartosc przypisujemy odczyt z A/C lcd.print(wartosc); //wyswietl na ekranie wartość zmiennej wartosc } |
Program jest ten sam co poprzednio z tym, że doszła nam nowa zmienna o nazwie „wartosc”, w której przechowujemy wartość przetwornika A/C oraz konfigurację pinu analogowego A0 dla potencjometra. Od 32. linijki kodu mamy kolejne nowości. To znaczy chcemy w trzecim wierszu wyświetlacza wyświetlić napis „Wartosc A/C: ” a obok niego wartość naszej nowej zmiennej. Jeżeli uważałeś na poprzednich częściach kursu to widzisz tutaj zapewne analogię do kursu o UART– praktycznie taki sam sposób transmisji danych. Teraz czas sprawdzić program.
Jak widzisz na ekranie dzieją się dziwne rzeczy w szczególności z wartością odczytu A/C. Zamiast odczytać wartość jednocyfrową to ekran pokazuje nam jakąś wartość trzycyfrową, która nie ma pokrycia w rzeczywistości. Dzieje się tak za sprawą tego, że nasz ekran w pętli głównej programu nie jest odświeżany. To jest tak samo jak z monitorem. Jeżeli nie byłby odświeżany to po zamknięciu okienka ono by się jeszcze wyświetlało do następnego włączenia monitora. Aby zaradzić temu to musimy dodać czyszczenie ekranu na początku pętli oraz opóźnienie czasowe żeby nasz obraz był statyczny. Zatem poprawiona pętla powinna wyglądać tak:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void loop() { lcd.clear(); //wyczysc ekran lcd.setCursor(0,0); //ustaw kursor w pozycji 0,0 (lewy górny róg ekranu) lcd.print("Hello World!"); //wyświetl napis Hello World! lcd.setCursor(0,2); //ustaw kursor w pozycji 0,2 (trzecia linijka) lcd.print("Wartosc A/C: "); //wyświetl napis "Wartosc A/C: " wartosc = analogRead(potencjometr); //zmiennej wartosc przypisujemy odczyt z A/C lcd.print(wartosc); //wyswietl na ekranie wartość zmiennej wartosc delay(18); //odczekaj 18ms } |
Dla mnie wartość 18ms sprawia, że obraz jest statyczny, z Twoim ekranem może być inaczej (ale nie musi)