/*********************************************************************
* ROLOVANIE TEXTU S MD_PAROLA
* Zadajte text v Serial Monitori
* Text sa bude rolovat z prava do lava
*********************************************************************/
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
// Typ modulu
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4 // počet modulov (4x8x8)
#define CLK_PIN 13 // SCK
#define DATA_PIN 11 // MOSI
#define CS_PIN 10 // CS (LOAD)
// Inicializácia knižnice
MD_Parola displej = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
// Premenné
char textBuffer[100] = "Test rolovania";
textEffect_t scrollEffect = PA_SCROLL_LEFT; // Efekt rolovania
/**
* Spracuje príkazy zo sériového portu
*/
void spracujSerial() {
if (Serial.available() > 0) {
String vstup = Serial.readStringUntil('\n');
vstup.trim();
if (vstup.length() > 0) {
// Kopíruj text do bufferu
vstup.toCharArray(textBuffer, sizeof(textBuffer));
// Nastav nový text na displeji
displej.displayReset();
displej.displayText(textBuffer,
PA_CENTER, // zarovnanie
80, // rýchlosť (ms)
0, // pauza
scrollEffect, // efekt
scrollEffect); // efekt konca
Serial.print("Nový text: ");
Serial.println(textBuffer);
}
}
}
/**
* Testovací režim - ukáže všetky efekty
*/
void testEfekty() {
textEffect_t efekty[] = {
PA_SCROLL_LEFT, // Rolovanie doľava
PA_SCROLL_RIGHT, // Rolovanie doprava
PA_SCROLL_UP, // Rolovanie nahor
PA_SCROLL_DOWN, // Rolovanie nadol
PA_WIPE, // Prekrytie
PA_WIPE_CURSOR, // Prekrytie kurzorom
PA_OPENING, // Otváranie
PA_OPENING_CURSOR, // Otváranie kurzorom
PA_CLOSING, // Zatváranie
PA_CLOSING_CURSOR, // Zatváranie kurzorom
PA_BLINDS, // Žalúzie
PA_DISSOLVE, // Rozpúšťanie
PA_RANDOM, // Náhodný efekt
PA_SLICE, // Rezanie
PA_MESH, // Sieť
PA_FADE, // Prechod
PA_PRINT, // Tlač
PA_SCAN_HORIZ, // Horizontálne skenovanie
PA_SCAN_VERT, // Vertikálne skenovanie
PA_GROW_UP, // Rast nahor
PA_GROW_DOWN // Rast nadol
};
char* nazvyEfektov[] = {
"SCROLL_LEFT", "SCROLL_RIGHT", "SCROLL_UP", "SCROLL_DOWN",
"WIPE", "WIPE_CURSOR", "OPENING", "OPENING_CURSOR",
"CLOSING", "CLOSING_CURSOR", "BLINDS", "DISSOLVE",
"RANDOM", "SLICE", "MESH", "FADE", "PRINT",
"SCAN_HORIZ", "SCAN_VERT", "GROW_UP", "GROW_DOWN"
};
int pocetEfektov = sizeof(efekty) / sizeof(efekty[0]);
Serial.println("Test všetkých efektov...");
for (int i = 0; i < pocetEfektov; i++) {
Serial.print("Efekt ");
Serial.print(i + 1);
Serial.print(": ");
Serial.println(nazvyEfektov[i]);
displej.displayReset();
displej.displayText(nazvyEfektov[i],
PA_CENTER, 80, 1000, efekty[i], efekty[i]);
// Čakaj, kým sa efekt dokončí
while (!displej.displayAnimate()) {
delay(10);
}
delay(1000); // Pauza medzi efektami
}
// Návrat k pôvodnému textu
displej.displayReset();
displej.displayText(textBuffer, PA_CENTER, 80, 0, scrollEffect, scrollEffect);
Serial.println("Test dokončený");
}
/**
* Zmena efektu rolovania
*/
void zmenEfekt(textEffect_t novyEfekt) {
scrollEffect = novyEfekt;
displej.displayReset();
displej.displayText(textBuffer, PA_CENTER, 80, 0, scrollEffect, scrollEffect);
Serial.print("Efekt zmenený na: ");
switch(novyEfekt) {
case PA_SCROLL_LEFT: Serial.println("SCROLL_LEFT"); break;
case PA_SCROLL_RIGHT: Serial.println("SCROLL_RIGHT"); break;
case PA_SCROLL_UP: Serial.println("SCROLL_UP"); break;
case PA_SCROLL_DOWN: Serial.println("SCROLL_DOWN"); break;
default: Serial.println("INÝ"); break;
}
}
/**
* Inicializácia
*/
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("MD_PAROLA - ROLOVANIE TEXTU");
Serial.println("===========================");
Serial.println("Príkazy:");
Serial.println(" text - zobrazí zadaný text");
Serial.println(" LEFT - rolovanie doľava");
Serial.println(" RIGHT - rolovanie doprava");
Serial.println(" UP - rolovanie nahor");
Serial.println(" DOWN - rolovanie nadol");
Serial.println(" TEST - test všetkých efektov");
Serial.println(" SPEED xxx - zmeni rýchlosť (50-200)");
Serial.println();
// Inicializácia displeja
displej.begin();
displej.setIntensity(5); // jas 0–15
displej.displayClear();
// Počiatočný text
displej.displayText(textBuffer,
PA_CENTER, // zarovnanie
80, // rýchlosť (ms)
0, // pauza
scrollEffect, // efekt
scrollEffect); // efekt konca
Serial.println("Systém pripravený...");
}
/**
* Hlavná slučka
*/
void loop() {
// Spracuj sériový vstup
if (Serial.available() > 0) {
String prikaz = Serial.readStringUntil('\n');
prikaz.trim();
if (prikaz.length() > 0) {
if (prikaz == "LEFT") {
zmenEfekt(PA_SCROLL_LEFT);
} else if (prikaz == "RIGHT") {
zmenEfekt(PA_SCROLL_RIGHT);
} else if (prikaz == "UP") {
zmenEfekt(PA_SCROLL_UP);
} else if (prikaz == "DOWN") {
zmenEfekt(PA_SCROLL_DOWN);
} else if (prikaz == "TEST") {
testEfekty();
} else if (prikaz.startsWith("SPEED ")) {
int rychlost = prikaz.substring(6).toInt();
if (rychlost >= 50 && rychlost <= 200) {
displej.setSpeed(rychlost);
Serial.print("Rýchlosť nastavená na: ");
Serial.println(rychlost);
}
} else {
// Normálny text
prikaz.toCharArray(textBuffer, sizeof(textBuffer));
displej.displayReset();
displej.displayText(textBuffer, PA_CENTER, 80, 0, scrollEffect, scrollEffect);
Serial.print("Zobrazujem: ");
Serial.println(textBuffer);
}
}
}
// Animuj displej
if (displej.displayAnimate()) {
displej.displayReset();
}
}