5. Cara Penyajian Informasi dengan LCD

5. Cara Penyajian Informasi dengan LCD

Pembelajaran Cara Penyajian Informasi dengan LCD ini menjelaskan cara menghubungkan LCD dengan Arduino dan membahas beberapa fitur yang terkait dengan LCD, termasuk LCD grafik. Selain itu, dibahas pula aplikasi untuk memantau intensitas cahaya dengan menggunakan LDR.

5.1 Pengenalan LCD

Liquid Crystal Display (LCD) biasa dipakal untuk menamplkan teks.Salah satu bentukmya 5.1 menunjukkan fungsi keenam belas pin di LCD.

Gambar 5.1 LCD display 2 x16 karakter

Tabel 5.1 Pin-pin di LCD

No.pin Nama Pin Keterangan
1 VSS Dihubungkan ke ground
2 VDD Catu daya positif
3 VO Pengatur kontras.Potensiometer 10KΩ bisa

digunakan untuk mengatur tingkat kontras

4 RS Register Select:

  • RS=HIGH untuk mengirim data
  • RS=LOW untuk mengirim instruksi
5 R/W Read/Write control bus

    • R/W=HIGH untuk membaca data di LCD
6 E Data Enable

    • E=HIGH supaya LCD dapat diakses
7 DBO Data
8 DB1 Data
9 DB2 Data
10 DB3 Data
11 DB4 Data
12 DB5 Data
13 DB6 Data
14 DB7 Data
15 BLA Catu daya positif untuk layar
16 BLK Catu daya negatif untuk la

pin header biasa digunakan untuk menghubungkan komponen ini dengan breadboard. Contoh pemasangan pin header dan LCD diperlihatkan di Gambar 5.2.

Gambar 5.2 Pin header dan pemasangan ke LCD display

untuk LCD yang berisi 2 baris dan 16 kolom,penomorannya diperlihatkan di Gambar 5.3, Sel paling kiri dan atas memiliki ID baris 0 dan kolom 0.

Gambar 5.3 Penomoran kolom dan baris di LCD

5.2 Percobaan Menampilkan Tulisan di LCD Display

Percobaan pertama untuk menampilkan tulisan di LCD display dilakukan dengan menggunakan rangkaian di Gambar 5.4.Contoh penyusunan rangkaian ditunjukkan di Gambar 5.5.Gambar 5.6 menunjukkan contoh penyusunan rangkaian secara aktual.

Gambar 5.6 Contoh aktual percobaan LCD display

Sketch yang digunakan untuk menguji rangkaian di Gambar 5.4 dapat dilihat berikut ini:

Sketch:lcd

// ——————————————–

// Contoh untuk menampilkan tulisan di lcd display

// ——————————————–

#include <LiquidCrystal.h>

const int PIN_RS =12;

const int PIN_E=11;

const int PIN_DB_4= 7;

const int PIN_DB_5=6;

const int PIN_DB_6=5;

const int PIN_DB_7=4;

//Buat objek

LiquidCrystal lcd(PIN_RS, PIN_E, PIN_DB_4, PIN_DB_5, PIN_DB_6, PIN_DB_7);

void setup()

{

// Tentukan ukuran LCD

lcd.begin(16,2);

}

void loop()

{

lcd.clear();

lcd.print(“Balonku ada lima”);

lcd.setCursor(0, 1);

lcd.print(“Beraneka warna”);

delay(5000);

led,clear();

lcd.print(“Meletus satu”);

lcd.setCursor(0, 1);

Icd.print(“Tinggal 4-1ah”);

delay(5000);

}

Kode

#include <LiquidCrystal.h>

digunakan untuk menyertakan pustaka yang berkaitan dengan LCD.Pustaka yang tersedia menyediakan

bernama LiquidCrystal.

Pernyataan berikut dipakai untuk menciptakan objek berkelas LiquidCrystal:

LiquidCrystal lcd(PIN _RS,PIN_E, PIN_DB_4,

PIN_DB_5,PIN_DB_6,PIN_DB_7);

Dalam hal ini,objek yang dibentuk bernama lcd. Tiga argumen pertama menentukan pin RS dan Empat argumen berikutnya menyatakan empat pin untuk data.

Penentuan jumlah kolom dan baris di LCD ditentukan di setup() dengan memberikan pernyataan:

lcd.begin(16, 2);

Dalam hal ini, 16 menyatakan jumlah kolom dan 2 menyatakan jumlah baris.

Di loop(),lcd.clear;digunakan untuk menghapus konten di layar.Setelah layar dihapus, dengan sendirinya diletakkan di pojok kiri atas. Adapun

lcd.print(“Balonku ada lima”);

digunakan untuk menampilkan string “Balonku ada lima”.String ini akan diletakkan dimulai darip pojok kiri-atas.Selanjutnya,pernyataan

lcd.setCursor(0,1);

digunakan untuk mengatur kursor di kolom pertama baris kedua.Dengan demikian, pernyataan

lcd.print(“Beraneka warna”);

menampilkan string “Beraneka warna” di baris kedua.

Contoh hasil dua lcd,print() di depan ditunjukkan di Gambar 5.7,Adapun hasil perintah berikut

diperlihatkan di Gambar 5.8:

lcd.clear()

led.print(“Meletus satu”))

1ed.setCurser(0,1);

led,print(“Tinggal 4-1ah”)

Gambar 5.8 Contoh kedua hasil di layar LCD

5.3 Eksplorasi Pernyataan lcd.print()

Untuk mengatur peletakan teks di LCD, fungsi anggota setCursor() bisa digunakan. Bentuk pemakaiannya seperti berikut:

objekLCD.setCursor(kolom,baris);

Nomor kolom dimulai dari nol dan begitu pula untuk nomor baris.Contoh berikut memberikan hasil seperti terlihat di Gambar 5.9:

lcd.setCursor(5, 0);

lcd.print(“Tengah”);

lcd.setCursot(8,1);

led,print(“Di Kanan”):

Gambar 5.9 Hasil pengaturan dengan setCursor()

Fungsi anggota print() bisa digunakan untuk menampilkan bilangan,termasuk yang bertipe Contoh:

float bil=43.56789;

lcd.clear();

lcd.print(“bil = “);

lcd.print(bil);

