Minggu, 12 Oktober 2025

Program running text (tulisan berjalan) untuk Arduino Uno dan modul tampilan matriks LED 8×32 MAX7219




Program running text (tulisan berjalan) untuk Arduino Uno dan modul tampilan matriks LED MAX7219, menggunakan teks "SELAMAT DATANG".

Anda akan menggunakan pustaka MD_Parola dan MD_MAX72XX karena pustaka ini sangat efektif untuk membuat teks berjalan pada banyak modul MAX7219 yang disambung berantai (daisy-chained).

Persiapan Awal

1. Pemasangan Pustaka (Library Installation)

Anda perlu menginstal dua pustaka melalui Library Manager di Arduino IDE:

  • MD_MAX72XX

  • MD_Parola

Buka Sketch > Include Library > Manage Libraries... dan cari serta instal kedua pustaka tersebut.

2. Pengkabelan (Wiring)

Modul biasanya terdiri dari empat modul yang disambung berantai. Sambungkan pin-pin dari modul MAX7219 pertama ke Arduino Uno Anda (atau board yang kompatibel) sebagai berikut:

MAX7219 ModulPin Arduino Uno
VCC5V
GNDGND
DINPin Digital 11 (MOSI)
CLKPin Digital 13 (SCK)
CSPin Digital 10 (SS/LOAD)

Catatan Penting:

  • Disarankan untuk menggunakan pin SPI Hardware (Pin 11, 13, 10 pada Uno) untuk kinerja yang lebih baik.

  • Modul yang terdiri dari 4 modul dapat menarik arus yang cukup besar. Untuk penggunaan yang stabil, terutama jika kecerahan disetel tinggi, sebaiknya gunakan catu daya eksternal 5V terpisah untuk modul LED (pastikan GND Arduino dan GND catu daya eksternal terhubung).


Kode Program Arduino

Salin dan tempel kode berikut ke Arduino IDE Anda:

Arduino
#include <MD_Parola.h>
#include <MD_MAX72XX.h>
#include <SPI.h>

// Definisikan tipe hardware Anda. 
// Pilihan umum termasuk FC16_HW atau GENERIC_HW.
// Sesuaikan jika tampilan Anda tidak berfungsi.
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW

// Tentukan jumlah modul 8x8 yang disambung berantai.
// Untuk tampilan 8x32, jumlah modulnya adalah 4 (8 * 4 = 32)
#define MAX_DEVICES 4

// Tentukan pin CS (Chip Select) yang terhubung ke Arduino
#define CS_PIN 10 

// Teks yang akan ditampilkan
#define SCROLL_TEXT "SELAMAT DATANG"

// Buat objek MD_Parola
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

// Kecepatan teks berjalan (dalam milidetik). Nilai yang lebih kecil = lebih cepat. (Misalnya 35 - 150)
const uint8_t SCROLL_SPEED = 70; 
// Efek teks, PA_SCROLL_LEFT adalah yang paling umum untuk teks berjalan
const textEffect_t SCROLL_EFFECT = PA_SCROLL_LEFT; 
// Penjajaran teks
const textPosition_t SCROLL_ALIGN = PA_LEFT; 
// Jeda setelah pesan selesai (dalam milidetik)
const uint16_t SCROLL_PAUSE = 0; 

void setup() {
  Serial.begin(57600);
  
  // Inisialisasi tampilan
  myDisplay.begin();
  
  // Atur intensitas (kecerahan) tampilan (0-15)
  // Atur ke nilai yang lebih rendah jika menggunakan daya dari USB Arduino
  myDisplay.setIntensity(4); 
  
  // Bersihkan tampilan
  myDisplay.displayClear();
  
  // Konfigurasi teks berjalan
  myDisplay.setTextAlignment(SCROLL_ALIGN);
  myDisplay.setTextEffect(SCROLL_EFFECT, SCROLL_EFFECT);
  myDisplay.setSpeed(SCROLL_SPEED);
  myDisplay.setPause(SCROLL_PAUSE);
  
  // Setel teks untuk animasi pertama (running text)
  myDisplay.displayScroll(SCROLL_TEXT, PA_LEFT, PA_SCROLL_LEFT, SCROLL_SPEED);
}

