diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 18fe5c864..15bfd5ef4 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -755,6 +755,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 110 #define ABS_PREHEAT_FAN_SPEED 0 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 7fede1bba..5416243f1 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -4248,30 +4248,27 @@ inline void gcode_M42() { /** * M75: Start print timer */ -inline void gcode_M75() { - print_job_timer.start(); -} +inline void gcode_M75() { print_job_timer.start(); } /** * M76: Pause print timer */ -inline void gcode_M76() { - print_job_timer.pause(); -} +inline void gcode_M76() { print_job_timer.pause(); } /** * M77: Stop print timer */ -inline void gcode_M77() { - print_job_timer.stop(); -} +inline void gcode_M77() { print_job_timer.stop(); } #if ENABLED(PRINTCOUNTER) /*+ * M78: Show print statistics */ inline void gcode_M78() { - print_job_timer.showStats(); + // "M78 S78" will reset the statistics + if (code_seen('S') && code_value_short() == 78) + print_job_timer.initStats(); + else print_job_timer.showStats(); } #endif @@ -4290,21 +4287,23 @@ inline void gcode_M104() { thermalManager.setTargetHotend(temp == 0.0 ? 0.0 : temp + duplicate_extruder_temp_offset, 1); #endif - /** - * We use half EXTRUDE_MINTEMP here to allow nozzles to be put into hot - * stand by mode, for instance in a dual extruder setup, without affecting - * the running print timer. - */ - if (temp <= (EXTRUDE_MINTEMP)/2) { - print_job_timer.stop(); - LCD_MESSAGEPGM(WELCOME_MSG); - } - /** - * We do not check if the timer is already running because this check will - * be done for us inside the Stopwatch::start() method thus a running timer - * will not restart. - */ - else print_job_timer.start(); + #if ENABLED(PRINTJOB_TIMER_AUTOSTART) + /** + * We use half EXTRUDE_MINTEMP here to allow nozzles to be put into hot + * stand by mode, for instance in a dual extruder setup, without affecting + * the running print timer. + */ + if (temp <= (EXTRUDE_MINTEMP)/2) { + print_job_timer.stop(); + LCD_MESSAGEPGM(WELCOME_MSG); + } + /** + * We do not check if the timer is already running because this check will + * be done for us inside the Stopwatch::start() method thus a running timer + * will not restart. + */ + else print_job_timer.start(); + #endif if (temp > thermalManager.degHotend(target_extruder)) LCD_MESSAGEPGM(MSG_HEATING); } @@ -4443,21 +4442,23 @@ inline void gcode_M109() { thermalManager.setTargetHotend(temp == 0.0 ? 0.0 : temp + duplicate_extruder_temp_offset, 1); #endif - /** - * We use half EXTRUDE_MINTEMP here to allow nozzles to be put into hot - * stand by mode, for instance in a dual extruder setup, without affecting - * the running print timer. - */ - if (temp <= (EXTRUDE_MINTEMP)/2) { - print_job_timer.stop(); - LCD_MESSAGEPGM(WELCOME_MSG); - } - /** - * We do not check if the timer is already running because this check will - * be done for us inside the Stopwatch::start() method thus a running timer - * will not restart. - */ - else print_job_timer.start(); + #if ENABLED(PRINTJOB_TIMER_AUTOSTART) + /** + * We use half EXTRUDE_MINTEMP here to allow nozzles to be put into hot + * stand by mode, for instance in a dual extruder setup, without affecting + * the running print timer. + */ + if (temp <= (EXTRUDE_MINTEMP)/2) { + print_job_timer.stop(); + LCD_MESSAGEPGM(WELCOME_MSG); + } + /** + * We do not check if the timer is already running because this check will + * be done for us inside the Stopwatch::start() method thus a running timer + * will not restart. + */ + else print_job_timer.start(); + #endif if (temp > thermalManager.degHotend(target_extruder)) LCD_MESSAGEPGM(MSG_HEATING); } diff --git a/Marlin/example_configurations/Felix/Configuration.h b/Marlin/example_configurations/Felix/Configuration.h index 778ca60cb..36c1239da 100644 --- a/Marlin/example_configurations/Felix/Configuration.h +++ b/Marlin/example_configurations/Felix/Configuration.h @@ -738,6 +738,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/Hephestos/Configuration.h b/Marlin/example_configurations/Hephestos/Configuration.h index b8ea32ced..d5b6ed0b2 100644 --- a/Marlin/example_configurations/Hephestos/Configuration.h +++ b/Marlin/example_configurations/Hephestos/Configuration.h @@ -747,6 +747,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the lo #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/Hephestos_2/Configuration.h b/Marlin/example_configurations/Hephestos_2/Configuration.h index eaf556f3e..7b9849bac 100644 --- a/Marlin/example_configurations/Hephestos_2/Configuration.h +++ b/Marlin/example_configurations/Hephestos_2/Configuration.h @@ -749,6 +749,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 110 #define ABS_PREHEAT_FAN_SPEED 0 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/K8200/Configuration.h b/Marlin/example_configurations/K8200/Configuration.h index 822287717..e99d4dd01 100644 --- a/Marlin/example_configurations/K8200/Configuration.h +++ b/Marlin/example_configurations/K8200/Configuration.h @@ -772,6 +772,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 60 // K8200: set back to 110 if you have an upgraded heatbed power supply #define ABS_PREHEAT_FAN_SPEED 0 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h b/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h index 341097e0d..2d3067c6d 100644 --- a/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h +++ b/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h @@ -755,6 +755,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 110 #define ABS_PREHEAT_FAN_SPEED 0 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/RigidBot/Configuration.h b/Marlin/example_configurations/RigidBot/Configuration.h index ee68c80ad..d1522c3fa 100644 --- a/Marlin/example_configurations/RigidBot/Configuration.h +++ b/Marlin/example_configurations/RigidBot/Configuration.h @@ -750,6 +750,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 110 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/SCARA/Configuration.h b/Marlin/example_configurations/SCARA/Configuration.h index 4394e5eab..13c484ac1 100644 --- a/Marlin/example_configurations/SCARA/Configuration.h +++ b/Marlin/example_configurations/SCARA/Configuration.h @@ -763,6 +763,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/TAZ4/Configuration.h b/Marlin/example_configurations/TAZ4/Configuration.h index 39c71527e..0da46efdd 100644 --- a/Marlin/example_configurations/TAZ4/Configuration.h +++ b/Marlin/example_configurations/TAZ4/Configuration.h @@ -776,6 +776,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 110 #define ABS_PREHEAT_FAN_SPEED 0 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/WITBOX/Configuration.h b/Marlin/example_configurations/WITBOX/Configuration.h index 1c48ddd18..ae59c5d15 100644 --- a/Marlin/example_configurations/WITBOX/Configuration.h +++ b/Marlin/example_configurations/WITBOX/Configuration.h @@ -747,6 +747,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the lo #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/adafruit/ST7565/Configuration.h b/Marlin/example_configurations/adafruit/ST7565/Configuration.h index a115f3c13..638ce4032 100644 --- a/Marlin/example_configurations/adafruit/ST7565/Configuration.h +++ b/Marlin/example_configurations/adafruit/ST7565/Configuration.h @@ -755,6 +755,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 110 #define ABS_PREHEAT_FAN_SPEED 0 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/delta/biv2.5/Configuration.h b/Marlin/example_configurations/delta/biv2.5/Configuration.h index adc1b0d73..4560cd8b9 100644 --- a/Marlin/example_configurations/delta/biv2.5/Configuration.h +++ b/Marlin/example_configurations/delta/biv2.5/Configuration.h @@ -884,6 +884,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the lo #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/delta/generic/Configuration.h b/Marlin/example_configurations/delta/generic/Configuration.h index 954854eb4..e2e9227b3 100644 --- a/Marlin/example_configurations/delta/generic/Configuration.h +++ b/Marlin/example_configurations/delta/generic/Configuration.h @@ -884,6 +884,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the lo #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration.h b/Marlin/example_configurations/delta/kossel_mini/Configuration.h index c4f3ffcd9..4729e39be 100644 --- a/Marlin/example_configurations/delta/kossel_mini/Configuration.h +++ b/Marlin/example_configurations/delta/kossel_mini/Configuration.h @@ -888,6 +888,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/delta/kossel_pro/Configuration.h b/Marlin/example_configurations/delta/kossel_pro/Configuration.h index c977b47c3..a37bced78 100644 --- a/Marlin/example_configurations/delta/kossel_pro/Configuration.h +++ b/Marlin/example_configurations/delta/kossel_pro/Configuration.h @@ -881,6 +881,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/delta/kossel_xl/Configuration.h b/Marlin/example_configurations/delta/kossel_xl/Configuration.h index e2d277fa4..c23b546ab 100644 --- a/Marlin/example_configurations/delta/kossel_xl/Configuration.h +++ b/Marlin/example_configurations/delta/kossel_xl/Configuration.h @@ -889,6 +889,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/makibox/Configuration.h b/Marlin/example_configurations/makibox/Configuration.h index 7da67eb86..db34f1ab0 100644 --- a/Marlin/example_configurations/makibox/Configuration.h +++ b/Marlin/example_configurations/makibox/Configuration.h @@ -758,6 +758,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration.h b/Marlin/example_configurations/tvrrug/Round2/Configuration.h index 83b64f70d..9e85c919d 100644 --- a/Marlin/example_configurations/tvrrug/Round2/Configuration.h +++ b/Marlin/example_configurations/tvrrug/Round2/Configuration.h @@ -749,6 +749,19 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the lo #define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 +// +// Print job timer +// +// Enable this option to automatically start and stop the +// print job timer when M104 and M109 commands are received. +// +// In all cases the timer can be started and stopped using +// the following commands: +// +// - M75 - Start the print job timer +// - M76 - Pause the print job timer +// - M77 - Stop the print job timer +#define PRINTJOB_TIMER_AUTOSTART // // Print Counter diff --git a/Marlin/printcounter.cpp b/Marlin/printcounter.cpp index 945b4b09d..158356217 100644 --- a/Marlin/printcounter.cpp +++ b/Marlin/printcounter.cpp @@ -149,7 +149,9 @@ void PrintCounter::stop() { PrintCounter::debug(PSTR("stop")); #endif + if (!this->isRunning()) return; super::stop(); + this->data.finishedPrints++; this->data.printTime += this->deltaDuration(); this->saveStats();