Pernyataan-pernyataan di atas memberikan hasil seperti terlihat di Gambar 5.10.

Gambar 5.10 Secara bawaan bilangan bertipe float ditampilkan dengan dua digit pecahon Dengan memberikan argumen kedua, jumlah digit pecahan bisa ditentukan. Contoh:

float b11-43.56789;

lcd.clear();

lcd.print(“bil=”);

lcd.print(bi1,4);

memberikan hasil seperti terlihat di Gambar 5.11.

Gambar 5.11 Efek penampilan bilangan bertipe float melalui cd.print(bi1, 4);

Adapun contoh berikut memperlihatkan cara untuk membuang bagian pecahan:

float bil=43.56789;

lcd.clear();

lcd.print(“bil = “);

lcd.print(bil, 0);

Hasilnya diperlihatkan di Gambar 5.12. Argumen kedua pada print () yang berupa 0 membuat bilangan bertipe float ke bilangan bulat,dengan pembulatan.

Gambar 5.12 Hasil pembulatan float ke integer

Untuk bilangan bulat, argumen kedua pada fungsi anggota print() berguna untuk menentukan bilangan ditampilkan dalam bentuk biner,oktal,atau heksadesimal. Contoh:

int bil=145;

lcd.setCursor(0, 0);

lcd.print(“bil=”);

lcd.print(bil);

lcd.setCursor(0,1);

lcd.print(“Biner: “);

lcd.print(bil, BIN);

Hasilnya seperti berkut :

Gambar 5.13 Penyajian bilangan bulat ke biner melalui led,print(bil,BIN );

Perhatikan bahwa nilai BIN pada argumen kedua akan membuat bilangan bulat disajikan dalam bentuk biner

Contoh untuk menampilkan bilangan bulat ke dalam bentuk heksadesimal:

int bil=145;

lcd.setCursor(0, 0);

lcd.print(“bil = “);

lcd.print(bil);

lcd.setCursor(0, 1);

lcd.print(“Hex: “);

lcd.print(bil, HEX);

Hasilnya seperti berikut:

Gambar 5.14 Penyajian bilangan bulat ke biner melalui lcd.print(bil,HEX);

Contoh untuk menampilkan bilangan bulat ke dalam bentuk oktal:

int bi11=145:

lcd.setCursor(0,0);

lcd.print(“b1l=”);

lcd.print(bil):

lcd.setCursor(0,1);

Icd.print(“Oktal: “);

lcd.print(bil, OCT);

Gambar 5.14 Penyajian bilangan bulat ke biner melalui lcd.print(bil,OCT);

5.4 Efek Scrolling

Ada dua fungsi anggota di objek berkelas LiquidCrystal yang berguna untuk menggulirkan teks di layar pada arah kiri atau kanan. Kedua fungsi tersebut adalah scrollDisplayLeft() dan scrollDisplayRight().

1. scrollDisplayLeft() berguna untuk menggeser seluruh teks di layar ke kiri satu kolom;

2.scrollDisplayRight() berguna untuk menggeser seluruh teks di layar ke kanan satu kolom.

Sebagai contoh, terdapat teks seperti terlihat di Gambar 5.16.Efek pengenaan scrollDisplayLeft() satu kali hingga dua kali diperlihatkan di gambar tersebut. Adapun Gambar 5.17 memperlihatkan efek scrollDisplayLeft().

Gambar 5.16 Efek scrollDisplayLeft()

Gambar 5.17 Efek scrollDisplayRight()

Untuk melihat efek penggulungan teks ke kiri atau kanan, Anda bisa mencoba sketch berikut:

Sketch:scrolling

// ——————————————–

// Contoh untuk memperlihatkan penggeseran teks di layar

// baik ke kiri maupun ke kanan

// menggunakan scrollDisplayLeft() dan

// scrollDisplayRight()

// ——————————————–

#include <LiquidCrystal.h>

const int PIN_RS =12;

const int PIN_E=11;

const int PIN_DB_4= 7;

const int PIN_DB_5=6;

const int PIN_DB_6=5;

const int PIN_DB_7=4;

//Buat objek

LiquidCrystal lcd(PIN_RS, PIN_E, PIN_DB_4, PIN_DB_5, PIN_DB_6, PIN_DB_7);

void setup()

{

// Tentukan ukuran LCD

lcd.begin(16,2);

lcd.clear();

lcd.print(“Semanagat selalu !”);

lcd.setCursor(0, 1);

lcd.print(“Di setiap waktu”);

delay(2000);

}

void loop()

{

// Gerak ke kiri

for (int j = 1; j <= 16; j++)

{

lcd.scrollDisplayLeft();

delay(100);

}

// Gerak ke kanan

for (int j = 1; j <= 16; j++)

{

lcd.scrollDisplayRight();

delay(100);

}

delay(5000); // Untuk menunda tampilan

}

Pada sketch di atas, kode

for (int j = 1; j <= 16; j++)

{

lcd.scrollDisplayLeft();

delay(100);

}

digunakan untuk menggeser isi layar ke kiri hingga 16 kali, dengan setiap penggeseran satu kolom akan ditunda selama 100 milidetik.Sebaliknya,

for (int j = 1; j <= 16; j++)

{

lcd.scrollDisplayRight();

delay(100);

}

menggeser tulisan ke kanan kolom demi kolom (hingga 16 kolom) seperti yang diilustrasikan di Gambar 5.17.

Contoh Lin ditunjukan di sketch berikut :

Sketch:scrolling2

// ——————————————–

// Contoh untuk menampilkan dua macam informasi

// dengan memanfaatkan scrollDisplayLeft() dan

// scrollDisplayRight()

// ——————————————–

#include <LiquidCrystal.h>

const int PIN_RS =12;

const int PIN_E=11;

const int PIN_DB_4= 7;

const int PIN_DB_5=6;

const int PIN_DB_6=5;

const int PIN_DB_7=4;

//Buat objek

LiquidCrystal lcd(PIN_RS, PIN_E, PIN_DB_4, PIN_DB_5, PIN_DB_6, PIN_DB_7);

void setup()

{

// Tentukan ukuran LCD

lcd.begin(16,2);

lcd.clear();

}

void loop ()

