23. Texto en matriz P10 - angelmicelti/Aprendiz-de-Maker GitHub Wiki

Un papá de la comunidad educativa de mi IES me proporcionó una matriz P10, y me dijo: "toma, a ver si eres capaz de echarla a andar, porque yo no he podido".

Pues nada, otro reto. Ni idea de qué es una matriz P10, pero inmediatamente, el SAV, me empuja a buscar.

FOTO DEL PANEL:

MatrizP10

VÍDEO FUENTE:

Para mi exploración he utilizado los vídeos de NetAndino sobre el tema:

Vídeo 1 sobre el panel P10

Vídeo 2 sobre el panel P10


Para la ExpoVilladiego de 2025 hice una pequeña programación del panel a partir de los ejemplos citados en los dos vídeos anteriores, instalando las librerías indicadas.

Posteriormente, modificando los ejemplos base, obtuve un sencillo programa en el que:

  • Se dibujan varios círculos aleatorios.
  • Se introduce un texto animado con la leyenda "ExpoVilladiego 2025" hacia la izquierda.

Las modificaciones de los ejemplos las realicé a través de ChatGPT, en este hilo

FOTO DEL PANEL EN FUNCIONAMIENTO

MatrizP10

Código empleado

#include <SPI.h>
#include <Fuente.h>
#include <TimerOne.h>
#include <fuente16x10.h>

#define NRO_FILAS_DISPLAY 1
#define NRO_COLUMNAS_DISPLAY 1
#define PANEL_WIDTH 32 // ancho total del panel en píxeles

DMD dmd(NRO_FILAS_DISPLAY, NRO_COLUMNAS_DISPLAY);

void ScanDMD() {
  dmd.scanDisplayBySPI();
}

void setup() {
  Timer1.initialize(3000);
  Timer1.attachInterrupt(ScanDMD);

  dmd.clearScreen(true);
  dmd.selectFont(fuente16x10);
  Serial.begin(115200);
}

void loop() {
  // 1. Mostrar círculos aleatorios entre 3 y 10
  int numCirculos = random(3, 11);
  for (int i = 0; i < numCirculos; i++) {
    int cx = random(5, 27);
    int cy = random(5, 12);
    int r = random(1, 7);
    for (int j = 0; j < r; j++) {
      dmd.clearScreen(true);
      dmd.drawCircle(cx, cy, j, GRAPHICS_NORMAL);
      delay(100);
    }
    delay(500);
  }

  delay(1000); // Pausa antes del scroll

  // 2. Scroll del mensaje una sola pasada completa
  const char* MSG = "ExpoVilladiego 2025";
  int charWidth = 8; // aprox ancho caracter en fuente16x10
  int textWidth = strlen(MSG) * charWidth;

  int startX = PANEL_WIDTH;                   // empezar justo fuera a la derecha
  int totalSteps = textWidth + PANEL_WIDTH;  // pasos para que el texto salga completamente a la izquierda

  dmd.clearScreen(true);
  dmd.drawMarquee(MSG, strlen(MSG), startX, 0);

  for (int step = 0; step < totalSteps; step++) {
    dmd.stepMarquee(-1, 0);
    delay(75);
  }

  dmd.clearScreen(true);
  delay(1000); // pausa antes de repetir el loop
}

VÍDEO

Vídeo 1 sobre el panel P10

⚠️ **GitHub.com Fallback** ⚠️