void loop() {
  // myDisplay.displayAnimate() adalah fungsi utama yang melakukan animasi teks.
  // Jika animasi selesai, kita akan me-reset-nya untuk mengulang.
  if (myDisplay.displayAnimate()) {
    // Reset animasi untuk mulai dari awal lagi (running text berulang)
    myDisplay.displayReset();
  }
}

Penjelasan Kode

Definisi

  • #define HARDWARE_TYPE MD_MAX72XX::FC16_HW: Mengatur tipe modul. FC16_HW umum digunakan untuk modul 4-in-1 (yang membentuk ). Jika tidak berfungsi, coba ganti dengan MD_MAX72XX::GENERIC_HW.

  • #define MAX_DEVICES 4: Menunjukkan ada 4 modul yang disambung, membentuk .

  • #define CS_PIN 10: Menentukan pin Chip Select (CS) atau LOAD yang terhubung ke Arduino.

  • MD_Parola myDisplay = MD_Parola(...): Membuat objek utama untuk mengontrol tampilan dan animasi.

  • #define SCROLL_TEXT "SELAMAT DATANG": Teks yang akan berjalan.

void setup()

  • myDisplay.begin(): Memulai komunikasi dengan modul MAX7219.

  • myDisplay.setIntensity(4): Mengatur kecerahan (0-15).

  • myDisplay.displayScroll(...): Mengatur teks dan parameter animasi awal:

    • SCROLL_TEXT: Teksnya.

    • PA_LEFT: Penjajaran teks.

    • PA_SCROLL_LEFT: Efek entri (masuk dari kanan).

    • SCROLL_SPEED: Kecepatan berjalan.

void loop()

  • if (myDisplay.displayAnimate()): Fungsi ini harus dipanggil di loop() untuk menjalankan animasi. Fungsi ini mengembalikan true ketika animasi saat ini selesai.

  • myDisplay.displayReset(): Jika animasi selesai, fungsi ini mengatur ulang tampilan ke awal, sehingga teks "SELAMAT DATANG" akan berjalan secara berulang.

Jam Digital dengan Arduino Uno, Dot Matrix (MAX7219), dan RTC DS3231



Panduan lengkap untuk membuat Jam Digital dengan Arduino Uno, Dot Matrix (MAX7219), dan RTC DS3231, lengkap dengan fitur teks berjalan yang menampilkan pesan "Waktu tidak akan pernah kembali, jadi hargailah setiap detiknya" secara bergantian.

🛠️ Komponen yang Dibutuhkan

  1. Arduino Uno x1

  2. Modul Dot Matrix (Disarankan modul -in- dengan chip MAX7219) x1

  3. Modul RTC DS3231 x1

  4. Kabel Jumper


🔌 Rangkaian Komponen (Wiring Diagram)

Proyek ini menggunakan dua jenis komunikasi: I2C untuk RTC DS3231 dan SPI untuk Dot Matrix MAX7219.

1. Koneksi RTC DS3231 (I2C)

DS3231 PinArduino Uno PinKeterangan
VCCCatu daya
GNDGNDGround
SCLA5Clock I2C
SDAA4Data I2C

2. Koneksi Dot Matrix MAX7219 (SPI)

MAX7219 PinArduino Uno PinKeterangan
VCCCatu daya
GNDGNDGround
DIN (Data In)D11Pin Data (MOSI)
CLK (Clock)D13Pin Clock (SCK)
CS (Chip Select/LOAD)D10Pin Chip Select

💻 Kode Program (Sketch Arduino)

1. Instalasi Library

Pastikan Anda telah menginstal dua library utama ini melalui Arduino IDE > Sketch > Include Library > Manage Libraries...:

  1. RTClib (oleh Adafruit)

  2. MD_Parola dan MD_MAX72xx (oleh MajicDesigns)

2. Kode Lengkap

Gunakan kode berikut. Logika di dalamnya akan menampilkan Jam selama 10 detik dan Teks Berjalan selama animasi teks selesai (sekitar 10 detik), dan berulang.

