#include <SoftwareSerial.h>
#include <MD_MAX72xx.h>
// ---------- CONFIGURACIÓN PARA MATRIZ 32x8 ----------
// Tipo de módulo. FC16_HW es el más común para matrices 32x8 preensambladas.
// Si no funciona, prueba con FC16_HW.
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
// Número de módulos 8x8. Para una matriz 32x8, este valor debe ser 4.
#define NUM_OF_MATRIX 4
#define CLK_PIN 4
#define DATA_PIN 2
#define CS_PIN 3
// Inicializa el objeto para el letrero
MD_MAX72XX letrero = MD_MAX72XX(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 ms_delay = 75; // Delay inicial del scroll
String vel;
long velSlide = 100;
String proximo_mensaje = "";
void setup() {
letrero.begin();
letrero.control(MD_MAX72XX::INTENSITY, 5); // Intensidad de los leds (0-15)
letrero.control(MD_MAX72XX::UPDATE, false);
}
void loop() {
slide_text();
actualizar_mensaje();
}
void actualizar_mensaje(){
if (proximo_mensaje.length() > 0) {
vel = proximo_mensaje;
float valor;
valor = vel.toFloat();
// Mapea un valor (ej: 0-100) a una velocidad de delay (ej: 200ms lento, 5ms rápido)
velSlide = map(valor, 0, 100, 200, 5);
ms_delay = velSlide; // Actualiza el delay real
proximo_mensaje = "";
}
}
void slide_text(){
int col = 0;
int last_pos;
bool completo = false;
letrero.clear();
while (completo == false){
last_pos = printText(col, mensaje);
delay(ms_delay);
col++;
// La librería calcula el ancho total con letrero.getColumnCount()
if (last_pos > (int)letrero.getColumnCount())
completo = true;
}
}
int printText(int pos, const String text){
int w;
for (int i = 0; i < text.length(); i++){
w = letrero.setChar(pos, text[i]);
pos = pos - w;
letrero.setColumn(pos, 800000000);
pos = pos - 1;
if (pos < 0)
break;
}
letrero.update();
return pos;
}