{

// Informasi pertama

lcd.home();

lcd.clear();

lcd.print(“Balonku ada lima”);

lcd.setCursor(0, 1);

lcd.print(“Beraneka warna”);

delay(5000);

// Gerak ke kiri

for (int j = 1; j <= 16; j++)

{

lcd.scrollDisplayLeft();

delay(100);

}

// Informasi kedua

lcd.home();

lcd.clear();

lcd.print(“Meletus satu”);

lcd.setCursor(0, 1);

lcd.print(“Tinggal 4-1ah”);

delay(5000);

// Gerak ke kanan

for (int j = 1; j <= 16; j++)

{

lcd.scrollDisplayRight();

delay(100);

}

}

5.5 Membuat Tulisan Panjang yang Bergulir Terus-menerus

Contoh berikut memperlihatkan carai menampilkan teks yang panjang pada ruang LCD yang terbatas:

Sketch:scrolling2

// ——————————————–

// Contoh untuk menampilkan dua macam informasi

// dengan memanfaatkan scrollDisplayLeft() dan

// scrollDisplayRight()

// ——————————————–

#include <LiquidCrystal.h>

const int PIN_RS =12;

const int PIN_E=11;

const int PIN_DB_4= 7;

const int PIN_DB_5=6;

const int PIN_DB_6=5;

const int PIN_DB_7=4;

//Buat objek

LiquidCrystal lcd(PIN_RS, PIN_E, PIN_DB_4, PIN_DB_5, PIN_DB_6, PIN_DB_7);

Definisikan string

// String teks = “Selamat mempelajari cara memprogram LCD Display. “;

Int indeks = 0 ;

void setup()

{

// Tentukan ukuran LCD

lcd.begin(16,2);

//Tampilkan di baris pertama

lcd.clear();

lcd.print(“Info untuk Anda: “);

teks = teks +

“Cobalah semua contoh di bab ini untuk memahaminya. ” +

“Kemudian, Arda bisa mengembangkannya sendiri ” +

“sesuai dengan ide Anda. Sekali lagi, selamat belajar “+

“dan sukses selalu!”;

}

void loop ()

{

char at(17); //string dengan makaimal 16 karakter

st(16)=0; // Akhir atring

//Bentuk string

for (int j =0; = j <16; j++)

if (indeks + j < teks.length())

st[j]=teks [indeks +j];

else

st[j]=32; // Spasi

// Tampilkan di baris kedua

lcd.setCursor(0, 1);

lcd.print(st);

// Peroleh indeks berikutnya

indeks++;

if (indeks ==teks.length()- 1)

indeks=0;

delay(600);

}

Teks pada baris kedua terlihat seperti tergeser. Contoh tampilan di dua saat berbeda ditunjukkan di 5.18.

Gambar 5.18 Teks panjang yang bergeser

Pinsip untuk menampikan di baris kedua dapat Anda ikuti pada paparan berikut. Pertama-tama,varabel

st dideklarasikan seperti berikut:

char st[17];

Dalam hal ini, st ditujukan untuk menyimpan string dengan panjang 16 karakter (karena ditujukan untuk menangani LCD yang mempunyai 16 kolom).Oleh karenaitu,st[16] perlu diisidengan o,yang menyatakan akhir string.Selanjutnya,pengisian string dilaksanakan kode:

for (int j = 0; j < 16; j++)

if (indeks + j < teks.length())

st[j]= teks[indeks + j];

else

st[j]=32;// Spasi

Kode di atas hanya mengambil maksimal 16 karakter yang ada di teks. Jika karakter tersisa di string yang akan diambil kurang dari 16, karakter spasi akan ditambahkan.Isi variabel indeks yang bersifat global, dengan nilai awal berupa 0, akan dinaikkan satu untuk setiap iterasi di loop ().

Penyajian string di st ke LCD dilakukan melalui:

lcd.setCursor(0,1);

lcd.print(st);

Setelah isi st ditampilkan, nilai indeks dinaikkan sebesar 1, dengan tujuan untuk melakukan penggeseran tampilan di LCD.Jika nilai indeks mencapai akhir string, isi indeks akan dinolkan.Hal ini dilakukan melalui kode:

if (indeks ==teks.length()- 1)

indeks=0;

Berikut adalah contoh urutan penampilan string di CD:

Cobalah semua co

obalah semua con

balah semua cont

Penyajian seperti itu akan memberikan efek tulisan yang bergerak.

5.6 Memantau Nilai Sensor Cahaya

Ada kalanya diperlukan untuk menampilkan informasi dari suatu sensor ke LCD sehingga nilai setiap saat dapat dipantau dengan mudah. Untuk mempraktikkan hal ini, sebuah sensor bernama LDR (Light Dependent Resistor)digunakan untuk memantau cahaya. Bentuk LDR diperlihatkan di Gambar 5.19.

Gambar 5.19 LDR

Informasi tentang LDR

Light Dependent Resistor (LDR) adalah salah satu jenis resistor yang nilai hambatannya bersi berubah-ubah.Perubahan hambatan tergantung pada cahaya yang diterima.Ketika mendapatkan cahaya terang, hambatan mengecil. Sebaliknya, hambatan membesar ketika dijumpai keadaan gelB LDR biasa digunakan dengan susunan seperti berikut:

Vout mempunyai hubungan dengan Vcc seperti berikut:

Vout =

Berdasarkan rumus tersebut,Vout membesar kalau R1 mengecil dan sebaliknya akan mengecil kalau Rangkaian yang diperlukan diperlihatkan di Gambar 5.20. Selain satu LDR,satu resistor 220Ω diperlukan.

Contoh penyusunan rangkaian diperlihatkan di Gambar 5.21.

Gambar 5.20 Rangkaian yang melibatkan LDR dan LCD

Gambar 5.20 Rangkaian yang melibatkan LDR dan LCD

Gambar 5.21 Contoh penyusunan rangkaian LCD an LDR

Sketch berikut digunakan untuk menguji rangkalan di atas : Sketch:ldr

// ——————————————–

// Contoh untuk menampilkan nilai dari LDR

// di lcd display

// ——————————————–

#include <LiquidCrystal.h>

const int PIN_RS =12;

const int PIN_E=11;

const int PIN_DB_4= 7;

const int PIN_DB_5=6;

