#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 8
#define CLK_PIN 4
#define DATA_PIN 2
#define CS_PIN 3
// 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);
// ----- ¡AQUÍ ESTÁ LA MAGIA DEL RETO! -----
// 1. EDITA TU LISTA DE MENSAJES AQUÍ
const char* mensajes[] = {
"Jerry Digital!",
"El azul",
"De moda",
"De Carrizal",
"Dj Patro",
};
// 2. ASIGNA UN EFECTO DE ENTRADA PARA CADA MENSAJE (en el mismo orden)
textEffect_t efectosEntrada[] = {
PA_SCROLL_LEFT,
PA_SCROLL_UP,
PA_SCROLL_DOWN,
PA_OPENING_CURSOR,
PA_SPRITE,
};
// 3. ASIGNA UN EFECTO DE SALIDA PARA CADA MENSAJE (en el mismo orden)
textEffect_t efectosSalida[] = {
PA_MESH,
PA_FADE,
PA_WIPE,
PA_CLOSING_CURSOR,
PA_SLICE,
};
// --- Variables de control ---
// Calcula automáticamente cuántos mensajes hay en la lista
const uint8_t MAX_MENSAJES = sizeof(mensajes) / sizeof(mensajes[0]);
uint8_t indiceMensajeActual = 0; // Para llevar la cuenta de qué mensaje mostrar
int velocidad_animacion = 75; // Velocidad de la animación (menor es más rápido)
String vel;
long velSlide = 100;
String proximo_mensaje = "";
void setup() {
letrero.begin();
letrero.setIntensity(5); // Intensidad de los leds (0-15)
letrero.displayClear(); // Limpia la pantalla al iniciar
// Muestra el PRIMER mensaje de la lista con su efecto correspondiente
letrero.displayText(mensajes[indiceMensajeActual], PA_CENTER, velocidad_animacion, 0, efectosEntrada[indiceMensajeActual], efectosSalida[indiceMensajeActual]);
}
void loop() {
// Esta función debe ser llamada repetidamente para que la animación funcione
if (letrero.displayAnimate()) {
// La animación del mensaje actual ha terminado
actualizar_velocidad();
// Avanzamos al siguiente mensaje de la lista
indiceMensajeActual++;
if (indiceMensajeActual >= MAX_MENSAJES) {
indiceMensajeActual = 0; // Si llegamos al final, volvemos al principio
}
// Prepara y muestra el NUEVO mensaje con sus efectos correspondientes
letrero.displayText(mensajes[indiceMensajeActual], PA_CENTER, velocidad_animacion, 0, efectosEntrada[indiceMensajeActual], efectosSalida[indiceMensajeActual]);
}
}
// Función para actualizar la velocidad (sin cambios)
void actualizar_velocidad() {
if (proximo_mensaje.length() > 0) {
vel = proximo_mensaje;
float valor;
valor = vel.toFloat();
velSlide = map(valor, 0, 100, 200, 25);
velocidad_animacion = velSlide;
letrero.setSpeed(velocidad_animacion);
proximo_mensaje = "";
}
}