Arduino UNO & LCD 2×16 – tworzenia własnych znaków


Szybki poradnik 0 tym jak na ekranie lcd 2×16 (lub innych stworzonych w podobnym standardzie) wyświetlić nietypowe znaki czy polski liter takie jak np Ś, Ć, Ż i inne. Nie ma sensu rozpisywać się więcej w tym wstępie także od razu przechodzimy do przykładów.

[pastacode lang=”cpp” manual=”%23include%20%22LiquidCrystal.h%22%0A%0ALiquidCrystal%20lcd(8%2C%209%2C%204%2C%205%2C%206%2C%207)%3B%0A%0Avoid%20setup()%0A%7B%0A%09lcd.begin(2%2C%2016)%3B%0A%7D%0A%0Avoid%20loop()%0A%7B%0A%09lcd.clear()%3B%0A%09lcd.print(%22Download%20Win%2010%22)%3B%0A%09lcd.setCursor(0%2C%201)%3B%0A%09lcd.print(%22Select%20Yes%2Fyes%22)%3B%0A%09delay(1000)%3B%0A%7D” message=”” highlight=”” provider=”manual”/]

Potrzebny sprzęt ciężki:

  • Arduino Uno lub inna płytka
  • Ekrna lcd 2×16 lub inny (sam korzystam z gotowego shielda) 

Analiza kodu:

  • #include “LiquidCrystal.h” – jak zawsze konieczne będzie użycie odpowiedniej biblioteki
  • LiquidCrystal lcd(8, 9, 4, 5, 6, 7); tworzymy nowy obiekt i ustawiamy argumenty (piny) w
    konstruktorze
  • lcd.begin(2, 16); – wymiary naszego wyświetlacza
  • lcd.clear(); – wyczyszczeni wyświetlacza
  • lcd.print(“Download Win 10”); – wyświetlenie wiadomości
  • lcd.setCursor(0, 1); – ustawienie pozycji (w tym przypadku pierwsze pole 2 linii)
  • delay(1000); – odczekanie 1 s
    Standardowo wyświetlony tekst na dwóch liniach

Definiow anie własnych znaków 

[pastacode lang=”cpp” manual=”%23include%20%22LiquidCrystal.h%22%0A%0ALiquidCrystal%20lcd(8%2C%209%2C%204%2C%205%2C%206%2C%207)%3B%0A%0A%0Abyte%20L%5B8%5D%20%3D%20%7B%0A%090b01000%2C%0A%090b11000%2C%0A%090b01100%2C%0A%090b01010%2C%0A%090b01001%2C%0A%090b01000%2C%0A%090b01111%2C%0A%090b00000%0A%7D%3B%0A%0A%0A%0A%0Avoid%20setup()%0A%7B%0A%09lcd.createChar(0%2C%20L)%3B%0A%09lcd.begin(16%2C%202)%3B%0A%7D%0A%0Avoid%20loop()%0A%7B%0A%09lcd.clear()%3B%0A%09lcd.print((char)0)%3B%0A%09lcd.setCursor(0%2C%201)%3B%0A%09lcd.print(%22%C5%81%22)%3B%0A%09delay(1000)%3B%0A%7D%0A%0A” message=”” highlight=”” provider=”manual”/]

