Setting LED MAX 7219 dengan Adruino UNO
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
Baca
Juga: Mendrive LED Dot Matrix Dengan Arduino Dan 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
Pembaca
dapat membeli Modul LED Dot Matrix Display 4 in 1 melalui TOKO
BEY dengan mengakses halaman pembelian di tautan berikut. Jika pembaca merasa tulisan ini bermanfaat, pembaca
dapat berterimakasih dengan membeli produk di TOKO BEY
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
//
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"); |
|
|
|
} |
view rawhello.ino hosted
with ❤ by GitHub
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
// 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(); |
|
} |
view rawrunning text.ino hosted
with ❤ by GitHub
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
Komentar
Posting Komentar
Tulis Komentar