const int PIN_DB_6=5;

const int PIN_DB_7=4;

const int PIN_A0 = A0;

//Buat objek

LiquidCrystal lcd(PIN_RS, PIN_E, PIN_DB_4, PIN_DB_5, PIN_DB_6, PIN_DB_7);

void setup()

{

// Tentukan ukuran LCD

lcd.begin(16,2);

}

void loop ()

{

int nilai = analogRead(PIN_A0);

lcd.clear();

lcd.print(“Nilai: “);

lcd.print (nilai);

delay(1000);

}

Perhatikan bahwa setelah nilai dari sensor dibaca melalui

int nilai =analogRead(PIN_A0);

nilai tersebut dikirim ke LCD melalui

lcd.clear();

lcd.print(“Nilai: “);

lcd.print(nilai);

Tiga keadaan hasilnya diperlihatkan di Gambar 5.22 hingga 5.24. Pada Gambar 5.23, LDR ditutupi denga kertas tipis. Hasil simulasi pada Gambar 5.24 dapat diperoleh dengan menguji rangkaian pada ruang gelap.

Gambar 5.22 Hasil ketika LDR dalam keadaan normal (tidak ditutupi)

Gambar 5.23 Hasil ketika permukaan LDR ditutupi kertas tipis

Gambar 5.24 Hasil ketika LDR diselubungi plaster hitam

5·7 Menampilkan Kursor

LCD dapat digunakan untuk memerintahkan pemakai untuk melakukan sesuatu. Pada kondisi seperti ini, kursor di LCD dapat ditampilkan.Fungsi yang diperlukan adalah cursor () untuk menampilkan kursor dan blink() untuk membuat kursor berkedip. Untuk menghilangkan kedip adalah noBlink() perlu dipanggil. Adapun untuk menyembunyikan kembali kursor, panggillah noCursor().

Contoh penggunaan kedua fungsi tersebut dapat dilihat di sketch kedip. Untuk mempraktikkannya,Anda bisa Menggunakan rangkaian di Gambar 5.4 atau Gambar 5.20. : Sketch:kedip

// ——————————————–

// Contoh untuk menampilkan atau menyembunyikan

// kursor dan membuat berkedip atau tidak

// ——————————————–

#include <LiquidCrystal.h>

const int PIN_RS =12;

const int PIN_E=11;

const int PIN_DB_4= 7;

const int PIN_DB_5=6;

const int PIN_DB_6=5;

const int PIN_DB_7=4;

const int PIN_A0 = A0;

//Buat objek

LiquidCrystal lcd(PIN_RS, PIN_E, PIN_DB_4, PIN_DB_5, PIN_DB_6, PIN_DB_7);

void setup()

{

// Tentukan ukuran LCD

lcd.begin(16,2);

void loop ()

{

// Tanpa kursor

lcd.clear();

lcd.print(“Tanpa kursor “);

delay(2000);

// Kursor ditampilkan

lcd.setCursor(0, 0);

lcd.print(“Kursor terlihat”);

lcd.cursor();

delay(4000);

// Kursor berkedip

Icd.setCursor(0, 0);

lcd.print(“Kursor berkedip”);

lcd.blink();

delay(4000);

// Kursor tidak berkedip

Icd.setCursor(0, 0);

lcd.print(“Kursor berkedip”);

lcd.noblink();

delay(4000);

// Kursor tidak ada

Icd.setCursor(0, 0);

lcd.print(“Kursor tak ada”);

lcd.noCursor();

delay(4000);

}

5 .8 Menampilkan Simbol-simbol Khusus

LCD sebenarnya tidak hanya menyimpan karakter seperti A, z, +, ataupun 9. Namun, juga mendukung beberapa simbol seperti Ω dan π secara internal. Untuk mengeksplorasi karakter-karakter yang tersimpan di5 CD, fungsi anggota bernama write() bisa digunakan.Bentuk penggunaannya:

objekLCD.write(satuByteData);

eberapa contoh nilai argumen untuk write ():

  • ✓65→A
  • 66→B
  • 97→a
  • B11110111 atau 0xF7 atau .. → π
  • Beberapa contoh simbol khusus dan kodenya dalam bentuk biner ditunjukkan di Tabel 5.2.

Tabel 5.2 Sejumlah simbol khusus di LCD

Simbol Kode Biner
Derajat B11011111
Sigma B11110110
Omega B11110100
Panah kiri B01111111
Panah kanan B01111110

Contoh penggunaan write() dapat dilihat di sketch simbol. Untuk mempraktikkannya, Anda bisa menggunakan rangkaian di Gambar 5.4 atau Gambar 5.20. Sketch:simbol

// ——————————————–

// Contoh pembuatan symbol khusus

// ——————————————–

#include <LiquidCrystal.h>

const int PIN_RS =12;

const int PIN_E=11;

const int PIN_DB_4= 7;

const int PIN_DB_5=6;

const int PIN_DB_6=5;

const int PIN_DB_7=4;

const int PIN_A0 = A0;

const byte DERAJAT =B11011111;

const byte PANAH_KANAN=B01111110;

//Buat objek

LiquidCrystal lcd(PIN_RS, PIN_E, PIN_DB_4, PIN_DB_5, PIN_DB_6, PIN_DB_7);

void setup()

{

// Tentukan ukuran LCD

lcd.begin(16,2);

// Tampilkan beberapa karakter melalui write

lcd.clear();

lcd.print(“Suhu “);

lcd.write(PANAH_KANAN);

lcd.write(32);

lcd.print(23.4);

lcd.write(DERAJAT);

// Tampilkan karakter bernilai 200+2015

IcdrsetCursor(0,1);

for (int nilat= 0; nilai<16;nilai++)

icd.write(200+nilai);

}

void loop ()

{

}

Pada sketch di atas,

const byte DERAJAT=B11011111;

digunakan untuk menyatakan kode biner untuk simbol derajat. Nilai yang terdapat di derajat sebenarnya adalah nilai ASCII. Selanjutnya,simbol tersebut ditampilkan melalui:

lcd.write(DERAJAT);

Untuk mengeksplorasi simbol-simbol yang nilai ASCII-nya berada di antara 200 dan 215, perintah berikut bisa digunakan:

for (int nilai = 0; nilai <16;nilai++)

lcd.write(200 + nilai);

Berikut adalah contoh hasil sketch simbol:

Gambar 5.26 Hasil penyajian simbol-simbol khusus

5.9 Penciptaan Sendiri Simbol-simbol Khusus

Setiap karakter di CD tersusun atas piksel-piksel berukuran 8×5, Artinya,setiap karakter dibuat dengan 8baris dan 5kolom.Dengan mengetahui sifat ini, dimungkinkan untuk membuat sendiri simbol-simbol khusa Sebagai contoh,perhatikan Gambar 5.27.Angka yang berada di kanan menyatakan kode biner untuk set pola simbol untuk baris masing-masing. Namun, perlu diketahui bahwa hanya 8 karakter yang bisa dibuat dari kode 0 sampai 7.

Gambar 5.27 Contoh pembentukan huruf A

Contoh lima simbol yang berupa huruf A, B, D, U, dan L dapat dilihat di sketch berikut: Sketch:font

// ——————————————–

// Contoh pembuatan simbol khusus

// ——————————————–

#include <LiquidCrystal.h>

const int PIN_RS =12;

const int PIN_E=11;

const int PIN_DB_4= 7;

const int PIN_DB_5=6;

const int PIN_DB_6=5;

const int PIN_DB_7=4;

const int PIN_A0 = A0;

byte huruf_a[]=

{

B01110, B01010,B01010,B01010,B111111, B11001, B11001, B11001 };

byte huruf_b[]=

{

B11111 B11001,B11001,B11111

B01110,B01010, B01010, B01010,

byte huruf_d[]

{B01110,B01011,B01001,B01001,B11001,B11001,B11001,B11111 !{

byte huruf_u[]=

{

B01001,B01001,B01001,B01001,B11001,B11001,B11001,B11110

byte huruf_1[] =

{

B01000, B01000,B01000,B01000,B11000,B11000,B11000,B11111

//Buat objek

LiquidCrystal lcd(PIN_RS, PIN_E, PIN_DB_4, PIN_DB_5, PIN_DB_6, PIN_DB_7);

void setup()

{

// Tentukan ukuran LCD

lcd.begin(16,2);

// Buat karakter

lcd.createChar(0, huruf_a);

lcd.createChar(1, huruf_b);

lcd.createChar(2, huruf_d);

Icd.createChar(3, huruf_u);

lcd.createChar(4, huruf_1);

// Tampilkan beberapa karakter melalui write

lcd.clear();

lcd.write (byte(0));

lcd.write(byte(1));

lcd.write(byte(2));

lcd.write (byte(3));

lcd.write(byte(4));

}

void loop ()

{

}

Definisi kelima simbol dapat dilihat di huruf_a, huruf_b, huruf d, huruf u, dan huruf 1.

Penciptaan simbol untuk kode 0 dilakukan melalui:

lcd.createChar(0, huruf_a);

Argumen pertamalah yang menyatakan kode yang dapat berupa 0 hingga 7. Adapun kedua menyatakan array bertipe byte yang berisi data simbol.

Hasil sketch font diperlihatkan di Gambar 5.28.

Gambar 5.28 Contoh hasil pembuatan simbol

5.10 Penggunaan LCD dengan Dua Kabel Data

Gambar 5.29 menunjulkan contoh LCD yang menggunakan teknologi Inter-Integrated Circuit(12C). menggunakan LCD jenis ini,cukup dua pin yang digunakan untuk mengirimkan data, Dua pin lagi yang dihubungkan ke Arduino adalah untuk memasok tegangan. Jadi, hanya empat pin yang perlu dihububungkan ke Arduino, dengan rincian seperti berikut:

  • GND:dihubungkan ke ground;
  • VCC:dihubungkan ke sumber tegangan 5V;
  • SDA:merupakan 12C data dan dihubungkan ke pin analog A4 pada Arduino;
  • SCL:merupakan 12C clock dan dihubungkan ke pin analog A5 pada Arduino;

Gambar 5.30 memperlihatkan rangkaian yang diperlukan untuk menguji LCD berteknologi 12C.

Gambar 5.29 LCD dengan 2 kabel data(Modul T2C/TAT)CD16021

Gambar 5.30 Rangkaian yang menghubungkan Arduino dan LCD1602

Instalasi Pustaka LiquidCrystal_I2C

uoakmemudahkan dalam menggunakan CD berbass 2,diperlukan untuk menginstal pustaka benama LiquidCrystal_I2C.Pustaka ini dapat diunduh di situs:

ssthub.com/fdebrabander/Arduino-LiquidCrystal-|2C-library/blob/master/. Untuk memudahkan Anda,pustaka tersebut disediakan di CD.Nama filenya adalah:

Arduino-LiquidCrystal-12C-library-master.zip

Instalasipustaka dilakukan dengan cara seperti berikut:

  1. Dekompresilah file Arduino-LiquidCrystal-12C-library-master.zip. Akan terbentuk folder bernama Arduino-LiquidCrystal-12C-library-master.
  2. Sederhanakan nama folder tersebut menjadi LiquidCrystall2C.
  3. Pindahkan subfolder LyquidCrystal_12c ke C:\Program Files (x86)\Arduino\libraries (dengan asumsi, program Arduino IDE terinstal di C:\Program Files(x86)\Arduino).
  4. Tutuplah Arduino IDE jika dalam keadaan sedang dibuka.
  5. Panggil kembali Arduino IDE supaya pustaka yang baru saja Anda tambahkan dikenali.

Sketch:lcdi2c

// ——————————————–

// Contoh pengendalian LCD berbasis I2C

// ——————————————–

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); //Alamat LCD adalah 0x27

// Mengandung 16 kolom dan 2 //baris

void setup() {

lcd.begin();

//Tampilan pesan ke LCD

lcd.print(“Tes..tes..123!”);

lcd.setCursor(0,1);

lcd.print(“OK tampaknya”);

}

void loop ()

{

}

Sketch di atas melibatkan pustaka Arduino bernama Wire,Pustaka ini digunakan untuk menangan komunikasi 12C,yang memungkinkan pertukaran informasi antar-iC.Itulah sebabnya,terdapat perintah:

#include <Wire.h>

Penyertaan pernyataan tersebut diperlukan karena kode di pustaka LiquidCrystal_I2C menggunakan pustaka Wire.

Kode

#include <LiquidCrystal_I2C.h>

dimaksudkan untuk menyertakan header file pustaka LiquidCrystal_I2C. Hal ini diperlukan kalau Anda bermaksud menggunakan kelas yang disediakan di pustaka tersebut untuk menangani LCD.

Pernyataan

LiquidCrystal_I2C lcd(0x27,16,2);

ditujukan untuk membuat objek berkelas LiquidCrystal_I2C, dengan nama objek berupa lcd.Kelas inilah yang digunakan untuk mengontrol LCD. Ketiga argumen yang disertakan adalah:

  • argumen pertama, yakni 0x27, menyatakan alamat untuk peranti LCD. Setiap peranti berbasis C pasti mempunyai alamat unik;
  • argumen kedua menyatakan jumlah kolom dalam LCD;
  • argumen ketiga menyatakan jumlah baris dalam LCD.

Di dalam setup(),LCD perlu diinisialisasi dengan memanggil:

namA0bjekLCD.begin();

Pada contoh,hal itu dilakukan oleh:

lcd.begin():

Pernyataan-pernyataan berikutnya,yaitu

lcd.print(“Tes..tes.,1231”);

lcd.setCursor(0,1):

lcd.print(“OK tampaknya!”);

secara prinsip sama seperti pada pustaka LiquidCrystal. Hasil ditunjukkan di Gambar 5.31.

Gambar 5.31 Hasil di LCD

5.11 Penggunaan LCD Grafis

Gambar 5.32 memperlihatkan contoh LCD grafis dengan kode QC12864B. LCD ini memungkinkan pembuatan gambar seperti garis ataupun lingkaran.Resolusinya 128×64 d0t.

Tabel 5.3 Pin-pin di LCD

No PIN Nama PIN Keterangan
1 VSS Dihubungkan ke +5V
2 VDD Dihubungkan ke ground
3 VO Pengatur kontras. Potensiometer 10KΩ bisa digunakan untuk

mengatur tingkat kontras

4 RS atau D/I Register Select:

  • RS=HIGH untuk mengirim data
  • RS=LOW untuk mengirim instruksi
5 R/W Read/Write control bus

  • R/W=HIGH untuk membaca data di LCD
6 E Data Enable

  • E=HIGH supaya LCD dapat diakses
7 DBO Data
8 DB1 Data
9 DB2 Data
10 DB3 Data
11 DB4 Data
12 DB5 Data
13 DB6 Data
14 DB7 Data
15 PSB
16 NC Not connected
17 RST Connect to reset
18 Vout Contrast out
19 A Anode,dihubungkan ke catu daya +5V.Perlu resistor se
20 K Katode,dihubungkan ke ground

Instalasi Pustaka LCD Grafis

Salah satu pustaka yang dapat digunakan untuk mengendalikan perangkat ini adalah LCD12864RSPI,yang ditulis oleh Yi Wei. Pustaka ini dapat diunduh di https://bitbucket.org/jasonweiyi/robots/srcl 5a1943c4eee8/arduino/libraries/LCD12864R/SPI/. Untuk memudahkan Anda, pustaka ini disertakan di CD.

Instalasi pustaka dilakukan dengan cara seperti berikut:

  1. Dekompresilah file jasonweiyi-robots-9ea4a75cbf67.zip. Akan terbentuk folder bernama jasonweiyi-robots-9ea4a75cbf67.
  2. Di bawah folder tersebut terdapat subfolder arduino\libraries\LCD12864R. Nah, di dalam subfolder tersebut terdapat subfolder bernama SPI.
  3. Pindahkan subfolder SPI ke C:\Program Files (x86)\Arduino\libraries (dengan asumsi,program Arduino IDE terinstal di C:\Program Files (x86)\Arduino).
  4. Tutuplah Arduino IDE jika dalam keadaan sedang dibuka.
  5. Panggil kembali Arduino IDE supaya pustaka yang baru saja Anda tambahkan dikenali.

Pelepasan Resistor R9

Ada kemungkinan Anda perlu melepas resistor R9 di modul QC12864B.Hal ini perlu dilakukan agar LCD grafis dapat diprogram secara serial atau paralel.Sebagai contoh,pada papan LCD yang digunakan pada percobaan ini R9,terpasang secara bawaan,yang menghubungkan pin PSB ke sumber tegangan positif. Akibatnya,LCD grafik hanya dapat digunakan untuk pengiriman data secara paralel saja. Namun, ternyata ada pula LCD grafiki QC12864B yang tidak mengandung R9. Gambar 5.33 memperlihatkan keadaan setelah R9 dilepas dengan menggunakan solder.

Gambar 5.33 Resistor R9 perlu dilepas agar pengiriman data ke LCD grafik dapat dilakukan secara serial

Pengiriman data secara serial ke LCD grafik berdampak pada pengurangan jumlah pin di Arduino yang perlu dihubungkan ke LCD. Dengan demikian, penghematan pin ini membuat pin-pin lain di Arduino dapat digunakan untuk keperluan lain.

Pengujian LCD Grafis dengan Menggunakan Pengiriman Data Secara Serial

Rangkaian yang perlu disusun untuk menghubungkan LCD grafik dan Arduino dengan menggunakan mode pengiman data secara serial seperti terlihat di Tabel 5.2.Contoh penyusunannya diperlihatkan di Gambar 34 perlu diketahui, agar peseriman data secara serial ke LCD grafik dapat dilaksanakan, pin PB harus berniai 0.Itulah sebabnya,pin tersebut perlu dihubungkan ke ground.

Tabel 5.4 Hubungan LCD grafik dan Arduino untuk pengiriman data secara serial

LCD Arduino
Pin 1 (VSS) GND
Pin 2 (VDD) +5V
Pin 4 (RS atau D/I) Pin 8
Pin 5 (R/W) Pin 9
Pin 6(E) Pin 3
Pin 15(PSB atau CS1) GND

Gambar 5.34 Contoh penyusunan rangkaian yang menghubungkan LCD grafik dan Arduino

Sketch berikut dapat dipakai untuk menguji rangkaian di atas :

Sketch:lcdspi

// ——————————————–

// Contoh pengujian LCD grafik QC12864B

// menggunakan pustaka LCD12864RSPI

//

// Resistor R9 di LCD grafik harus dilepas!

// ——————————————–

// Rangkaian yang diperlukan

// LCD <——> Arduino

PIN 1(VSS) GND

PIN 2 (VDD) 5V //

PIN 4 (RS)

Pin 8 PIN 5 (R/W)

Pin 9 1PIN 6 (E)

Pin 3 PIN 15 (PSB) GND

include “LCD12864RSPI.h”

int pencacah=1;

void setup()

{

LCDA.initialise();

delay(100);

}

void loop()

{

LCDA.clear();

delay(10);

LCDA.print(0,0);

“Nilai pencacah ditampilkan untuk yang ke-%-4d kali.”,

pencacah);

delay(1000);

pencacah++;// Naikkan pencacah

}

Penjelasan untuk sketch di atas seperti berikut:

Kode

#include “LCD12864RSPI.h”

digunakan untuk menyertakan header file pustaka LCD1286R4SPI.

Kode berikut mendeklarasikan variabel pencacah dan diinisialisasi dengan 1:

int pencacah=1;

Variabel tersebut dipakai untuk menampilkan angka yang menyatakan cacah teks di LCD telah ditampilkan.

Di dalam setup(), kode berikut digunakan untuk melakukan tindakan inisialisasi terhadap LCD:

LCDA.initialise();

Pemanggilan initialize() harus dilakukan di awal. Dalam hal ini, objek LCDA disediakan oleh pustaka.Jadi,tidak perlu untuk mendeklarasikannya di dalam sketch yang Anda tulis.

Setelah pemanggilan initialize(),diperlukan untuk menunggu LCD menyelesaikan tindakan. Hal ini dilakukan melalui delay(100);.e

Kode

LCDA.clear();

berguna untuk menghapus layar. Waktu sekitar 10 milidetik diperlukan untuk menunggu sampai LCD selesai menghapus layar.

Pernyataan

LCDA.printf(0, 0,

“Nilai pencacah ditampilkan untuk yang ke-8-4d kali.”,

pencacah);

ditujukan untuk menampilkan tulisan di LCD. Argumen pertama pada printf() menentukan letak kolom (kolom dimulai dari 0) dan argumen kedua menyatakan letak baris (dimulai dari 0) tempat untuk menampilkan informasi. Informasi yang ditampilkan di LCD diambil dari string yang merupakan argumen ketiga. Di dalam string tersebut boleh terdapat simbol khusus seperti %d,yang merupakan tanda pemformat untuk bilangan bulat. Bilangan yang berhubungan dengan %d diatur muai argumen keempat.Pada contoh di depan, nilai pencacah akan digunakan untuk disubstitusikan ke %d.

  • Nilai pencacah dinaikkan sebesar satu melalui:

pencacah++;

Gambar 5.35 memperlihatkan hasil setelah sketch di atas diunggah ke Arduino.

Gambar 5.35 Hasil pengujian sketch lcdspi

5.12 LCD Grafik dan Pustaka U8glib

Selain menggunakan pustaka LCD12864RSPI, Anda bisa memakai pustaka bernama U8glib untuk mengontrol LCD grafik. Hal yang menarik, pustaka ini dapat digunakan pada pelbagai tipe LCD grafik. Selain itu, pengiriman data dapat dilakukan dengan menggunakan mode serial maupun paralel.

Pemasangan Pustaka U8glib

Pustaka U8glib dapat diunduh di https://code.google.com/p/u8glib.Namun,untuk kemudahan Anda,file u8glib_arduino_v1.16.zip disediakan di CD yang disertakan bersama buku ini.

Instalasi pustaka dilakukan dengan cara seperti berikut:

1.Dekompresilah file u8glib_arduino_v1.16.zip. Akan terbentuk folder bernama u8glib_arduino_v1.16.

2.Sederhanakan nama folder tersebut menjadi u8glib.

3.Pindahkan subfolder u8glib ke c:\Program Files (x86)\Arduino\libraries (dengan asumsi,program Arduino IDE terinstal di c:\Program Files (x86)\Arduino).

4.Tutuplah Arduino IDE jika dalam keadaan sedang dibuka.

5.Panggil kembali Arduino IDE supaya pustaka yang baru saja Anda tambahkan dikenali.

Pengujian pada Modul QC12864B Secara Serial

Untuk kepentingan pengujian terhadap LCD,susunlah rangkaian seperti terlihat di Gambar 5.36.Dalam hal ini,hubungan antara LCD dan Arduino seperti berikut:

  • pin E LCD dihubungkan ke pin 13 Arduino;
  • pin R/W LCD dihubungkan ke pin 11 Arduino;
  • pin RS LCD dihubungkan ke pin 10 Arduino;
  • pin VDD LCD dihubungkan ke pin 5V Arduino;
  • pin VSS LCD dihubungkan ke pin GND Arduino.

Setelah itu,Anda bisa menggunakan sketch lcdg untuk mengujinya.

Gambar 5.36 Contoh penyusunan rangkaian untuk menguji LCD grafik dan Arduino secara serial :

Sketch:lcdg

// ——————————————–

// Contoh pertama untuk menampilkan tulisan

// menggunakan pustaka U8glib

#include “U8glib.h”

U8GLIB_ST7920_128X64_4X u8g(10);

void setup()

{

pinMode(13, OUTPUT) ;

digitalWrite(13, HIGH);

}

void loop()

{

u8g.firstPage();

d0

{

buatGambar();

} while (u8g.nextPage());

delay(1000);

}

void buatGambar()

{

u8g.setFont(u8g_font_unifont);

u8g.drawStr(0,10,”Tes..tes..123!”);

u8g.drawStr(0, 22, “Berhasil, ya?”);

u8g.drawStr(0, 50, “Syukurlah!”);

}

Gambar 5.37 Hasil sketch lcdg untuk menguji pustaka u8glib

enggunaan pustaka u8glib dimulai dengan penyertaan pernyataan berikut:

#include “U8glib.h”

Selanjutnya, objek berkelas U8GLIB_ST7920_128X64_4X perlu dibentuk terlebih dahulu. Pernyataannya berupa:

U8GLIB_ST7920_128X64_4X u8g(10);

Di dalam setup(),hal berikut perlu dilakukan:

pinMode(13, OUTPUT);

digitalWrite(13, HIGH);

Tujuannya adalah untuk membuat HIGH pada pin Enable milik LCD.

Bentuk khas kode di loop() yang perlu ditulis seperti berikut:

u8g.firstpage();

d0

{

buatGambar();

}while (u8g.nextPage());

Dalam hal ini,kegunaan masing-masing seperti berikut:

  • Pernyataan u8g.firstPage(); digunakan untuk menandai awal pembuatan gambar.
  • Pemanggilan u8g.nextPage(); digunakan untuk menandai akhir kalang pembuatan gambar.Nilai balik berupa O sekiranya kalang pembuatan gambar telah berakhir atau 1 jika penggambaran ulang perlu dilakukan.
  • Penyataan d0..while memungkinkan penggambaran ulang terhadap instruksi-instruksi di dala fungsi buatGambar().
  • Pembuatan gambar dipusatkan di satu fungsi saja. Pada contoh, fungsi yang dimaksud adala buatGambar().

Kode yang sesungguhnya untuk melakukan pembuatan gambar dilakukan di buatGambar().Pada sket di depan,kodenya adalah:

void buatGambar()

{

u8g.setFont(u8g_font_unifont);

u8g.drawStr(0, 10, “Tes..tes..123!”);

u8g.drawStr(0, 22, “Berhasil, ya?”);

u8g.drawStr(0, 50, “Syukurlah!”);

}

Pernyataan

u8g.setFont(u8g_font_unifont);

dipakai untuk mengatur font. Adapun fungsi anggota drawstr() digunakan untuk menampilkan sti Dalam hal ini,

  • argumen pertama menyatakan letak kolom;
  • argumen kedua menyatakan letak baris;
  • argumen ketiga menyatakan string yang akan ditampilkan.Jenis dan Ukuran Font

Ukuran dan jenis font ditentukan oleh fungsi anggota bernama setFont ().Bentuk pemakaiannya:

objekU8glib.setFont (nama_font);

Contoh nama font ditunjukkan di Tabel 5.5. Adapun detail nama font dapat diperoleh di:

https://code.google.com/p/u8glib/wiki/fonstsize

Tabel 5.5 Contoh nama font untuk setFont()

Nama Font Keterangan
U8g_font_m2icon_5 Font berukuran 6 x9 piksel. Berisi ikon
U8g_font_u8glib_4 Font dengan tinggi 4 karakter
U8g_font_gdb17r Gentium Bold lebar 42 tinggi 39
U8g_font_fub49n Free Universal-Bold
U8g_font_osb18 Old Standard-Bold

Contoh berikut menunjukkan pengaturan font untuk tiga jenis font:

Sketch:lcdfont

// ——————————————–

// Contoh pengaturan font

#include “U8glib.h”

U8GLIB_ST7920_128X64_4X u8g(10);

void setup()

{

pinMode(13, OUTPUT);

digitalWrite(13, HIGH);

}

void loop()

{

u8g.firstPage();

d0 { buatGambar();

} while (u8g.nextPage());

}

delay(1000);

}

void buatGambar()

{

u8g.setFont(u8g_font_unifont);

u8g.drawStr(0,10, “Tes..tes..123!”);

u8g.setFont(u8g_font_u8glib_4);

u8g.drawStr(0, 22, “Berhasil, ya?”);

u8g.setFont(u8g_font_gdb17r);

u8g.drawstr(0, 50, “Syukurlah!”);}

}

Nama Fungsi Anggota Keterangan
drawRBox(x,y,w,h,r) Untuk membuat kotak yang diarsir dengan

pojoknya melengkung.Pojok kiri atasnya adalah (x,

y) dengan lebar w dan tinggi h serta jari-jari

lengkungan tepi adalah r

drawCircle(x,y,r) Untuk membuat lingkaran dengan pusat lingkaran

adalah (x,y) dan jari-jari sebesar r

drawDisc(x,y,r) Untuk membuat lingkaran dengan pusat lingkaran

adalah (x,y) dan jari-jari sebesar r dan bagian

tengah akan diwarnai

drawEllipse(x,y,rx,ry) Untuk membuat elips dengan pusat lingkaran

adalah (x,y) dan jari-jari mendatar adalah sebesar

rx dan jari-jari tegak adalah ry

drawFilledEllipse(x, y,rx,ry) Serupa dengan DrawEllipse() dengan bagian

dalam akan diwarnai

drawTriangle(xo,yo,x1,y1,x2,y2) Untuk membuat segitiga dengan titik pojoknya

berupa(xo,yo),(x1,y1),(x2,y2).

Sketch:lcdbentuk

// ——————————————–

// Contoh berbagai fungsi membentuk gambar

#include “U8glib.h”

U8GLIB_ST7920_128X64_4X u8g(10);

void setup()

{

pinMode(13, OUTPUT);

digitalWrite(13, HIGH);

}

void loop()

{

u8g.firstPage();

d0 { buatGambar();

} while (u8g.nextPage());

}

delay(1000);

}

void buatGambar()

{

// Buat garis

u8g.drawHLine(0,0, 30);

u8g.drawVLine (0, 0, 30);

u8g.drawLine(0,0, 30,30):

// Buat Segitiga

u8g.drawTriangle(0,35,30,50,25,63);

// Buat lingkaran dan elips

u8g.drawE11ipse(84,32,30,10):

u8g.drawCircle(84,32,18):

u8g.drawDisc(84,32,10);

// Buat kotak

u8g.drawBox(40,55,80,8);

delay(1000):

}

Hasilnya seperti berikut:

Gambar 5.40 Hasil sketch Icdbentuk

Penyajian Bitmap

Anda bisa menampilkan bitmap di LCD dengan memanfaatkan drawBitmap ().Bentuk penggunaannya seperti berikut:

objectu8glib.drawBitmap(x, y, n,h,bitmap)

Dalam hal ini, bitmap akan ditempatkan dengan ujung kiri atas di (x,y). Adapun n menyatakan jumlah byte di bitmap pada arah horizontal dan h menyatakan tinggi bitmap.

 

Tinggalkan Komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.