#include <MD_MAX72xx.h>
#include "font_16x16.h"
const int baris = 4;
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() {
//teksRataKiri(mx, "HSE Board");
tampilkanTeks(mx, "HSE Board", 50, 0);
//tampilkanTeks(mx, "Dilarang bekerja tanpa Permit.", 50, 2);
delay(50);
}
void teksRataKiri(MD_MAX72XX &mx, const char *teks, uint8_t baris)
{
/*
==> teksRataKiri(MD_MAX72XX &mx, const char *teks, uint8_t baris)
Tampilkan teks rata kiri
- Mulai dari offsetX = maxX
- Jika lebar teks > maxX maka lakukan scroll teks
sampai semua teks ditampilkan
- Setelah semua teks ditampilkan tampilkan akhiri
dengan menampilkan teks muulai dari kiri sampai memenuhi lebar baris
*/
}
void tampilkanTeks(MD_MAX72XX &mx, const char *teks, uint16_t interval, uint8_t teksI) {
int16_t offsetX = 0;
int16_t lastOffsetX=0;
bool tampil=true;
uint8_t lastKar = strlen(teks);
int HurufKe;
uint16_t buffer[9];
//mx.clear();
unsigned long previousMillis = millis();
while (tampil){
const char *ptr = teks;
lastOffsetX = offsetX;
int16_t currentOffsetX;
unsigned long currentMillis = millis(); // Membaca waktu saat ini
uint8_t karI = 0;
if (currentMillis - previousMillis > interval){
previousMillis = currentMillis;
mx.clear();
while (karI < lastKar){
HurufKe = ptr[karI]-32;
currentOffsetX = lastOffsetX;
int16_t posisiKol;
if (currentOffsetX < (maxX+LEBAR_TINGGI[HurufKe][1])) {
for (int i = 0; i < LEBAR_TINGGI[HurufKe][1]; i++) {
buffer[i] = pgm_read_word(&POLA_HURUF[HurufKe][i]);
}
uint8_t row = 0;
while (row <LEBAR_TINGGI[HurufKe][1]) {
uint8_t highByteX = (buffer[row] >> 8) & 0xFF; // Ambil 2 digit tinggi
uint8_t lowByteX = buffer[row] & 0xFF; // Ambil 2 digit rendah
int16_t posisiKol = lastOffsetX - row;
currentOffsetX = posisiKol;
if (posisiKol<0){
break;
} else if (posisiKol>=maxX){
} else {
mx.setColumn(((posisiKol/8) + (kolom*teksI)), (posisiKol%8), lowByteX);
mx.setColumn(((posisiKol/8) + (kolom*(teksI+1))), (posisiKol%8), highByteX);
if ((karI>=(lastKar-1))&&(row>=LEBAR_TINGGI[HurufKe][1]-1)){
tampil = false;
}
}
row++;
}
lastOffsetX = currentOffsetX-2;
if (lastOffsetX<0) {
break;
}
} else {
lastOffsetX = currentOffsetX - LEBAR_TINGGI[HurufKe][1];
}
karI++;
}
offsetX = offsetX+1;
mx.update();
//delay(100);
} else {
//Serial.println(currentMillis - previousMillis);
}
}
}