/*
// Número TOTAL de módulos 8x8 en el letrero (para wokwi: 32x8 = 4 modulos)
// Para 32x8: 4 módulos de ancho (1) x 1 modulos de alto = 4
// Para 32x16: 4 módulos de ancho (1) x 2 modulos de alto = 8
// Para 64x16: 8 módulos de ancho (2) x 2 modulos de alto = 16
// --- Pines para Hardware SPI en XIAO ESP32-C3 ---
// Los pines de DATA (MOSI (D10)) y CLK (SCK(D8)) son fijos y manejados por la librería SPI.
// Solo necesitamos definir el pin CS (Chip Select). (D1=GPIO3)
*/
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define NUM_OF_MATRIX 8
#define CS_PIN 3
MD_Parola letrero = MD_Parola(HARDWARE_TYPE, CS_PIN, NUM_OF_MATRIX);
// 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_OPENING_CURSOR,
//PA_PRINT,
//PA_SCROLL_LEFT,
};
// 3. ASIGNA UN EFECTO DE SALIDA PARA CADA MENSAJE (en el mismo orden)
textEffect_t efectosSalida[] = {
//PA_SCROLL_RIGHT,
//PA_MESH,
//PA_FADE,
//PA_WIPE,
//PA_GROW_UP,
PA_GROW_DOWN,
//PA_CLOSING_CURSOR,
//PA_OPENING_CURSOR,
//PA_SCROLL_DOWN,
//PA_SCROLL_UP,
//PA_OPENING,
//PA_CLOSING,
//PA_SCAN_HORIZ,
//PA_SCAN_VERT,
//PA_SLICE,
//PA_BLINDS,
//PA_DISSOLVE,
//PA_RANDOM,
//PA_SPRITE,
//PA_NO_EFFECT,
};
// --- 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 = 100; // Velocidad de la animación (menor es más rápido)
String vel;
long velSlide = 100;
String proximo_mensaje = "";
void setup() {
SPI.begin();
letrero.begin();
letrero.setIntensity(5); // Intensidad de los leds (0-15)
letrero.displayClear(); // Limpia la pantalla al iniciar
// Muestra el primer mensaje directamente desde el arreglo
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
}
// Muestra el siguiente mensaje directamente desde el arreglo
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 = "";
}
}
Loading
xiao-esp32-c3
xiao-esp32-c3