Eso creo que es lo que debería hacer, pero se queda fijo ese tiempo que es el transcurrido y no alterna entre transcurrido y restante.
Como ves también, el porcentaje lo marca con la barra de la parte inferior, no lo marca con numero, no se si se podría poner para que lo marcara con numero también.
La verdad es que la implementación para esa pantalla está bastante descuidada y tiene algunas cosas extrañas, como la resolución de 480x320 que le asigna, cuando en todas las especificaciones que veo se indica que esa pantalla tiene 320x240: como parece que la información se muestra bien, quizá sea errónea esta última.
Con ese tipo de pantalla configurada, al seleccionar la interfaz COLOR_UI se habilita la implementación incluida en el archivo \Marlin\src\lcd\tft\ui_480x320.cpp y en ella se han olvidado de incluir el manejo del porcentaje en número y del tiempo restante. de ahí que no se muestre nada referido a ellos en la pantalla aunque se habiliten en la configuración.
Voy a estudiarlo un poco en detalle a ver si no es muy laborioso corregirlo.
Muchas gracias @ Simemart me estás ayudando mucho, la otra interfaz lvgl tiene muchísimos fallos y yo no sé programar como para corregirlos, en esta interfaz tiene muchos menos, funciona todo por el momento menos esos pequeños detalles que no influyen en el funcionamiento.
He hecho una modificación para que se visualice el tiempo restante, pero tendrás que probarla.
En el archivo Marlin\src\lcd\tft\ui_480x320.cpp, hay que cambiar las lineas de la 331 a la 334 por las siguientes:
Código: char buffer1[14];
char buffer2[14];
duration_t elapsed = print_job_timer.duration();
duration_t resto = ui.get_remaining_time();
elapsed.toDigital(buffer1);
resto.toDigital(buffer2);
tft.canvas((TFT_WIDTH - 256) / 2, y, 256, 29);
tft.set_background(COLOR_BACKGROUND);
tft_string.set("|<: ");
tft_string.add(buffer1);
tft_string.add(" >|: ");
tft_string.add(buffer2);
tft.add_text(tft_string.center(256), 0, COLOR_PRINT_TIME, tft_string);
Si funciona, después me meteré con el porcentaje en número.
14-07-2024, 07:35 AM
(Última modificación: 14-07-2024, 07:50 AM por Luisdjnas.)
Me da el siguiente error al compilar.
He reemplazado de la linea 331 a la linea 338 y compila bien, lo he metido y salen dos tiempos como puedes ver pero el tiempo restante baja de minuto en minuto, pero ya salen dos dos.
Perdona, las líneas a cambiar son de la 331 a la 344, debes borrar las que aparecen en esa foto de la 345 a la 349, ambas incluidas.
Comprueba que en los comandos M73 el tiempo transcurrido tenga los segundos y no solo minutos: si eso está bien, entonces es un problema con el formato que devuelve la función del tiempo transcurrido, que tendré que investigar más a fondo.
Si al ver que las lineas eran parecidas las he sustituido todas en el archivo original son de la 331 a la 344 y he compilado sin problemas. correcto en el gcode solo marca minutos así que será por eso, no se si en orcaslicer se puede cambiar eso pero bueno que minuto arriba minuto abajo no importa tampoco.
Eres un maquina, te tenían que contratar los creadores de marlin jeje muchas gracias
Y esto sería para el porcentaje numérico del progreso, sustituyendo a las líneas de la 348 a la 359:
Código: const uint8_t progress = ui.get_progress_percent();
tft.canvas(4, y, TFT_WIDTH - 28, 9);
tft.set_background(COLOR_PROGRESS_BG);
tft.add_rectangle(0, 0, TFT_WIDTH - 28, 9, COLOR_PROGRESS_FRAME);
if (progress)
tft.add_bar(1, 1, ((TFT_WIDTH - 30) * progress) / 100, 7, COLOR_PROGRESS_BAR);
tft.canvas((TFT_WIDTH - 28), y, (TFT_WIDTH - 1), 29);
tft.set_background(COLOR_BACKGROUND);
tft_string.set(pcttostrpctrj(progress));
tft_string.add('%');
tft.add_text(0, 0, COLOR_PROGRESS_BAR , tft_string);
Quizá haya que ajustar algo las posiciones.
14-07-2024, 12:31 PM
(Última modificación: 14-07-2024, 12:35 PM por Luisdjnas.)
He cambiado las líneas dejándolas así hasta la 361, compila bien
Pero en la pantalla ahora no se ve la linea de progreso y están los valores del porcentaje donde los ves ahora en color.azul oscuro.
El % está pegado a la izquierda y el número a la derecha por si no se aprecia bien en la foto.
Igual sería mejor ponerlo en medio del tiempo transcurrido y tiempo restante separando un poco estos entre si y ponerlo en el mismo color o ponerlo en verde como los de arriba
14-07-2024, 12:44 PM
(Última modificación: 14-07-2024, 12:57 PM por Simemart.)
No funciona lo que intenté, tiene que ser en un solo canvas.
Sí, quizá mejor junto a los tiempos.
Vuelve atrás el cambio anterior y cambia las siguientes líneas (vamos a quitar las dobles comillas o nos echarán los perros los expertos en C++):
Código: tft_string.set('|<: ');
tft_string.add(buffer1);
tft_string.add(' >|: ');
tft_string.add(buffer2);
tft_string.add(' ');
tft_string.add(pcttostrpctrj(porcentaje));
tft_string.add('%');
tft.add_text(tft_string.center(256), 0, COLOR_PRINT_TIME, tft_string);
A ver si cabe todo en ese espacio de la pantalla.
A ver si lo he puesto como decías porque me sale error.
14-07-2024, 01:57 PM
(Última modificación: 14-07-2024, 01:59 PM por Simemart.)
Otro olvido. Hay que poner esta línea antes de las anteriores:
const uint8_t porcentaje = ui.get_progress_percent();
14-07-2024, 02:18 PM
(Última modificación: 14-07-2024, 02:19 PM por Luisdjnas.)
Creo que algo estoy haciendo mal.
Igual es que estamos definiendo dos veces lo del porcentaje porque veo líneas similares en el siguiente bloque. Hablo sin saber eee
Nunca me decido a estudiar bien C++ y de ahí estás meteduras de pata: la comilla simple es para caracteres individuales, las cadenas de hay que especificarlas con doble comilla.
Cámbialo asi:
Código: const uint8_t porcentaje = ui.get_progress_percent();
tft.canvas((TFT_WIDTH - 256) / 2, y, 256, 29);
tft.set_background(COLOR_BACKGROUND);
tft_string.set("|<: ");
tft_string.add(buffer1);
tft_string.add(" >|: ");
tft_string.add(buffer2);
tft_string.add(" ");
tft_string.add(pcttostrpctrj(porcentaje));
tft_string.add('%');
tft.add_text(tft_string.center(256), 0, COLOR_PRINT_TIME, tft_string);
A ver si de está ya va.
14-07-2024, 02:45 PM
(Última modificación: 14-07-2024, 02:46 PM por Luisdjnas.)
Compilado y con buena pinta.
Lo único aver puesto el porcentaje en medio de los dos igual quedaba mejor pero da lo mismo se ve muy bien
Para no haberte decidido a estudiar c++ sabes un montón jajajjaa
Ponerlo en medio es sencillo, solo hay que cambiar cómo se intercalan los valores.
Para ponerlo en medio habría que hacer esto:
Código: const uint8_t porcentaje = ui.get_progress_percent();
tft.canvas((TFT_WIDTH - 256) / 2, y, 256, 29);
tft.set_background(COLOR_BACKGROUND);
tft_string.set("|<: ");
tft_string.add(buffer1);
tft_string.add(" ");
tft_string.add(pcttostrpctrj(porcentaje));
tft_string.add('%');
tft_string.add(" >|: ");
tft_string.add(buffer2);
tft.add_text(tft_string.center(256), 0, COLOR_PRINT_TIME, tft_string);
14-07-2024, 03:09 PM
(Última modificación: 14-07-2024, 03:11 PM por Luisdjnas.)
Mmm casi pero no jajaja
que si no como se queda con el porcentaje a la derecha esta bien no te preocupes @ Simemart esta perfecto muchísimas gracias.
voy a tener que indagar un poco en el tema de programación c++ pero creo que es muy dificil
14-07-2024, 03:12 PM
(Última modificación: 14-07-2024, 03:17 PM por Simemart.)
Ah, parece que la función que convierte en cadena el progreso ya devuelve el signo %, solo que antes se salía del espacio fijado: elimina la línea tft_string.add('%');, a ver si cabe todo solo con eso, sino habrá que darle más espacio.
Perfecto creo que así queda perfecto, como te gusta más con el % en medio o a la derecha?
14-07-2024, 03:21 PM
(Última modificación: 14-07-2024, 03:21 PM por Simemart.)
Así no está mal, pero me temo que cuando el porcentaje tenga dos o tres cifras no va a caber en el espacio que he reservado, habría que ampliarlo un poco: es el valor 256 (son los pixeles que tiene de ancho la zona donde se escriben esos valores) y habrá que ampliarlo un poco, pero sin que se solape con los iconos.
|