#include <MD_MAX72xx.h>
#include "font_16x16.h"
const int baris = 2;
const int kolom = 15;
#define MAX_DEVICES (baris * kolom)
const int maxX = kolom * 8;
const int maxY = 8;
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
MD_MAX72XX mx = MD_MAX72XX(MD_MAX72XX::PAROLA_HW, CS_PIN, MAX_DEVICES);
void setup() {
Serial.begin(9600);
mx.begin();
mx.control(MD_MAX72XX::INTENSITY, MAX_INTENSITY / 2);
mx.clear();
}
void loop() {
tampilkanTeks(mx, "HSE BOARD NPK PKC", 300);
delay(50);
}
void tampilkanTeks(MD_MAX72XX &mx, const char *teks, uint16_t interval) {
int16_t offsetX = 0;
int16_t lastOffsetX;
bool tampil=true;
uint8_t lastKar = strlen(teks);
int HurufKe;
uint16_t buffer[9];
//mx.clear();
while (tampil){
const char *ptr = teks;
lastOffsetX = offsetX;
int16_t currentOffsetX;
mx.clear();
unsigned long currentMillis = millis(); // Membaca waktu saat ini
unsigned long previousMillis = currentMillis;
for (uint8_t karI = 0; karI < lastKar; karI++) {
HurufKe = ptr[karI]-65;
currentOffsetX = lastOffsetX;
int16_t posisiKol;
bool ledNyala = true;
uint8_t row = 0;
for (int i = 0; i < LEBAR_TINGGI[HurufKe][1]; i++) {
buffer[i] = pgm_read_word(&POLA_HURUF[HurufKe][i]);
}
while ((row <LEBAR_TINGGI[HurufKe][1]) && ledNyala) {
uint8_t baris = 0;
while ((baris<LEBAR_TINGGI[HurufKe][0])) {
if ((buffer[row] >> (LEBAR_TINGGI[HurufKe][0] - 1 - baris)) & 0x01) {
int16_t posisiKol = lastOffsetX - row;
currentOffsetX = posisiKol;
if (posisiKol >= 0 && posisiKol < maxX) {
if (baris < 8)
mx.setPoint(baris, posisiKol, true);
else
mx.setPoint(baris - 8, posisiKol + maxX, true);
if ((karI==(lastKar-1))&&(baris==(LEBAR_TINGGI[HurufKe][0]-1))){
offsetX = 0;
}
} else {
ledNyala=false;
break;
if ((karI==(lastKar-1))&&(baris==(LEBAR_TINGGI[HurufKe][0]-1))){
tampil=false;
}
}
}
baris++;
}
row++;
}
lastOffsetX = currentOffsetX-2;
}
offsetX = offsetX+1;
mx.update();
while (currentMillis - previousMillis < interval) {
currentMillis = millis();
}
previousMillis = currentMillis;
//delay(100);
}
}