Print timer now stops when it sees the last extruder temperature being shutdown
This commit is contained in:
		
							parent
							
								
									b7928a000a
								
							
						
					
					
						commit
						986b508ff7
					
				| @ -3833,6 +3833,19 @@ inline void gcode_M104() { | ||||
|         setTargetHotend1(temp == 0.0 ? 0.0 : temp + duplicate_extruder_temp_offset); | ||||
|     #endif | ||||
|   } | ||||
| 
 | ||||
|   // Detect if a print job has finished.
 | ||||
|   // When the target temperature for all extruders is zero then we must have
 | ||||
|   // finished printing.
 | ||||
|   if( print_job_start_ms != 0 ) { | ||||
|     bool all_extruders_cooling = true; | ||||
|     for (int i = 0; i < EXTRUDERS; i++) if( degTargetHotend(i) > 0 ) { | ||||
|       all_extruders_cooling = false; | ||||
|       break; | ||||
|     } | ||||
| 
 | ||||
|     if( all_extruders_cooling ) print_job_stop_ms = millis(); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| #if HAS_TEMP_0 || HAS_TEMP_BED || ENABLED(HEATER_0_USES_MAX6675) | ||||
| @ -3944,16 +3957,15 @@ inline void gcode_M105() { | ||||
|  *       Rxxx Wait for extruder(s) to reach temperature. Waits when heating and cooling. | ||||
|  */ | ||||
| inline void gcode_M109() { | ||||
|   float temp; | ||||
|   bool no_wait_for_cooling = true; | ||||
| 
 | ||||
|   if (setTargetedHotend(109)) return; | ||||
|   if (marlin_debug_flags & DEBUG_DRYRUN) return; | ||||
| 
 | ||||
|   LCD_MESSAGEPGM(MSG_HEATING); | ||||
| 
 | ||||
|   no_wait_for_cooling = code_seen('S'); | ||||
|   if (no_wait_for_cooling || code_seen('R')) { | ||||
|     float temp = code_value(); | ||||
|     temp = code_value(); | ||||
|     setTargetHotend(temp, target_extruder); | ||||
|     #if ENABLED(DUAL_X_CARRIAGE) | ||||
|       if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && target_extruder == 0) | ||||
| @ -3961,6 +3973,9 @@ inline void gcode_M109() { | ||||
|     #endif | ||||
|   } | ||||
| 
 | ||||
|   // Only makes sense to show the heating message if we're in fact heating.
 | ||||
|   if( temp > 0 ) LCD_MESSAGEPGM(MSG_HEATING); | ||||
| 
 | ||||
|   #if ENABLED(AUTOTEMP) | ||||
|     autotemp_enabled = code_seen('F'); | ||||
|     if (autotemp_enabled) autotemp_factor = code_value(); | ||||
| @ -3968,6 +3983,22 @@ inline void gcode_M109() { | ||||
|     if (code_seen('B')) autotemp_max = code_value(); | ||||
|   #endif | ||||
| 
 | ||||
|   // Detect if a print job has finished.
 | ||||
|   // When the target temperature for all extruders is zero then we must have
 | ||||
|   // finished printing.
 | ||||
|   if( print_job_start_ms != 0 ) { | ||||
|     bool all_extruders_cooling = true; | ||||
|     for (int i = 0; i < EXTRUDERS; i++) if( degTargetHotend(i) > 0 ) { | ||||
|       all_extruders_cooling = false; | ||||
|       break; | ||||
|     } | ||||
| 
 | ||||
|     if( all_extruders_cooling ) { | ||||
|       print_job_stop_ms = millis(); | ||||
|       LCD_MESSAGEPGM(WELCOME_MSG); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   // Exit if the temperature is above target and not waiting for cooling
 | ||||
|   if (no_wait_for_cooling && !isHeatingHotend(target_extruder)) return; | ||||
| 
 | ||||
|  | ||||
| @ -306,7 +306,8 @@ static void lcd_implementation_status_screen() { | ||||
| 
 | ||||
|     u8g.setPrintPos(80,48); | ||||
|     if (print_job_start_ms != 0) { | ||||
|       uint16_t time = (millis() - print_job_start_ms) / 60000; | ||||
|       uint16_t time = ((print_job_stop_ms > print_job_start_ms) | ||||
|                        ? print_job_stop_ms : millis()) / 60000 - print_job_start_ms / 60000; | ||||
|       lcd_print(itostr2(time/60)); | ||||
|       lcd_print(':'); | ||||
|       lcd_print(itostr2(time%60)); | ||||
|  | ||||
| @ -1111,6 +1111,9 @@ void disable_all_heaters() { | ||||
|   for (int i = 0; i < EXTRUDERS; i++) setTargetHotend(0, i); | ||||
|   setTargetBed(0); | ||||
| 
 | ||||
|   // If all heaters go down then for sure our print job has stopped
 | ||||
|   if( print_job_start_ms != 0 ) print_job_stop_ms = millis(); | ||||
| 
 | ||||
|   #define DISABLE_HEATER(NR) { \ | ||||
|     target_temperature[NR] = 0; \ | ||||
|     soft_pwm[NR] = 0; \ | ||||
|  | ||||
| @ -137,7 +137,7 @@ extern volatile uint8_t buttons;  //an extended version of the last checked butt | ||||
|   #define LCD_I2C_PIN_D5  5 | ||||
|   #define LCD_I2C_PIN_D6  6 | ||||
|   #define LCD_I2C_PIN_D7  7 | ||||
|    | ||||
| 
 | ||||
|   #include <Wire.h> | ||||
|   #include <LCD.h> | ||||
|   #include <LiquidCrystal_I2C.h> | ||||
| @ -632,7 +632,7 @@ static void lcd_implementation_status_screen() { | ||||
|         else { | ||||
|           if (!axis_homed[X_AXIS]) | ||||
|             lcd_printPGM(PSTR("?")); | ||||
|           else  | ||||
|           else | ||||
|             #if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING) | ||||
|               if (!axis_known_position[X_AXIS]) | ||||
|                 lcd_printPGM(PSTR(" ")); | ||||
| @ -649,7 +649,7 @@ static void lcd_implementation_status_screen() { | ||||
|         else { | ||||
|           if (!axis_homed[Y_AXIS]) | ||||
|             lcd_printPGM(PSTR("?")); | ||||
|           else  | ||||
|           else | ||||
|             #if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING) | ||||
|               if (!axis_known_position[Y_AXIS]) | ||||
|                 lcd_printPGM(PSTR(" ")); | ||||
| @ -669,7 +669,7 @@ static void lcd_implementation_status_screen() { | ||||
|     else { | ||||
|       if (!axis_homed[Z_AXIS]) | ||||
|         lcd_printPGM(PSTR("?")); | ||||
|       else  | ||||
|       else | ||||
|         #if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING) | ||||
|           if (!axis_known_position[Z_AXIS]) | ||||
|             lcd_printPGM(PSTR(" ")); | ||||
| @ -707,7 +707,8 @@ static void lcd_implementation_status_screen() { | ||||
|     lcd.setCursor(LCD_WIDTH - 6, 2); | ||||
|     lcd.print(LCD_STR_CLOCK[0]); | ||||
|     if (print_job_start_ms != 0) { | ||||
|       uint16_t time = millis() / 60000 - print_job_start_ms / 60000; | ||||
|       uint16_t time = ((print_job_stop_ms > print_job_start_ms) | ||||
|                        ? print_job_stop_ms : millis()) / 60000 - print_job_start_ms / 60000; | ||||
|       lcd.print(itostr2(time / 60)); | ||||
|       lcd.print(':'); | ||||
|       lcd.print(itostr2(time % 60)); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user