Merge pull request #3021 from 3d-gussner/PFW-910
PFW-910 Add remaining time to change/pause/user interaction to LCD Info screen
This commit is contained in:
commit
2874e704f5
@ -338,6 +338,11 @@ const unsigned int dropsegments=5; //everything with less than this number of st
|
||||
// Control heater 0 and heater 1 in parallel.
|
||||
//#define HEATERS_PARALLEL
|
||||
|
||||
//LCD status clock interval timer to switch between
|
||||
// remaining print time
|
||||
// and time to change/pause/interaction
|
||||
#define CLOCK_INTERVAL_TIME 5
|
||||
|
||||
//===========================================================================
|
||||
//=============================Buffers ============================
|
||||
//===========================================================================
|
||||
|
@ -366,6 +366,8 @@ extern uint8_t print_percent_done_normal;
|
||||
extern uint16_t print_time_remaining_normal;
|
||||
extern uint8_t print_percent_done_silent;
|
||||
extern uint16_t print_time_remaining_silent;
|
||||
extern uint16_t print_time_to_change_normal;
|
||||
extern uint16_t print_time_to_change_silent;
|
||||
|
||||
#define PRINT_TIME_REMAINING_INIT 0xffff
|
||||
|
||||
@ -437,7 +439,6 @@ extern void cancel_saved_printing();
|
||||
|
||||
|
||||
//estimated time to end of the print
|
||||
extern uint16_t print_time_remaining();
|
||||
extern uint8_t calc_percent_done();
|
||||
|
||||
|
||||
|
@ -316,6 +316,8 @@ uint8_t print_percent_done_normal = PRINT_PERCENT_DONE_INIT;
|
||||
uint16_t print_time_remaining_normal = PRINT_TIME_REMAINING_INIT; //estimated remaining print time in minutes
|
||||
uint8_t print_percent_done_silent = PRINT_PERCENT_DONE_INIT;
|
||||
uint16_t print_time_remaining_silent = PRINT_TIME_REMAINING_INIT; //estimated remaining print time in minutes
|
||||
uint16_t print_time_to_change_normal = PRINT_TIME_REMAINING_INIT; //estimated remaining time to next change in minutes
|
||||
uint16_t print_time_to_change_silent = PRINT_TIME_REMAINING_INIT; //estimated remaining time to next change in minutes
|
||||
|
||||
uint32_t IP_address = 0;
|
||||
|
||||
@ -6391,31 +6393,37 @@ Sigma_Exit:
|
||||
#endif // Z_PROBE_REPEATABILITY_TEST
|
||||
#endif // ENABLE_AUTO_BED_LEVELING
|
||||
|
||||
/*!
|
||||
### M73 - Set/get print progress <a href="https://reprap.org/wiki/G-code#M73:_Set.2FGet_build_percentage">M73: Set/Get build percentage</a>
|
||||
#### Usage
|
||||
/*!
|
||||
### M73 - Set/get print progress <a href="https://reprap.org/wiki/G-code#M73:_Set.2FGet_build_percentage">M73: Set/Get build percentage</a>
|
||||
#### Usage
|
||||
|
||||
M73 [ P | R | Q | S ]
|
||||
|
||||
#### Parameters
|
||||
- `P` - Percent in normal mode
|
||||
- `R` - Time remaining in normal mode
|
||||
- `Q` - Percent in silent mode
|
||||
- `S` - Time in silent mode
|
||||
*/
|
||||
case 73: //M73 show percent done and time remaining
|
||||
if(code_seen('P')) print_percent_done_normal = code_value();
|
||||
if(code_seen('R')) print_time_remaining_normal = code_value();
|
||||
if(code_seen('Q')) print_percent_done_silent = code_value();
|
||||
if(code_seen('S')) print_time_remaining_silent = code_value();
|
||||
M73 [ P | R | Q | S | C | D ]
|
||||
|
||||
{
|
||||
const char* _msg_mode_done_remain = _N("%S MODE: Percent done: %d; print time remaining in mins: %d\n");
|
||||
printf_P(_msg_mode_done_remain, _N("NORMAL"), int(print_percent_done_normal), print_time_remaining_normal);
|
||||
printf_P(_msg_mode_done_remain, _N("SILENT"), int(print_percent_done_silent), print_time_remaining_silent);
|
||||
}
|
||||
break;
|
||||
#### Parameters
|
||||
- `P` - Percent in normal mode
|
||||
- `R` - Time remaining in normal mode
|
||||
- `Q` - Percent in silent mode
|
||||
- `S` - Time in silent mode
|
||||
- `C` - Time to change/pause/user interaction in normal mode
|
||||
- `D` - Time to change/pause/user interaction in silent mode
|
||||
*/
|
||||
//!@todo update RepRap Gcode wiki
|
||||
case 73: //M73 show percent done, time remaining and time to change/pause
|
||||
{
|
||||
if(code_seen('P')) print_percent_done_normal = code_value();
|
||||
if(code_seen('R')) print_time_remaining_normal = code_value();
|
||||
if(code_seen('Q')) print_percent_done_silent = code_value();
|
||||
if(code_seen('S')) print_time_remaining_silent = code_value();
|
||||
if(code_seen('C')) print_time_to_change_normal = code_value();
|
||||
if(code_seen('D')) print_time_to_change_silent = code_value();
|
||||
|
||||
{
|
||||
const char* _msg_mode_done_remain = _N("%S MODE: Percent done: %d; print time remaining in mins: %d; Change in mins: %d\n");
|
||||
printf_P(_msg_mode_done_remain, _N("NORMAL"), int(print_percent_done_normal), print_time_remaining_normal, print_time_to_change_normal);
|
||||
printf_P(_msg_mode_done_remain, _N("SILENT"), int(print_percent_done_silent), print_time_remaining_silent, print_time_to_change_silent);
|
||||
}
|
||||
break;
|
||||
}
|
||||
/*!
|
||||
### M104 - Set hotend temperature <a href="https://reprap.org/wiki/G-code#M104:_Set_Extruder_Temperature">M104: Set Extruder Temperature</a>
|
||||
#### Usage
|
||||
@ -11653,46 +11661,40 @@ void print_mesh_bed_leveling_table()
|
||||
SERIAL_ECHOLN();
|
||||
}
|
||||
|
||||
uint16_t print_time_remaining() {
|
||||
uint16_t print_t = PRINT_TIME_REMAINING_INIT;
|
||||
#ifdef TMC2130
|
||||
if (SilentModeMenu == SILENT_MODE_OFF) print_t = print_time_remaining_normal;
|
||||
else print_t = print_time_remaining_silent;
|
||||
#else
|
||||
print_t = print_time_remaining_normal;
|
||||
#endif //TMC2130
|
||||
if ((print_t != PRINT_TIME_REMAINING_INIT) && (feedmultiply != 0)) print_t = 100ul * print_t / feedmultiply;
|
||||
return print_t;
|
||||
}
|
||||
|
||||
uint8_t calc_percent_done()
|
||||
{
|
||||
//in case that we have information from M73 gcode return percentage counted by slicer, else return percentage counted as byte_printed/filesize
|
||||
uint8_t percent_done = 0;
|
||||
//in case that we have information from M73 gcode return percentage counted by slicer, else return percentage counted as byte_printed/filesize
|
||||
uint8_t percent_done = 0;
|
||||
#ifdef TMC2130
|
||||
if (SilentModeMenu == SILENT_MODE_OFF && print_percent_done_normal <= 100) {
|
||||
percent_done = print_percent_done_normal;
|
||||
}
|
||||
else if (print_percent_done_silent <= 100) {
|
||||
percent_done = print_percent_done_silent;
|
||||
}
|
||||
if (SilentModeMenu == SILENT_MODE_OFF && print_percent_done_normal <= 100)
|
||||
{
|
||||
percent_done = print_percent_done_normal;
|
||||
}
|
||||
else if (print_percent_done_silent <= 100)
|
||||
{
|
||||
percent_done = print_percent_done_silent;
|
||||
}
|
||||
#else
|
||||
if (print_percent_done_normal <= 100) {
|
||||
percent_done = print_percent_done_normal;
|
||||
}
|
||||
if (print_percent_done_normal <= 100)
|
||||
{
|
||||
percent_done = print_percent_done_normal;
|
||||
}
|
||||
#endif //TMC2130
|
||||
else {
|
||||
percent_done = card.percentDone();
|
||||
}
|
||||
return percent_done;
|
||||
else
|
||||
{
|
||||
percent_done = card.percentDone();
|
||||
}
|
||||
return percent_done;
|
||||
}
|
||||
|
||||
static void print_time_remaining_init()
|
||||
{
|
||||
print_time_remaining_normal = PRINT_TIME_REMAINING_INIT;
|
||||
print_time_remaining_silent = PRINT_TIME_REMAINING_INIT;
|
||||
print_percent_done_normal = PRINT_PERCENT_DONE_INIT;
|
||||
print_percent_done_silent = PRINT_PERCENT_DONE_INIT;
|
||||
print_time_remaining_normal = PRINT_TIME_REMAINING_INIT;
|
||||
print_percent_done_normal = PRINT_PERCENT_DONE_INIT;
|
||||
print_time_remaining_silent = PRINT_TIME_REMAINING_INIT;
|
||||
print_percent_done_silent = PRINT_PERCENT_DONE_INIT;
|
||||
print_time_to_change_normal = PRINT_TIME_REMAINING_INIT;
|
||||
print_time_to_change_silent = PRINT_TIME_REMAINING_INIT;
|
||||
}
|
||||
|
||||
void load_filament_final_feed()
|
||||
|
@ -57,7 +57,7 @@
|
||||
|
||||
int scrollstuff = 0;
|
||||
char longFilenameOLD[LONG_FILENAME_LENGTH];
|
||||
|
||||
int clock_interval = 0;
|
||||
|
||||
static void lcd_sd_updir();
|
||||
static void lcd_mesh_bed_leveling_settings();
|
||||
@ -671,31 +671,85 @@ void lcdui_print_cmd_diag(void)
|
||||
// Print time (8 chars total)
|
||||
void lcdui_print_time(void)
|
||||
{
|
||||
//if remaining print time estimation is available print it else print elapsed time
|
||||
uint16_t print_t = 0;
|
||||
if (print_time_remaining_normal != PRINT_TIME_REMAINING_INIT)
|
||||
print_t = print_time_remaining();
|
||||
else if(starttime != 0)
|
||||
print_t = _millis() / 60000 - starttime / 60000;
|
||||
int chars = 0;
|
||||
if ((PRINTER_ACTIVE) && ((print_time_remaining_normal != PRINT_TIME_REMAINING_INIT) || (starttime != 0)))
|
||||
{
|
||||
char suff = ' ';
|
||||
char suff_doubt = ' ';
|
||||
if (print_time_remaining_normal != PRINT_TIME_REMAINING_INIT)
|
||||
{
|
||||
suff = 'R';
|
||||
if (feedmultiply != 100)
|
||||
suff_doubt = '?';
|
||||
}
|
||||
if (print_t < 6000) //time<100h
|
||||
chars = lcd_printf_P(_N("%c%02u:%02u%c%c"), LCD_STR_CLOCK[0], print_t / 60, print_t % 60, suff, suff_doubt);
|
||||
else //time>=100h
|
||||
chars = lcd_printf_P(_N("%c%3uh %c%c"), LCD_STR_CLOCK[0], print_t / 60, suff, suff_doubt);
|
||||
}
|
||||
else
|
||||
chars = lcd_printf_P(_N("%c--:-- "), LCD_STR_CLOCK[0]);
|
||||
lcd_space(8 - chars);
|
||||
//if remaining print time estimation is available print it else print elapsed time
|
||||
int chars = 0;
|
||||
if ((PRINTER_ACTIVE) && (starttime != 0))
|
||||
{
|
||||
uint16_t print_t = 0;
|
||||
uint16_t print_tr = 0;
|
||||
uint16_t print_tc = 0;
|
||||
char suff = ' ';
|
||||
char suff_doubt = ' ';
|
||||
|
||||
#ifdef TMC2130
|
||||
if (SilentModeMenu != SILENT_MODE_OFF)
|
||||
{
|
||||
if (print_time_remaining_silent != PRINT_TIME_REMAINING_INIT)
|
||||
{
|
||||
print_tr = print_time_remaining_silent;
|
||||
}
|
||||
//#ifdef CLOCK_INTERVAL_TIME
|
||||
if (print_time_to_change_silent != PRINT_TIME_REMAINING_INIT)
|
||||
{
|
||||
print_tc = print_time_to_change_silent;
|
||||
}
|
||||
//#endif //CLOCK_INTERVAL_TIME
|
||||
}
|
||||
else
|
||||
{
|
||||
#endif //TMC2130
|
||||
if (print_time_remaining_normal != PRINT_TIME_REMAINING_INIT)
|
||||
{
|
||||
print_tr = print_time_remaining_normal;
|
||||
}
|
||||
//#ifdef CLOCK_INTERVAL_TIME
|
||||
if (print_time_to_change_normal != PRINT_TIME_REMAINING_INIT)
|
||||
{
|
||||
print_tc = print_time_to_change_normal;
|
||||
}
|
||||
//#endif //CLOCK_INTERVAL_TIME
|
||||
#ifdef TMC2130
|
||||
}
|
||||
#endif //TMC2130
|
||||
|
||||
//#ifdef CLOCK_INTERVAL_TIME
|
||||
if (clock_interval == CLOCK_INTERVAL_TIME*2)
|
||||
{
|
||||
clock_interval = 0;
|
||||
}
|
||||
clock_interval++;
|
||||
|
||||
if (print_tc != 0 && clock_interval > CLOCK_INTERVAL_TIME)
|
||||
{
|
||||
print_t = print_tc;
|
||||
suff = 'C';
|
||||
}
|
||||
else
|
||||
//#endif //CLOCK_INTERVAL_TIME
|
||||
if (print_tr != 0)
|
||||
{
|
||||
print_t = print_tr;
|
||||
suff = 'R';
|
||||
}
|
||||
else
|
||||
{
|
||||
print_t = _millis() / 60000 - starttime / 60000;
|
||||
}
|
||||
|
||||
if (feedmultiply != 100 && (print_t == print_tr || print_t == print_tc))
|
||||
{
|
||||
suff_doubt = '?';
|
||||
print_t = 100ul * print_t / feedmultiply;
|
||||
}
|
||||
|
||||
if (print_t < 6000) //time<100h
|
||||
chars = lcd_printf_P(_N("%c%02u:%02u%c%c"), LCD_STR_CLOCK[0], print_t / 60, print_t % 60, suff, suff_doubt);
|
||||
else //time>=100h
|
||||
chars = lcd_printf_P(_N("%c%3uh %c%c"), LCD_STR_CLOCK[0], print_t / 60, suff, suff_doubt);
|
||||
}
|
||||
else
|
||||
chars = lcd_printf_P(_N("%c--:-- "), LCD_STR_CLOCK[0]);
|
||||
lcd_space(8 - chars);
|
||||
}
|
||||
|
||||
//Print status line on status screen
|
||||
|
Loading…
Reference in New Issue
Block a user