Przedstawiony fragment kodu pozwolił nam na wyświetlenie litery “Ł” czyli jednego z symboli które standardowo nie są zdefiniowane. (Linia druga jest próbą wyświetlenia tej samej litery/znaku. Nie jest ona jednak zdefiniowana w bibliotece i próba pokazania jej na ekranie kończy się błędem i wyświetleniem 3 symboli Öソス.



Analiza kodu:
byte uno[8] = {xyz}; – definicja naszego nowego znaku. Jest to tablica o wymiarach 5 x 8 typu byte gdzie zero oznacza wygaszony pixel natomiast jeden to pixel rozświetlony. Nie musimy się jednak bawić w ręcznie zmienianie wartości wystarczy skorzystać z https://omerk.github.io/lcdchargen/ i skopiować gotowy wzór tablicy.

  • lcd.createChar(0, uno); – definiowanie nowego znaku pod numerem 0 (liczba numerów dla ekranu 2×16 jest ograniczona do 8 znaków)
  • lcd.print((char)0); – wyświetlanie naszego nowego znaku

W języku polskim istnieje dziewięć liter tworzonych za pomocą znaków diakrytycznych (litery diakrytyczne): ą, ć, ę, ł, ń, ó, ś, ź, ż . Jak wiemy w standardowy sposób nie jesteśmy w stanie wyświetlić tych symboli, koniecznie jest więc utworzeni odpowiednich symboli w naszym programie.

 

[pastacode lang=”cpp” manual=”%23include%20%22LiquidCrystal.h%22%0A%0ALiquidCrystal%20lcd(8%2C%209%2C%204%2C%205%2C%206%2C%207)%3B%0A%0A%0Abyte%20L%5B8%5D%20%3D%20%7B%0A%090b01000%2C%0A%090b11000%2C%0A%090b01100%2C%0A%090b01010%2C%0A%090b01001%2C%0A%090b01000%2C%0A%090b01111%2C%0A%090b00000%0A%7D%3B%0A%0Abyte%20A%5B8%5D%20%3D%20%7B%0A%090b01100%2C%0A%090b10010%2C%0A%090b10010%2C%0A%090b11110%2C%0A%090b10010%2C%0A%090b10011%2C%0A%090b00001%2C%0A%090b00000%0A%7D%3B%0A%0Abyte%20C%5B8%5D%20%3D%20%7B%0A%090b00011%2C%0A%090b00000%2C%0A%090b01110%2C%0A%090b10000%2C%0A%090b10000%2C%0A%090b10000%2C%0A%090b10000%2C%0A%090b01110%0A%7D%3B%0A%0Abyte%20E%5B8%5D%20%3D%20%7B%0A%090b11110%2C%0A%090b10000%2C%0A%090b10000%2C%0A%090b11110%2C%0A%090b10000%2C%0A%090b10000%2C%0A%090b11110%2C%0A%090b00011%0A%7D%3B%0A%0Abyte%20N%5B8%5D%20%3D%20%7B%0A%090b00010%2C%0A%090b00100%2C%0A%090b10001%2C%0A%090b11001%2C%0A%090b10101%2C%0A%090b10011%2C%0A%090b10001%2C%0A%090b00000%0A%7D%3B%0A%0Abyte%20O%5B8%5D%20%3D%20%7B%0A%090b00110%2C%0A%090b00000%2C%0A%090b01110%2C%0A%090b10001%2C%0A%090b10001%2C%0A%090b10001%2C%0A%090b10001%2C%0A%090b01110%0A%7D%3B%0A%0Abyte%20S%5B8%5D%20%3D%20%7B%0A%090b00011%2C%0A%090b00000%2C%0A%090b01110%2C%0A%090b10000%2C%0A%090b11000%2C%0A%090b00110%2C%0A%090b00010%2C%0A%090b11100%0A%7D%3B%0A%0Abyte%20Z%5B8%5D%20%3D%20%7B%0A%090b00011%2C%0A%090b00000%2C%0A%090b11110%2C%0A%090b00010%2C%0A%090b00100%2C%0A%090b01000%2C%0A%090b10000%2C%0A%090b11110%0A%7D%3B%0A%0Abyte%20X%5B8%5D%20%3D%20%7B%0A%090b00100%2C%0A%090b00000%2C%0A%090b11110%2C%0A%090b00010%2C%0A%090b00100%2C%0A%090b01000%2C%0A%090b10000%2C%0A%090b11110%0A%7D%3B%0A%0A%0Avoid%20setup()%0A%7B%0A%09lcd.createChar(0%2C%20A)%3B%0A%09lcd.createChar(1%2C%20C)%3B%0A%09lcd.createChar(2%2C%20E)%3B%0A%09lcd.createChar(3%2C%20L)%3B%0A%09lcd.createChar(4%2C%20N)%3B%0A%09lcd.createChar(5%2C%20O)%3B%0A%09lcd.createChar(6%2C%20S)%3B%0A%09lcd.createChar(7%2C%20Z)%3B%0A%09lcd.begin(16%2C%202)%3B%0A%7D%0A%0Avoid%20loop()%0A%7B%0A%09lcd.clear()%3B%0A%09lcd.print((char)0)%3B%0A%09lcd.setCursor(2%2C%200)%3B%0A%09lcd.print((char)1)%3B%0A%09lcd.setCursor(4%2C%200)%3B%0A%09lcd.print((char)2)%3B%0A%09lcd.setCursor(6%2C%200)%3B%0A%09lcd.print((char)3)%3B%0A%09lcd.setCursor(8%2C%200)%3B%0A%09lcd.print((char)4)%3B%0A%09lcd.setCursor(10%2C%200)%3B%0A%09lcd.print((char)5)%3B%0A%09lcd.setCursor(12%2C%200)%3B%0A%09lcd.print((char)6)%3B%0A%09lcd.setCursor(14%2C%200)%3B%0A%09lcd.print((char)7)%3B%0A%0A%09lcd.setCursor(0%2C%201)%3B%0A%09lcd.print(%22A%20C%20E%20L%20N%20O%20S%20Z%22)%3B%0A%09%0A%09delay(1000)%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]

Dziewięć liter ale tylko osiem możliwych do zdefiniowania nowych symboli (brak litery Ż w przykładzie powyżej). W taki wypadku musimy podejść do problemu w trochę inny sposób i definiować nowa znaki w trakcie działania programu. Jest to jednak trochę bardziej skomplikowany przykład i w takim wypadku odsyłam was do poradnik http://forum.arduino.cc/index.php?topic=8376.  

Poza literami i znakami specjalnymi możemy zdefiniować i wyświetlić każdy inny znak.

[pastacode lang=”cpp” manual=”%23include%20%22LiquidCrystal.h%22%0A%0ALiquidCrystal%20lcd(8%2C%209%2C%204%2C%205%2C%206%2C%207)%3B%0A%0Abyte%20A%5B8%5D%20%3D%20%7B%0A%090b11111%2C%0A%090b11011%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10001%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b11111%0A%7D%3B%0A%0Abyte%20R%5B8%5D%20%3D%20%7B%0A%090b11111%2C%0A%090b10011%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10011%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b11111%0A%7D%3B%0A%0Abyte%20D%5B8%5D%20%3D%20%7B%0A%090b11111%2C%0A%090b10011%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10011%2C%0A%090b11111%0A%7D%3B%0A%0Abyte%20U%5B8%5D%20%3D%20%7B%0A%090b11111%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b11011%2C%0A%090b11111%0A%7D%3B%0A%0Abyte%20I%5B8%5D%20%3D%20%7B%0A%090b11111%2C%0A%090b11011%2C%0A%090b11011%2C%0A%090b11011%2C%0A%090b11011%2C%0A%090b11011%2C%0A%090b11011%2C%0A%090b11111%0A%7D%3B%0A%0Abyte%20N%5B8%5D%20%3D%20%7B%0A%090b11111%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10001%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b11111%0A%7D%3B%0A%0Abyte%20O%5B8%5D%20%3D%20%7B%0A%090b11111%2C%0A%090b11011%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b10101%2C%0A%090b11011%2C%0A%090b11111%0A%7D%3B%0A%0Abyte%20H%5B8%5D%20%3D%20%7B%0A%090b00000%2C%0A%090b01010%2C%0A%090b11111%2C%0A%090b11111%2C%0A%090b01110%2C%0A%090b00100%2C%0A%090b00000%2C%0A%090b00000%0A%7D%3B%0A%0A%0Achar%20myStringA%5B%5D%20%3D%20%22x%22%3B%0A%0Avoid%20setup()%0A%7B%0A%09lcd.begin(16%2C%202)%3B%0A%09lcd.createChar(0%2C%20H)%3B%0A%09lcd.createChar(1%2C%20A)%3B%0A%09lcd.createChar(2%2C%20R)%3B%0A%09lcd.createChar(3%2C%20D)%3B%0A%09lcd.createChar(4%2C%20U)%3B%0A%09lcd.createChar(5%2C%20I)%3B%0A%09lcd.createChar(6%2C%20N)%3B%0A%09lcd.createChar(7%2C%20O)%3B%0A%0A%7D%0A%0Avoid%20loop()%0A%7B%0A%09lcd.clear()%3B%0A%09lcd.setCursor(3%2C%200)%3B%0A%09lcd.print(%22%5Cx01%5Cx02%5Cx03%5Cx04%5Cx05%5Cx06%5Cx07UNO%22)%3B%0A%09lcd.setCursor(2%2C%201)%3B%0A%09lcd.print(%22%5Cx08LEARNDUINO%5Cx08%22)%3B%0A%09%0A%09delay(1000)%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]

 

  • lcd.print(“\x01\x02\x03\x04\x05\x06\x07UNO”); – znaki możemy także dodawać do naszego testu.
    – symbol \x01 to symbol NULL co spowoduje może spowodować błąd.
  • lcd.print(“Tekst+ kod naszego symbolu np\x08”);Powodzenia i miłej zabawy z tworzeniem nowych symboli -Grupa LearnDuino 🙂
Poprzednia informacja Orange Pi Zero – Przygotowanie środowiska pracy
Kolejna informacja Arduino Remote Control

Brak komentarzy

Zostaw odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *