Mengunakan Library MD Parola
Arduino Dot Matrix Max7219 Tutorial Dasar – Arduino adalah salah satu platform pemrograman yang sangat populer untuk mengembangkan proyek-proyek elektronik yang melibatkan mikrokontroler. Salah satu fitur yang paling menarik dari Arduino adalah mudahnya dalam mengontrol berbagai jenis perangkat, termasuk Display Dot Matrix.
Display dot matrix biasanya terdiri dari sejumlah kecil LED yang diatur dalam format grid, dan dapat digunakan untuk menampilkan berbagai jenis pesan dan gambar. Untuk mengendalikan display dot matrix, kita memerlukan driver dengan tipe MAX7219. Pada artikel ini, kita akan membahas dasar-dasar penggunaan MAX7219 untuk mengendalikan display dot matrix dengan menggunakan Arduino.
Cara Kerja MAX7219
Sebelum kita memulai, kita harus memahami bagaimana MAX7219 bekerja. MAX7219 adalah driver display LED 8×8 dot matrix yang mampu mengendalikan hingga 64 LED secara independen. Chip ini dapat mengontrol banyak display dengan hanya menggunakan tiga pin: DIN, CS, dan CLK dengan fungsi:
- Sinyal DIN adalah input data serial yang mengirimkan data ke MAX7219.
- Sinyal CLK digunakan untuk mengatur kecepatan transfer data.
- Sinyal CS digunakan untuk memilih perangkat yang akan diberikan data.
Pada MAX7219, sebuah display terdiri dari 8 baris dan 8 kolom LED. Setiap baris dihubungkan ke output dari MAX7219, sedangkan setiap kolom terhubung ke input dari MAX7219. Dengan cara ini, MAX7219 dapat mengontrol masing-masing LED dengan memberikan sinyal yang sesuai untuk masing-masing baris dan kolom. Jika anda ingin melihat lebih detail tentang IC ini, silahkan menuju Max7219 Datasheet.
Untuk memudahkan dalam menggunakan dot matrix berbasis MAX7219, ada beberapa tipe modul yang tersedia dipasaran yaitu Generic, FC16, Parola Custom dan IC Station. Untuk perbedaannya dapat anda lihat pada gambar berikut ini:
Namun, pada artikel ini kita akan menggunakan tipe modul FC16 Dot Matrix 4 x1 (32×8).
Rangkaian Dasar
Sebelum kita memulai masuk ke dalam tahapan kode program, silahkan anda hubungkan dot matrix ke Arduino board seperti yang ditunjukkan pada gambar berikut ini:
Untuk memudahkan, berikut adalah tabel koneksi untuk rangkaian dasar dot matrix diatas:
ARDUINO UNO DOT MATRIX 4×1 5V VCC GND GND 13 CLK 11 DIN 10 CS
Library
Untuk memudahkan kita dalam mengoperasikan led matrix ini, kita memerlukan dua library yaitu MD_Parola dan MD_MAX72XX. Silahkan download terlebih dahulu kedua library tersebut dengan klik tombol download berikut:
Jika library telah selesai di download, silahkan masukkan ke Arduino IDE anda. Jika anda belum tau cara memasukkan library tersebut ke aplikasi Arduino IDE, anda dapat membaca artikel Cara Menambahkan Library Arduino IDE.
Setelah semuanya selesai terhubung dengan baik, tutorial pertama adalah bagaimana cara menampilkan teks di dot matrix.
Kode Program Tampilkan Teks
1. Menggunakan function print()
Mari kita tampilkan tulisan “Hello!” dan kode program dasarnya adalah sebagai berikut:
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
void setup(void)
{
P.begin();
}
void loop(void)
{
P.print("Hello!");
}
Hasilnya adalah seperti ini:
Jika kita ingin menampilkan tulisan yang bergantian, maka kode program dapat dibuat seperti ini:
P.print("Hello");
delay(1000);
P.print(1234, DEC);
delay(1000);
P.print(1234, HEX);
delay(1000);
P.print(12.5); // float not supported by Arduino Print class
delay(1000);
P.print(9876l);
delay(1000);
P.println("end"); // only get the /r/n characters - avoid using println
delay(1000);
P.write('A');
delay(1000);
P.write('B');
delay(1000);
P.write('C');
delay(1000);
Hasilnya adalah sebagai berikut:
Penjelasan fungsi print():
Function print()
sama dengan write()
. Pada dasarnya, function ini berfungsi untuk menulis satu karakter ke dot matrix. Function ini baik digunakan untuk menampilkan teks yang singkat.
Ada 3 format yang dapat digunakan yaitu:
- write (uint8_t c)
- write (const char *str)
- write (const uint8_t *buffer, size_t size)
Jika anda ingin menampilkan teks yang panjang seperti untuk tulisan berjalan misalnya, maka fungsi print()
atau write()
tidak cocok digunakan. Untuk itu, dapat menggunakan fungsi displayText()
atau displayZoneText()
yang akan kita bahas berikutnya.
2. Menggunakan function displayText()
Function displayText() dapat menampilkan teks pada dot matrix, juga sekaligus memiliki fitur perataan text (rata tengah, rata kiri, rata kanan) dan animasi. Adapun format penulisan function displayText() ini adalah sebagai berikut:
displayText(text, align, speed, pause, effectIn, effectOut) ;
Keterangan:
- text berisi teks yang berupa char * (char array)
- align untuk posisi perataan text, ada tiga yaitu:
- PA_LEFT
- PA_CENTER
- PA_RIGHT
- speed untuk kecepatan animasi atau pergantian frame
- pause untuk waktu jeda antara mulai animasi dan akhir animasi
- effectIn untuk efek animasi masuk/mulai dan effectOut untuk efek animasi keluar/berakhir. Untuk mode animasi ini ada beberapa pilihan yaitu:
- PA_NO_EFFECT
- PA_PRINT
- PA_SCROLL_UP
- PA_SCROLL_DOWN
- PA_SCROLL_LEFT
- PA_SCROLL_RIGHT
- PA_SPRITE
- PA_SLICE
- PA_MESH
- PA_FADE
- PA_DISSOLVE
- PA_BLINDS
- PA_RANDOM
- PA_WIPE
- PA_WIPE_CURSOR
- PA_SCAN_HORIZ
- PA_SCAN_HORIZX
- PA_SCAN_VERT
- PA_SCAN_VERTX
- PA_OPENING
- PA_OPENING_CURSOR
- PA_CLOSING
- PA_CLOSING_CURSOR
- PA_SCROLL_UP_LEFT
- PA_SCROLL_UP_RIGHT
- PA_SCROLL_DOWN_LEFT
- PA_SCROLL_DOWN_RIGHT
- PA_GROW_UP
- PA_GROW_DOWN
a. Tampilkan Text Dengan Align
Mari kita praktekkan menampilkan teks di dot matrix dengan Align atau tulisan rata tengah, rata kiri dan rata kanan. Untuk kode programnya adalah sebagai berikut:
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
int display = 0;
void setup(void)
{
P.begin();
}
void loop(void)
{
if (P.displayAnimate()) {
switch (display) {
case 0:
P.displayText("Center", PA_CENTER, 25, 1000, PA_NO_EFFECT, PA_NO_EFFECT);
display++;
break;
case 1:
P.displayText("Left", PA_LEFT, 25, 1000, PA_NO_EFFECT, PA_NO_EFFECT);
display++;
break;
case 2:
P.displayText("Right", PA_RIGHT, 25, 1000, PA_NO_EFFECT, PA_NO_EFFECT);
display = 0;
break;
}
}
}
Hasilnya adalah sebagai berikut:
b. Tampilkan Text Dengan Animasi
Untuk dapat menampilkan teks dengan animasi, saya telah menyediakan daftar baris program berikut beserta gambarnya yang dapat menjadi panduan anda dalam memilih jenis animasi yang anda inginkan.
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
int display = 0;
// Sprite Definitions
const uint8_t F_PMAN1 = 6;
const uint8_t W_PMAN1 = 8;
const uint8_t PROGMEM pacman1[F_PMAN1 * W_PMAN1] = // gobbling pacman animation
{
0x00, 0x81, 0xc3, 0xe7, 0xff, 0x7e, 0x7e, 0x3c,
0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c,
0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c,
0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c,
0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c,
0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c,
};
void setup(void)
{
P.begin();
}
void loop(void)
{
if (P.displayAnimate()) {
switch (display) {
case 0:
P.displayText("No_Eff", PA_CENTER, 30, 1000, PA_NO_EFFECT, PA_NO_EFFECT);
display++;
break;
case 1:
P.displayText("Print", PA_CENTER, 30, 1000, PA_PRINT, PA_NO_EFFECT);
display++;
break;
case 2:
P.displayText("Scr_Up", PA_CENTER, 30, 1000, PA_SCROLL_UP, PA_SCROLL_UP);
display++;
break;
case 3:
P.displayText("Scr_Do", PA_CENTER, 30, 1000, PA_SCROLL_DOWN, PA_SCROLL_DOWN);
display++;
break;
case 4:
P.displayText("Scr_Left", PA_CENTER, 30, 1000, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
display++;
break;
case 5:
P.displayText("Scr_Right", PA_CENTER, 30, 1000, PA_SCROLL_RIGHT, PA_SCROLL_RIGHT);
display++;
break;
case 6:
P.displayText("Sprite", PA_CENTER, 30, 1000, PA_SPRITE, PA_SPRITE);
P.setSpriteData(pacman1, W_PMAN1, F_PMAN1, pacman1, W_PMAN1, F_PMAN1);
display++;
break;
case 7:
P.displayText("Slice", PA_CENTER, 5, 1000, PA_SLICE, PA_SLICE);
display++;
break;
case 8:
P.displayText("Mesh", PA_CENTER, 35, 1000, PA_MESH, PA_MESH);
display++;
break;
case 9:
P.displayText("Fade", PA_CENTER, 30, 1000, PA_FADE, PA_FADE);
display++;
break;
case 10:
P.displayText("Dissolve", PA_CENTER, 30, 1000, PA_DISSOLVE, PA_DISSOLVE);
display++;
break;
case 11:
P.displayText("Dissolve", PA_CENTER, 30, 1000, PA_DISSOLVE, PA_DISSOLVE);
display++;
break;
case 12:
P.displayText("Random", PA_CENTER, 25, 1000, PA_RANDOM, PA_RANDOM);
display++;
break;
case 13:
P.displayText("Wipe", PA_CENTER, 25, 1000, PA_WIPE, PA_WIPE);
display++;
break;
case 14:
P.displayText("Wipe_C", PA_CENTER, 25, 1000, PA_WIPE_CURSOR, PA_WIPE_CURSOR);
display++;
break;
case 15:
P.displayText("ScanH", PA_CENTER, 30, 1000, PA_SCAN_HORIZ, PA_SCAN_HORIZ);
display++;
break;
case 16:
P.displayText("ScanHX", PA_CENTER, 30, 1000, PA_SCAN_HORIZX, PA_SCAN_HORIZX);
display++;
break;
case 17:
P.displayText("ScanV", PA_CENTER, 40, 1000, PA_SCAN_VERT, PA_SCAN_VERT);
display++;
break;
case 18:
P.displayText("ScanVX", PA_CENTER, 40, 1000, PA_SCAN_VERTX, PA_SCAN_VERTX);
display++;
break;
case 19:
P.displayText("Open", PA_CENTER, 40, 1000, PA_OPENING, PA_OPENING);
display++;
break;
case 20:
P.displayText("Open_C", PA_CENTER, 40, 1000, PA_OPENING_CURSOR, PA_OPENING_CURSOR);
display++;
break;
case 21:
P.displayText("Close", PA_CENTER, 40, 1000, PA_CLOSING, PA_CLOSING);
display++;
break;
case 22:
P.displayText("Close_C", PA_CENTER, 40, 1000, PA_CLOSING_CURSOR, PA_CLOSING_CURSOR);
display++;
break;
case 23:
P.displayText("S_Up_L", PA_CENTER, 40, 1000, PA_SCROLL_UP_LEFT, PA_SCROLL_UP_LEFT);
display++;
break;
case 24:
P.displayText("S_Up_R", PA_CENTER, 40, 1000, PA_SCROLL_UP_RIGHT, PA_SCROLL_UP_RIGHT);
display++;
break;
case 25:
P.displayText("S_Dw_L", PA_CENTER, 40, 1000, PA_SCROLL_DOWN_LEFT, PA_SCROLL_DOWN_LEFT);
display++;
break;
case 26:
P.displayText("S_Dw_R", PA_CENTER, 40, 1000, PA_SCROLL_DOWN_RIGHT, PA_SCROLL_DOWN_RIGHT);
display++;
break;
case 27:
P.displayText("Grow_U", PA_CENTER, 30, 1000, PA_GROW_UP, PA_GROW_UP);
display++;
break;
case 28:
P.displayText("Grow_D", PA_CENTER, 30, 1000, PA_GROW_DOWN, PA_GROW_DOWN);
display=0;
break;
}
}
}
Nama Animasi | Contoh Animasi |
PA_NO_EFFECT | |
PA_PRINT | |
PA_SCROLL_UP | |
PA_SCROLL_DOWN |
Kode Program Running Text / Tulisan Berjalan
Untuk membuat running text menggunakan modul dot matrix MAX7219 ini, saya akan menambahkan 1 modul lagi (4×1) sehingga akan berjumlah 8×1 (64×8) agar tampilan menjadi lebih luas. Lalu, silahkan copy program berikut ini dan upload ke board arduino anda:
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 11
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
uint8_t scrollSpeed = 25; // default frame delay value
textEffect_t scrollEffect = PA_SCROLL_LEFT;
textPosition_t scrollAlign = PA_LEFT;
uint16_t scrollPause = 0; // in milliseconds
// Global message buffers shared by Serial and Scrolling functions
#define BUF_SIZE 75
char curMessage[BUF_SIZE] = { "" };
char newMessage[BUF_SIZE] = { "Selamat Datang Di Nurul Ikhwah Boarding School Nagan Raya" };
bool newMessageAvailable = true;
void setup()
{
P.begin();
P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
}
void loop()
{
if (P.displayAnimate())
{
if (newMessageAvailable)
{
strcpy(curMessage, newMessage);
newMessageAvailable = false;
}
P.displayReset();
}
}
Hasil
Setelah upload selesai, maka tampilan hasil akhir dari program running text diatas adalah seperti yang ditunjukkan pada gambar berikut:
Sampai saat ini anda telah memiliki dasar-dasar cara menampilkan text di led matrix dan membuat tulisan berjalan pada modul max7219. Untuk meningkatkan skill, berikut ada beberapa projek tambahan yang dapat anda pelajari :
Semoga artikel Arduino Dot Matrix Max7219 Tutorial Dasar ini dapat bermanfaat. Jika berkenan, silahkan bagikan artikel ini dengan menggunakan tombol share dibawah ini.