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 JugaMendrive 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

Postingan populer dari blog ini

K3 Pekerja Tower Telekomunikasi

Dasar-dasar Jaringan Komputer