C++
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <Wire.h>
#include "RTClib.h" 

// --- DEFNISI HARDWARE ---
// Tipe hardware (umumnya FC16_HW untuk modul 4-in-1)
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW 
// Jumlah modul 8x8 yang dirangkai (biasanya 4)
#define MAX_DEVICES 4 

// Pin koneksi SPI ke Arduino Uno
#define CS_PIN    10 

// --- INISIALISASI OBJEK ---
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
RTC_DS3231 rtc; 

// --- VARIABEL GLOBAL ---
// Buffer untuk string waktu (HH:MM:SS)
char timeChar[9]; 

// Pesan Teks Berjalan
const char MESSAGE[] = "Waktu tidak akan pernah kembali, jadi hargailah setiap detiknya";

// Variabel untuk mengelola pergantian mode tampilan
unsigned long previousMillis = 0;
// Interval minimal untuk mode jam digital sebelum beralih ke teks berjalan (10 detik)
const long interval = 10000; 
bool isClockMode = true;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  
  // Inisialisasi Dot Matrix
  P.begin();
  P.setIntensity(0); // Kecerahan 0 (tergelap) sampai 15 (terang)
  P.displayClear();

  // Inisialisasi RTC
  if (! rtc.begin()) {
    Serial.println("Tidak dapat menemukan modul RTC");
    while (1); 
  }
  
  /* * HANYA JALANKAN SEKALI UNTUK MENGATUR WAKTU AWAL!
   * Setelah waktu diatur, beri komentar pada baris di bawah ini.
   * rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); 
   */
   
  // Atur mode tampilan awal menjadi jam
  P.setTextAlignment(PA_CENTER);
  P.setTextEffect(PA_PRINT, PA_NO_EFFECT);
  previousMillis = millis();
}

void loop() {
  // Fungsi ini WAJIB dijalankan. Akan mengembalikan TRUE jika animasi selesai.
  if (P.displayAnimate()) { 
    // Jika animasi teks berjalan selesai, atau sudah waktunya ganti mode
    unsigned long currentMillis = millis();
    
    // Logika Pergantian Mode Tampilan
    if (currentMillis - previousMillis >= interval || !isClockMode) {
      previousMillis = currentMillis;
      isClockMode = !isClockMode; // Balik mode
      
      // Persiapkan tampilan baru
      if (isClockMode) {
        // Mode Jam Digital
        P.setTextAlignment(PA_CENTER);
        P.setTextEffect(PA_PRINT, PA_NO_EFFECT); 
      } else {
        // Mode Teks Berjalan
        P.setTextAlignment(PA_LEFT);
        // Tampilkan teks berjalan ke kiri dengan kecepatan 50ms per kolom
        P.displayScroll(MESSAGE, PA_LEFT, PA_SCROLL_LEFT, 50); 
      }
    }
  }

  // Logika tampilan Jam Digital (hanya berjalan saat isClockMode = true)
  if (isClockMode) {
    DateTime now = rtc.now();
    // Format waktu ke HH:MM:SS
    sprintf(timeChar, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
    P.print(timeChar);
  }
}

💡 Petunjuk Penggunaan Kode

  1. Pengaturan Waktu Awal:

    • Cari baris ini di fungsi setup(): // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

    • Hapus tanda komentar (//) dan upload kode. Ini akan menyetel RTC ke waktu komputer Anda saat kode dikompilasi.

    • Setelah upload pertama berhasil, TAMBAHKAN KEMBALI TANDA KOMENTAR (//) pada baris tersebut. Jika tidak, jam akan disetel ulang setiap kali Arduino dinyalakan.

  2. Mode Tampilan:

    • Tampilan akan berada dalam Mode Jam Digital selama 10 detik.

    • Setelah itu, tampilan akan beralih ke Mode Teks Berjalan dan menampilkan "Waktu tidak akan pernah kembali, jadi hargailah setiap detiknya".

    • Setelah pesan selesai bergulir, tampilan akan kembali ke Mode Jam Digital, dan seterusnya.