#include <MD_Parola.h>
#include <MD_MAX72xx.h>
// ---------- CONFIGURACIÓN PARA MATRIZ 32x8 ----------
// Esta configuración ya está confirmada que funciona para ti
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define NUM_OF_MATRIX 4
#define CLK_PIN 4
#define DATA_PIN 2
#define CS_PIN 3
// --- LA LÍNEA CRÍTICA CORREGIDA ---
// Inicializa el objeto Parola especificando TODOS los pines (Software SPI)
MD_Parola letrero = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, NUM_OF_MATRIX);
// EDITAR EL TEXTO Y VELOCIDAD A TU GUSTO
String mensaje = "El jerry digital";
int velocidad_animacion = 75; // Velocidad de la animación (menor es más rápido)
String vel;
long velSlide = 100;
String proximo_mensaje = "";
// Arreglo con las diferentes animaciones de entrada y salida
textEffect_t animaciones[] = {
PA_SCROLL_LEFT,
PA_SCROLL_UP,
PA_SCROLL_DOWN,
//PA_SPRITE,
//PA_SLICE,
PA_MESH,
PA_FADE,
//PA_DISSOLVE,
// PA_BLINDS,
//PA_RANDOM,
PA_WIPE,
PA_OPENING_CURSOR,
PA_CLOSING_CURSOR,
};
uint8_t indiceAnimacion = 0; // Para llevar la cuenta de la animación actual
const uint8_t MAX_ANIMACIONES = sizeof(animaciones) / sizeof(animaciones[0]);
void setup() {
letrero.begin();
letrero.setIntensity(5); // Intensidad de los leds (0-15)
letrero.displayClear(); // Limpia la pantalla al iniciar
// Muestra el primer mensaje con la animación inicial
letrero.displayText(mensaje.c_str(), PA_CENTER, velocidad_animacion, 0, animaciones[indiceAnimacion], animaciones[indiceAnimacion]);
}
void loop() {
// Esta función debe ser llamada repetidamente para que la animación funcione
if (letrero.displayAnimate()) {
// La animación ha terminado, preparamos la siguiente
actualizar_velocidad();
// Cambia a la siguiente animación en la lista
indiceAnimacion++;
if (indiceAnimacion >= MAX_ANIMACIONES) {
indiceAnimacion = 0; // Vuelve al inicio de la lista
}
// Muestra el mensaje de nuevo con la nueva animación
letrero.setTextEffect(animaciones[indiceAnimacion], animaciones[indiceAnimacion]);
letrero.displayReset(); // Reinicia para mostrar el siguiente ciclo
}
}
// Función para actualizar la velocidad si se recibe un nuevo valor
void actualizar_velocidad() {
if (proximo_mensaje.length() > 0) {
vel = proximo_mensaje;
float valor;
valor = vel.toFloat();
// Mapea un valor (ej: 0-100) a una velocidad de animación (ej: 200 lento, 25 rápido)
velSlide = map(valor, 0, 100, 200, 25);
velocidad_animacion = velSlide; // Actualiza la velocidad real
letrero.setSpeed(velocidad_animacion);
proximo_mensaje = "";
}
}