Buen día. Estuve intentando combinar funciones de la librería DMD de freetronics con la librería DMD2. Específicamente quería agregarle a la segunda " drawMarquee" y "stepMarquee" que están en la primera, ya que con éstas funciones se puede hacer un scrolling de texto a buena velocidad, aunque haya varios paneles conectados y en la DMD2 no existen. ¿Alguien hizo ésto? Apreciaría , de ser así, que pudieran compartirlo, ya que mis conocimientos para realizar ésto no me alcanzan. Desde ya agradezco sus opiniones.
Y porque no pusiste enlace de ambas librerías (usa etiquetas)?
Perdón Surbyte, no se bien como se maneja ésto. Ahi va el intento.
Las funciones que intento pasar de DMD a DMD2 son: drawMarquee y stepMarquee que trabajan en conjunto para hacer scroll de caracteres.
Gracias
Los enlaces se colocan de esta manera, esta perfectamente explicado en las normas, como dijo surbyte utiliza las etiquetas para la próxima vez
Como toda librería que reemplaza la anterior debe haber comandos nuevos que tmb contengan los que nombras tal vez con otros nombres.
Inspeccionando DMD2 me encuentro con estos procedimientos
// Scrolling & marquee support
void scrollY(int scrollBy);
void scrollX(int scrollBy);
void marqueeScrollX(int scrollBy);
void marqueeScrollY(int scrollBy);
Estos se ajustan tal vez a lo que buscas
//Draw a scrolling string
void drawMarquee( const char* bChars, byte length, int left, int top);
//Move the maquee accross by amount
boolean stepMarquee( int amountX, int amountY);
El primero dibuja un String al que luego se le hace scrolling
El segundo no lo entiendo bien.
Gracias Surbyte por tu respuesta. Ya conozco esas funciones del DMD2 y las he probado. El tema es que funcionan bien con un panel, pero al conectar dos y más paneles encadenados se hace muy lento el scroll ( cuantos más paneles, más lento ) . Las funciones de la librería DMD ( drawMarquee y stepMarquee) funcionan perfectamente independientemente de la cantidad de paneles conectados.
Con respecto a stepMarquee es la función que realiza el scroll mientras que drawMarquee es la que la define ( string a mostrar, longitud y ubicacion del texto en coordenadas X e Y ). Por otro lado la librería DMD2 tiene otras ventajas sobre la primera que también la hacen interesante ( manejo del brillo del panel , cuadros de texto independientes, etc) . Por eso quería ver de combinar ambas para optimizar las funciones. Gracias por tus respuestas.
I have a problem with the DMD library, with any example code compiles but does not visualize anything, but with the DMD2 library it works but it does not have the functions that I need???
@aroba0611 debes escribir en español en el foro en español, o crea un nuevo hilo en el foro en inglés Programming Questions
Saludos y gracias por tu respuesta y sugerencia Surbyte, como les comentaba mi problema es el siguiente:
Tengo un problema con la biblioteca DMD, con cualquier código de ejemplo compila y se graba en el la tarjeta y todo , pero no visualiza nada en los módulos P10, pero en cambio con la biblioteca DMD2 funciona bien y visualiza y todo pero esta no tiene las funciones que necesito o no hay ejemplos apropiados con esta versión, alguna sugerencia??, gracias.
Les comento que estoy trabajando con un Mega 2560.
La sugerencia es que con paciencia mezcles lo bueno de la DMD2 con las funciones de la DMD y terminas teniendo una version DMD2 Mejorada.
Si no sabes vamos viendolo pero por favor documenta bien los problemas con ejemplos pq los demas:
- las librerías son las del post#12 no?
- explicas claramente que quieres de la DMD que no tiene la DMD2 y asi vamos viendo como solucionar las cosas.
Estuve investigando y ya logre que funcione bien mi tarjeta mega 2560 con la librería DMD, solo hay que hacer pequeñas modificaciones y funciona bien, yo adjunto el link para referencia:
http://forum.freetronics.com/viewtopic.php?f=26&t=5600.
Ahora que ya todo funciona yo quiero combinar las librerías DMD y DMD2 para el siguiente propósito:
lo que necesito es que el texto fijo esté a la izquierda y el scrollig text este a la derecha o viceversa
imagen de ejemplo: https://www.dropbox.com/s/4hwbv374l7lb8i2/REQUERIMIENTO.jpg?dl=0
Para lograr esto yo tengo entendido que debo combinar algunas partes de las dos librerías pero, necesito su ayuda para realizar esto.
Yo estuve investigando y encontré algo similar a lo que yo necesito:
En el Archivo: DMD.cpp se añade esta función nueva:
boolean DMD::stepSplitMarquee(int topRow, int bottomRow)"Es una Modificación de la stepMarquee"
Esto para la DMD.h por su puesto:
boolean stepSplitMarquee(int topRow, int bottomRow);
probé realizando el cambio e incrementando esta función, pero solamente conseguí que el texto fijo este arriba y el rscrolling text en la parte inferior y viceversa, pero no es lo que necesito de acuerdo a lo que explique anteriormente:
[Dropbox - File Deleted](http://"Dropbox - File Deleted QUE" encontre.jpg?dl=0)
Según lo investigado veo que hay que combinar funciones de las 2 librerías, por favor si me pueden ayudar con esto.
también hice una combinación agregando el split en el dmd, pero opte por hacer esto con el mima librería y se lo utilizo para los buses y cada vez que reseteas cambia el texto.
/* para buses marzo 2019 ver1.0*/
#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include <EEPROM.h>
#include "MyBigFont.h"
// CONN
// ╔══╗
// 9 OE ║ ╬ ║A 6
// GND ║ ╬ ║B 7
// GND ║ ╬ ║
// GND║║ ╬ ║CLK 13
// GND║║ ╬ ║SCLK 8
// GND ║ ╬ ║R 11
// GND ║ ╬ ║
// GND ║ ╬ ║
// ╚══╝
/*2 #define A 6
4 #define B 7
10 #define SCLK 8
1 #define OE 9 //PWM
12 #define R 11 //MOSI
8 #define CLK 13*/
#define DISPLAYS_ACROSS 4
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS,DISPLAYS_DOWN);
const char *text1 = "BUENOS AIRES - AV LARCO - UPAO - OV GRAU - AV AMERICA - HERMELINDA - OV MOCHICA - M AREVALO";
const char *text2 = "BUENOS AIRES - OV LARCO - UCV - OV PAPAL - MANSICHE - PLAZA MALL - RENIEC - SAN ISIDRO - LAURELES - M AREVALO";
const char *text3 = "BUENOS AIRES - AV LARCO - UPAO - OV GRAU - AV AMERICA - HERMELINDA - TUPAC AMARU - POSTES - M AREVALO";
const char *text4 = "BUENOS AIRES - AV LARCO - UPAO - OV GRAU - AV AMERICA - HERMELINDA - TUPAC AMARU - POSTES - SENATI - MILAGRO - REPOSO";
const char *text5 = "AV AMERICA - HERMELINDA - TUPAC AMARU - POSTES - SENATI - MILAGRO - LUZ DEL SOL";
const char *text6 = "BUENOS AIRES - UCV - OV PAPAL - LA CORTE - PLAZA MALL - RENIEC - OV MOCHICA - POSTES - SENATI - MILAGRO";
const char *text7 = "EMPRESA DE TRANSPORTE NUEVO CALIFORNIA AL SERVICIO DEL PUBLICO TRUJILLANO";
byte dat_prev;
byte dat_act=0;
void ScanDMD() {
dmd.scanDisplayBySPI();
}
void setup() {
dat_act=EEPROM.read(0);
dat_prev=dat_act+1;
if(dat_prev>=7){dat_prev=0;}
EEPROM.write(0,dat_prev);
Timer1.initialize(3000);
Timer1.pwm(PIN_DMD_nOE, 250);
Timer1.attachInterrupt(ScanDMD);
dmd.selectFont(MyBigFont);
dmd.clearScreen(true);
/*Serial.begin(57600);
Serial.print(dat_act);
Serial.print(" ");
Serial.println(dat_prev);*/
}
void loop() {
if (dat_act==0){
dmd.clearScreen(true);
dmd.drawString(2,0,"BC",2,GRAPHICS_NORMAL);
dmd.drawMarquee(text1,strlen(text1),24,0);
long start=millis();
long timer=start;
while(true){
if ((timer+25) < millis()) {
dmd.stepSplitMarquee(0,15,24);
timer=millis();
}
}
}
if (dat_act==1){
dmd.clearScreen(true);
dmd.drawString(3,0,"V",1,GRAPHICS_NORMAL);
dmd.drawMarquee(text2,strlen(text2),16,0);
long start=millis();
long timer=start;
while(true){
if ((timer+25) < millis()) {
dmd.stepSplitMarquee(0,15,16);
timer=millis();
}
}
}
if (dat_act==2){
dmd.clearScreen(true);
dmd.drawString(3,0,"B1",2,GRAPHICS_NORMAL);
dmd.drawMarquee(text3,strlen(text3),24,0);
long start=millis();
long timer=start;
while(true){
if ((timer+25) < millis()) {
dmd.stepSplitMarquee(0,15,24);
timer=millis();
}
}
}
if (dat_act==3){
dmd.clearScreen(true);
dmd.drawString(3,0,"A",1,GRAPHICS_NORMAL);
dmd.drawMarquee(text4,strlen(text4),16,0);
long start=millis();
long timer=start;
while(true){
if ((timer+25) < millis()) {
dmd.stepSplitMarquee(0,15,16);
timer=millis();
}
}
}
if (dat_act==4){
dmd.clearScreen(true);
dmd.drawString(3,0,"D",1,GRAPHICS_NORMAL);
dmd.drawMarquee(text5,strlen(text5),16,0);
long start=millis();
long timer=start;
while(true){
if ((timer+25) < millis()) {
dmd.stepSplitMarquee(0,15,16);
timer=millis();
}
}
}
if (dat_act==5){
dmd.clearScreen(true);
dmd.drawString(3,0,"C",1,GRAPHICS_NORMAL);
dmd.drawMarquee(text6,strlen(text6),16,0);
long start=millis();
long timer=start;
while(true){
if ((timer+25) < millis()) {
dmd.stepSplitMarquee(0,15,16);
timer=millis();
}
}
}
if (dat_act==6){
dmd.clearScreen(true);
dmd.drawMarquee(text7,strlen(text7),(32*DISPLAYS_ACROSS)-1,0);
long start=millis();
long timer=start;
while(true){
if ((timer+25) < millis()) {
dmd.stepMarquee(-1,0);
timer=millis();
}
}
}
}
Hace más de un año estuve intentando combinar ambas librerías DMD y DMD2 debido a que tienen distintas funciones y me interesaba utilizarlas en un mismo scketch. Luego de intentar varias cosas indagué en el foro de Freetronics que son los creadores de dichas librerías , llegando a la conclusión de que es imposible combinarlas ya que la primera trabaja por interrupciones en el Timer1 y la segunda no. Definitivamente son incompatibles. Me resigné a usar una u otra dependiendo de los resultados que quería obtener y adaptándome a una de ellas en particular. Mi recomendación, según mi experiencia, es usar la DMD para los textos scrolleados, sobre todo si se usa más de un panel P10, y para el resto de las funciones usar DMD2 que posee más posibilidades gráficas. El desplazamiento de textos en ésta última se hace más lento cuanto más paneles haya conectados.