Mendrive Banyak LED Dot Matrix menggunakan Arduino dan MAX7219
Beberapa tahun yang lalu embeddednesia pernah membahas tentang dasar – dasar led dot matrix dan bagaimana menggunakan display led dot matrix bersama dengan ic driver MAX7129. Dalam tulisan kali ini, penulis akan membahas bagaiamana menggunakan 4 led dot matrix yang telah di-cascade dengan MAX7129
IC Driver MAX7219 memiliki kelebihan salah satunya bisa di-cascade dengan driver MAX7219 yang lain sehingga perancang dapat menyusun modul led dot matrix sepanjang mungkin.
- Prasyarat Perangkat keras
Dalam tutorial ini digunakan spesifikasi komponen/perangkat keras sebagai berikut
- Modul 4 in 1 LED Dot Matrix Display
Modul ini di tiap led dot matrix-nya berukuran 8×8 dengan spesifikasi Common Cathode. Dimana 4 led dot matrix display tersebut di-cascade dalam satu modul menggunakan 4 IC MAX7129. Berikut adalah tampilan dari Modul LED Dot Matrix Display 4 in 1 tersebut
Adverstiment
- Arduino Uno
Sebagai kontroler di dalam tulisan ini diganakan board Arduino Uno, board ini bisa didapatkan di TOKO BEY dengan mengunjungi halaman pembelian di tautan berikut
- Prasyarat Perangkat Lunak
Sistem Operasi dan software / perangkat lunak yang digunakan dalam tulisan ini adalah sebagai berikut
- Sistem Operasi Microsoft Windows 10
- Arduino IDE
- Java Development Kit
- Install Library
Sebelum memulai membuat sketch, pastikan library berikut telah terinstall.
- MD_MAX72XX
- MD_MAXPanel
- MD_Parola
Untuk menginstal Library tersebut dapat menggunakan menu Sketch > Include Library > Library Manager. Berikut adalah
Adverstiment
- Pengkabelan
Modul LED Dot Matrix Display 4 in 1 memiliki 5 pin, dua diantaranya adalah untuk VCC dan GND, sedangkan tiga lainnya DIN, CLK, dan CS. dapat dihubungkan di pin manapun pada Arduino Uno, namun dalam tutorial ini dihubungkan pin arduino dengan konfigurasi sebagai berikut
MAX7219 | Arduino Uno |
CLK | 13 |
DIN | 11 |
CS | 10 |
- Sketch 1
Program berikut akan menampilkan karakter string Hello World pada modul led dot matrix
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Program to demonstrate the MD_Parola library | |
// | |
// Uses the Arduino Print Class extension with various output types | |
// | |
// MD_MAX72XX library can be found at https://github.com/MajicDesigns/MD_MAX72XX | |
// | |
#include <MD_Parola.h> | |
#include <MD_MAX72xx.h> | |
#include <SPI.h> | |
const uint16_t WAIT_TIME = 1000; | |
// Define the number of devices we have in the chain and the hardware interface | |
// NOTE: These pin numbers will probably not work with your hardware and may | |
// need to be adapted | |
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW | |
#define MAX_DEVICES 4 | |
#define CLK_PIN 13 | |
#define DATA_PIN 11 | |
#define CS_PIN 10 | |
// Hardware SPI connection | |
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); | |
// Arbitrary output pins | |
// MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); | |
void setup(void) | |
{ | |
P.begin(); | |
} | |
void loop(void) | |
{ | |
P.print("Hello"); | |
} |
Upload program tersebut ke Arduino Uno. Jika berhasil led dot matrix akan menampilkan hasil seperti gambar berikut
- Advertisement -
- Running Text
Setelah sketch pertama pada langkah sebelumnya berhasil, kini saatnya naik ke level berikutnya dimana LED Dot Matrix akan menampilkan teks berjalan berdasarkan nilai yang dimasukan pengguna melalui komunikasi serial
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Use the Parola library to scroll text on the display | |
// | |
// Demonstrates the use of the scrolling function to display text received | |
// from the serial interface | |
// | |
// User can enter text on the serial monitor and this will display as a | |
// scrolling message on the display. | |
// Speed for the display is controlled by a pot on SPEED_IN analog in. | |
// Scrolling direction is controlled by a switch on DIRECTION_SET digital in. | |
// Invert ON/OFF is set by a switch on INVERT_SET digital in. | |
// | |
// UISwitch library can be found at https://github.com/MajicDesigns/MD_UISwitch | |
// MD_MAX72XX library can be found at https://github.com/MajicDesigns/MD_MAX72XX | |
// | |
#include <MD_Parola.h> | |
#include <MD_MAX72xx.h> | |
#include <SPI.h> | |
// set to 1 if we are implementing the user interface pot, switch, etc | |
#define USE_UI_CONTROL 0 | |
#if USE_UI_CONTROL | |
#include <MD_UISwitch.h> | |
#endif | |
// Turn on debug statements to the serial output | |
#define DEBUG 0 | |
#if DEBUG | |
#define PRINT(s, x) { Serial.print(F(s)); Serial.print(x); } | |
#define PRINTS(x) Serial.print(F(x)) | |
#define PRINTX(x) Serial.println(x, HEX) | |
#else | |
#define PRINT(s, x) | |
#define PRINTS(x) | |
#define PRINTX(x) | |
#endif | |
// Define the number of devices we have in the chain and the hardware interface | |
// NOTE: These pin numbers will probably not work with your hardware and may | |
// need to be adapted | |
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW | |
#define MAX_DEVICES 4 | |
#define CLK_PIN 13 | |
#define DATA_PIN 11 | |
#define CS_PIN 10 | |
// HARDWARE SPI | |
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); | |
// SOFTWARE SPI | |
//MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); | |
// Scrolling parameters | |
#if USE_UI_CONTROL | |
const uint8_t SPEED_IN = A5; | |
const uint8_t DIRECTION_SET = 8; // change the effect | |
const uint8_t INVERT_SET = 9; // change the invert | |
const uint8_t SPEED_DEADBAND = 5; | |
#endif // USE_UI_CONTROL | |
uint8_t scrollSpeed = 25; // default frame delay value | |
textEffect_t scrollEffect = PA_SCROLL_LEFT; | |
textPosition_t scrollAlign = PA_LEFT; | |
uint16_t scrollPause = 2000; // in milliseconds | |
// Global message buffers shared by Serial and Scrolling functions | |
#define BUF_SIZE 75 | |
char curMessage[BUF_SIZE] = { "" }; | |
char newMessage[BUF_SIZE] = { "Hello! Enter new message?" }; | |
bool newMessageAvailable = true; | |
#if USE_UI_CONTROL | |
MD_UISwitch_Digital uiDirection(DIRECTION_SET); | |
MD_UISwitch_Digital uiInvert(INVERT_SET); | |
void doUI(void) | |
{ | |
// set the speed if it has changed | |
{ | |
int16_t speed = map(analogRead(SPEED_IN), 0, 1023, 10, 150); | |
if ((speed >= ((int16_t)P.getSpeed() + SPEED_DEADBAND)) || | |
(speed <= ((int16_t)P.getSpeed() – SPEED_DEADBAND))) | |
{ | |
P.setSpeed(speed); | |
scrollSpeed = speed; | |
PRINT("\nChanged speed to ", P.getSpeed()); | |
} | |
} | |
if (uiDirection.read() == MD_UISwitch::KEY_PRESS) // SCROLL DIRECTION | |
{ | |
PRINTS("\nChanging scroll direction"); | |
scrollEffect = (scrollEffect == PA_SCROLL_LEFT ? PA_SCROLL_RIGHT : PA_SCROLL_LEFT); | |
P.setTextEffect(scrollEffect, scrollEffect); | |
P.displayClear(); | |
P.displayReset(); | |
} | |
if (uiInvert.read() == MD_UISwitch::KEY_PRESS) // INVERT MODE | |
{ | |
PRINTS("\nChanging invert mode"); | |
P.setInvert(!P.getInvert()); | |
} | |
} | |
#endif // USE_UI_CONTROL | |
void readSerial(void) | |
{ | |
static char *cp = newMessage; | |
while (Serial.available()) | |
{ | |
*cp = (char)Serial.read(); | |
if ((*cp == '\n') || (cp – newMessage >= BUF_SIZE-2)) // end of message character or full buffer | |
{ | |
*cp = '\0'; // end the string | |
// restart the index for next filling spree and flag we have a message waiting | |
cp = newMessage; | |
newMessageAvailable = true; | |
} | |
else // move char pointer to next position | |
cp++; | |
} | |
} | |
void setup() | |
{ | |
Serial.begin(57600); | |
Serial.print("\n[Parola Scrolling Display]\nType a message for the scrolling display\nEnd message line with a newline"); | |
#if USE_UI_CONTROL | |
uiDirection.begin(); | |
uiInvert.begin(); | |
pinMode(SPEED_IN, INPUT); | |
doUI(); | |
#endif // USE_UI_CONTROL | |
P.begin(); | |
P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect); | |
} | |
void loop() | |
{ | |
#if USE_UI_CONTROL | |
doUI(); | |
#endif // USE_UI_CONTROL | |
if (P.displayAnimate()) | |
{ | |
if (newMessageAvailable) | |
{ | |
strcpy(curMessage, newMessage); | |
newMessageAvailable = false; | |
} | |
P.displayReset(); | |
} | |
readSerial(); | |
} |
Setelah sketch tersebut dicompile dan di-upload ke Arduino Uno. Led dot matrix akan menampilkan tulisan
"Hello! Enter new message?"
Buka Serial Monitor dan atur baudrate pada 57600 sebagaimana pada screenshoot gambar dibawah ini, Lalu masukan sebuah kalimat misalnya embeddednesia.com
, dot matrix akan menampilkan kalimat persis seperti yang telah dimasukkan ke Serial Monitor
Berikut adalah video pengujian dari program running text tersebut