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.

#include "LiquidCrystal.h"

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
	lcd.begin(2, 16);
}

void loop()
{
	lcd.clear();
	lcd.print("Download Win 10");
	lcd.setCursor(0, 1);
	lcd.print("Select Yes/yes");
	delay(1000);
}

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 

#include "LiquidCrystal.h"

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


byte L[8] = {
	0b01000,
	0b11000,
	0b01100,
	0b01010,
	0b01001,
	0b01000,
	0b01111,
	0b00000
};




void setup()
{
	lcd.createChar(0, L);
	lcd.begin(16, 2);
}

void loop()
{
	lcd.clear();
	lcd.print((char)0);
	lcd.setCursor(0, 1);
	lcd.print("Ł");
	delay(1000);
}

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.

 

#include "LiquidCrystal.h"

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


byte L[8] = {
	0b01000,
	0b11000,
	0b01100,
	0b01010,
	0b01001,
	0b01000,
	0b01111,
	0b00000
};

byte A[8] = {
	0b01100,
	0b10010,
	0b10010,
	0b11110,
	0b10010,
	0b10011,
	0b00001,
	0b00000
};

byte C[8] = {
	0b00011,
	0b00000,
	0b01110,
	0b10000,
	0b10000,
	0b10000,
	0b10000,
	0b01110
};

byte E[8] = {
	0b11110,
	0b10000,
	0b10000,
	0b11110,
	0b10000,
	0b10000,
	0b11110,
	0b00011
};

byte N[8] = {
	0b00010,
	0b00100,
	0b10001,
	0b11001,
	0b10101,
	0b10011,
	0b10001,
	0b00000
};

byte O[8] = {
	0b00110,
	0b00000,
	0b01110,
	0b10001,
	0b10001,
	0b10001,
	0b10001,
	0b01110
};

byte S[8] = {
	0b00011,
	0b00000,
	0b01110,
	0b10000,
	0b11000,
	0b00110,
	0b00010,
	0b11100
};

byte Z[8] = {
	0b00011,
	0b00000,
	0b11110,
	0b00010,
	0b00100,
	0b01000,
	0b10000,
	0b11110
};

byte X[8] = {
	0b00100,
	0b00000,
	0b11110,
	0b00010,
	0b00100,
	0b01000,
	0b10000,
	0b11110
};


void setup()
{
	lcd.createChar(0, A);
	lcd.createChar(1, C);
	lcd.createChar(2, E);
	lcd.createChar(3, L);
	lcd.createChar(4, N);
	lcd.createChar(5, O);
	lcd.createChar(6, S);
	lcd.createChar(7, Z);
	lcd.begin(16, 2);
}

void loop()
{
	lcd.clear();
	lcd.print((char)0);
	lcd.setCursor(2, 0);
	lcd.print((char)1);
	lcd.setCursor(4, 0);
	lcd.print((char)2);
	lcd.setCursor(6, 0);
	lcd.print((char)3);
	lcd.setCursor(8, 0);
	lcd.print((char)4);
	lcd.setCursor(10, 0);
	lcd.print((char)5);
	lcd.setCursor(12, 0);
	lcd.print((char)6);
	lcd.setCursor(14, 0);
	lcd.print((char)7);

	lcd.setCursor(0, 1);
	lcd.print("A C E L N O S Z");
	
	delay(1000);
}

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.

#include "LiquidCrystal.h"

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

byte A[8] = {
	0b11111,
	0b11011,
	0b10101,
	0b10101,
	0b10001,
	0b10101,
	0b10101,
	0b11111
};

byte R[8] = {
	0b11111,
	0b10011,
	0b10101,
	0b10101,
	0b10011,
	0b10101,
	0b10101,
	0b11111
};

byte D[8] = {
	0b11111,
	0b10011,
	0b10101,
	0b10101,
	0b10101,
	0b10101,
	0b10011,
	0b11111
};

byte U[8] = {
	0b11111,
	0b10101,
	0b10101,
	0b10101,
	0b10101,
	0b10101,
	0b11011,
	0b11111
};

byte I[8] = {
	0b11111,
	0b11011,
	0b11011,
	0b11011,
	0b11011,
	0b11011,
	0b11011,
	0b11111
};

byte N[8] = {
	0b11111,
	0b10101,
	0b10101,
	0b10001,
	0b10101,
	0b10101,
	0b10101,
	0b11111
};

byte O[8] = {
	0b11111,
	0b11011,
	0b10101,
	0b10101,
	0b10101,
	0b10101,
	0b11011,
	0b11111
};

byte H[8] = {
	0b00000,
	0b01010,
	0b11111,
	0b11111,
	0b01110,
	0b00100,
	0b00000,
	0b00000
};


char myStringA[] = "x";

void setup()
{
	lcd.begin(16, 2);
	lcd.createChar(0, H);
	lcd.createChar(1, A);
	lcd.createChar(2, R);
	lcd.createChar(3, D);
	lcd.createChar(4, U);
	lcd.createChar(5, I);
	lcd.createChar(6, N);
	lcd.createChar(7, O);

}

void loop()
{
	lcd.clear();
	lcd.setCursor(3, 0);
	lcd.print("\x01\x02\x03\x04\x05\x06\x07UNO");
	lcd.setCursor(2, 1);
	lcd.print("\x08LEARNDUINO\x08");
	
	delay(1000);
}

 

  • 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 🙂

Maciej Szostak

Create Account



Log In Your Account