Tutorial Belajar Arduino Mencetak Karakter Unik LCD


Salah satu jenis penampil yang sering digunakan ialah LCD (Liquid Crystal Display), yang memiliki banyak kelebihan dibandingkan seven segment display. Salah satu kelebihan LCD ialah menampilkan pesan text. Jenis LCD yang banyak digunakan untuk project microcontroller sederhana ialah LCD 16x2, 16 kolom dengan 2 baris.
Setelah sebelumnya memulai belajar dasar menggunakan penampil LCD, kali ini berlanjut ke bahasan penampil LCD dengan karakter unik dan menggulung tampilan LCD tersebut. Terlebih dahulu perlu dilakukan pemetaan konfigurasi wiring diagram. Hal ini ditujukan agar pin yang digunakan pada source code dan wiring diagram sesuai. Berikut ini ialah wiring diagram yang digunakan antara Arduino dengan LCD.

<img src="arduino_lcd.png" alt="arduino_lcd">


Berdasarkan gambar wiring diagram tersebut.
  • LCD RS pin dihubungkan ke digital pin 12
  • LCD Enable pin dihubungkan ke digital pin 11
  • LCD D4 pin dihubungkan ke digital pin 5
  • LCD D5 pin dihubungkan ke digital pin 4
  • LCD D6 pin dihubungkan ke digital pin 3
  • LCD D7 pin dihubungkan ke digital pin 2
Penggunaan potentiometer (variable resistor), ditujukan untuk mengatur tingkat gelap-terang tampilan LCD tersebut, berdasarkan fungsi pembagi tegangan. Berikut ini ialah source code (sketch) sederhana untuk menampilkan pesan text pada LCD yang kemudian menggulung bergeser ke kiri dan juga ke kanan.

/*
Program LCD menggulung
dengan mencakup library LCD

Loki Lang
*/

#include <LiquidCrystal.h>

LiquidCrystal lang(12, 11, 5, 4, 3, 2);

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

void loop()
{
  lang.setCursor(3,0);
  lang.print("LANG8088");
  for(int i =0; i < 20; i++)
  {
    lang.scrollDisplayLeft();
    delay(200);
  }
  for(int i =0; i < 20; i++)
  {
    lang.scrollDisplayRight();
    delay(200);
  }
}

Dalam source code tersebut digunakan macro #include preprocessed directive yang memuat file header LiquidCrystal.h untuk library LCD, untuk penampil LCD.

Proses inisialisasi pin Arduino yang terhubung ke pin LCD RS, Enable, D4, D5, D6, dan D7, dilakukan dalam baris LiquidCrystal lang(12, 11, 5, 4, 3, 2); dimana lang merupakan variable yang dipanggil setiap kali instruksi terkait LCD akan digunakan. Catatan, untuk nama variable lang dapat diubah dengan lcd atau nama lainnya, selama dalam pemanggilan namanya sesuai.

begin()
Untuk begin() digunakan dalam inisialisasi interface ke LCD dan mendefinisikan ukuran kolom dan baris LCD. Pemanggilan begin() harus dilakukan terlebih dahulu sebelum memanggil instruksi lain dalam library LCD. Untuk syntax penulisan instruksi begin() ialah sebagai berikut.
lang.begin(cols, rows)
Dengan lang ialah nama variable, cols jumlah kolom LCD, dan rows jumlah baris LCD.

setCursor()
Instruksi ini digunakan untuk memposisikan cursor awal pesan text di LCD. Penulisan syntax setCursor() ialah sebagai berikut.
lang.setCursor(col, row)
Dengan lang ialah nama variable, col kolom LCD, dan row baris LCD.

print()
Sesuai dengan namanya, instruksi print() ini digunakan untuk mencetak, menampilkan pesan text di LCD. Penulisan syntax print() ialah sebagai berikut.
lang.print(data)
Dengan lang ialah nama variable, data ialah pesan yang ingin ditampilkan.

scrollDisplayLeft()
Merupakan salah satu function dalam library LCD yang berfungsi untuk menggulung tampilan text yang ditampilkan di LCD ke kiri. Sehingga tampilan text di LCD akan terlihat bergeser ke kiri dan seolah-olah bisa menghilang. Banyaknya jumlah pergeseran ditentukan oleh perulangan for() yang digunakan.

scrollDisplayRight()
Merupakan salah satu function dalam library LCD yang berfungsi untuk menggulung tampilan text yang ditampilkan di LCD ke kanan. Sehingga tampilan text di LCD akan terlihat bergeser ke kanan dan seolah-olah bisa menghilang. Banyaknya jumlah pergeseran ditentukan oleh perulangan for() yang digunakan.

Selanjutnya ialah mencetak karakter unik (custom) ke LCD. Berikut adalah contoh source code (sketch) Arduino yang digunakan.

/*
Program LCD mecetak karakter unik
dengan mencakup library LCD

Loki Lang
*/

#include <LiquidCrystal.h>

LiquidCrystal lang(12, 11, 5, 4, 3, 2);

byte smiley[8] = {
  B00000,
  B10001,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};

void setup()
{
  lang.setCursor(3,0)
  lang.createChar(0, smiley);
  lang.begin(16, 2);
}

void loop()
{
  lang.write(byte(0)); 
}

createChar()
Dengan menggunakan funtion pada library LiquidCrystal, yakni createChar(), memungkinkan untuk membuat tampilan karakter unik pada LCD. Tampilan dari setiap karakter tersebut ditentukan oleh array dari data 8 bit untuk setiap barisnya. Dengan lima bit paling belakang terkecil (LSB), dari setiap data menentukan pixel pada baris tersebut. Sementara function write() digunakan untuk menampilkan karakter unik tersebut di LCD.
Untuk penulisan function createChar() ialah sebagai berikut.
lang.createChar(num, data)
Dengan lang ialah variable terkait LCD yang dideklarasikan sebelumnya, num nomor karakter dari 0 hingga 7, dan data merupakan nama untuk karakter unik tersebut.

write()
Sementara itu cara penggunaan function write(), ialah sebagai berikut.
lang.write(byte(num))
Dengan lang ialah variable terkait LCD yang dideklarasikan sebelumnya, num ialah nomor karakter dari 0 hingga 7 yang telah dibuat sebelumnya.
Perbedaan antara function print() dengan write() terletak pada apa yang ditampilkannya. Untuk function print() digunakan dalam mencetak text ke LCD. Sedangkan untuk function write() digunakan untuk mencetak sebuah karakter unik yang berupa data byte.
Lihat juga mengenai tutorial dan penjelasan mengenai project Arduino Uno LED blinking dan Arduino Uno LED animation.