Move z safe homing to its own function
This commit is contained in:
		
							parent
							
								
									c84b14c77a
								
							
						
					
					
						commit
						b4034915f8
					
				| @ -2749,6 +2749,57 @@ inline void gcode_G4() { | ||||
| 
 | ||||
| #endif // DELTA
 | ||||
| 
 | ||||
| #if ENABLED(Z_SAFE_HOMING) | ||||
| 
 | ||||
|   inline void home_z_safely() { | ||||
| 
 | ||||
|     // Disallow Z homing if X or Y are unknown
 | ||||
|     if (!axis_known_position[X_AXIS] || !axis_known_position[Y_AXIS]) { | ||||
|       LCD_MESSAGEPGM(MSG_ERR_Z_HOMING); | ||||
|       SERIAL_ECHO_START; | ||||
|       SERIAL_ECHOLNPGM(MSG_ERR_Z_HOMING); | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     #if ENABLED(DEBUG_LEVELING_FEATURE) | ||||
|       if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("Z_SAFE_HOMING >>>"); | ||||
|     #endif | ||||
| 
 | ||||
|     SYNC_PLAN_POSITION_KINEMATIC(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Move the Z probe (or just the nozzle) to the safe homing point | ||||
|      */ | ||||
|     float cpx = Z_SAFE_HOMING_X_POINT, cpy = Z_SAFE_HOMING_Y_POINT; | ||||
|     #if HAS_BED_PROBE | ||||
|       cpx -= X_PROBE_OFFSET_FROM_EXTRUDER; | ||||
|       cpy -= Y_PROBE_OFFSET_FROM_EXTRUDER; | ||||
|     #endif | ||||
| 
 | ||||
|     #if ENABLED(DEBUG_LEVELING_FEATURE) | ||||
|       if (DEBUGGING(LEVELING)) { | ||||
|         SERIAL_ECHOPAIR("Z_SAFE_HOMING X:", cpx); | ||||
|         SERIAL_ECHOLNPAIR(" Y:", cpy); | ||||
|       } | ||||
|     #endif | ||||
| 
 | ||||
|     if (cpx >= X_MIN_POS && cpx <= X_MAX_POS && cpy >= Y_MIN_POS && cpy <= Y_MAX_POS) { | ||||
|       do_blocking_move_to_xy(LOGICAL_X_POSITION(destination[X_AXIS]), LOGICAL_Y_POSITION(destination[Y_AXIS])); | ||||
|       HOMEAXIS(Z); | ||||
|     } | ||||
|     else { | ||||
|       LCD_MESSAGEPGM(MSG_ZPROBE_OUT); | ||||
|       SERIAL_ECHO_START; | ||||
|       SERIAL_ECHOLNPGM(MSG_ZPROBE_OUT); | ||||
|     } | ||||
| 
 | ||||
|     #if ENABLED(DEBUG_LEVELING_FEATURE) | ||||
|       if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("<<< Z_SAFE_HOMING"); | ||||
|     #endif | ||||
|   } | ||||
| 
 | ||||
| #endif // Z_SAFE_HOMING
 | ||||
| 
 | ||||
| /**
 | ||||
|  * G28: Home all axes according to settings | ||||
|  * | ||||
| @ -2824,7 +2875,6 @@ inline void gcode_G28() { | ||||
|   #endif | ||||
|   endstops.enable(true); // Enable endstops for next homing move
 | ||||
| 
 | ||||
| 
 | ||||
|   #if ENABLED(DELTA) | ||||
| 
 | ||||
|     home_delta(); | ||||
| @ -2915,81 +2965,16 @@ inline void gcode_G28() { | ||||
| 
 | ||||
|     // Home Z last if homing towards the bed
 | ||||
|     #if Z_HOME_DIR < 0 | ||||
| 
 | ||||
|       if (home_all_axis || homeZ) { | ||||
| 
 | ||||
|         #if ENABLED(Z_SAFE_HOMING) | ||||
| 
 | ||||
|           #if ENABLED(DEBUG_LEVELING_FEATURE) | ||||
|             if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("> Z_SAFE_HOMING >>>"); | ||||
|           #endif | ||||
| 
 | ||||
|           if (home_all_axis) { | ||||
| 
 | ||||
|             /**
 | ||||
|              * At this point we already have Z at Z_HOMING_HEIGHT height | ||||
|              * No need to move Z any more as this height should already be safe | ||||
|              * enough to reach Z_SAFE_HOMING XY positions. | ||||
|              * Just make sure the planner is in sync. | ||||
|              */ | ||||
|             SYNC_PLAN_POSITION_KINEMATIC(); | ||||
| 
 | ||||
|             /**
 | ||||
|              * Move the Z probe (or just the nozzle) to the safe homing point | ||||
|              */ | ||||
|             destination[X_AXIS] = round(Z_SAFE_HOMING_X_POINT - (X_PROBE_OFFSET_FROM_EXTRUDER)); | ||||
|             destination[Y_AXIS] = round(Z_SAFE_HOMING_Y_POINT - (Y_PROBE_OFFSET_FROM_EXTRUDER)); | ||||
|             destination[Z_AXIS] = current_position[Z_AXIS]; // Z is already at the right height
 | ||||
| 
 | ||||
|             #if ENABLED(DEBUG_LEVELING_FEATURE) | ||||
|               if (DEBUGGING(LEVELING)) DEBUG_POS("> Z_SAFE_HOMING > home_all_axis", destination); | ||||
|             #endif | ||||
| 
 | ||||
|             // Move in the XY plane
 | ||||
|             do_blocking_move_to_xy(destination[X_AXIS], destination[Y_AXIS]); | ||||
|           } | ||||
| 
 | ||||
|           // Let's see if X and Y are homed
 | ||||
|           if (axis_unhomed_error(true, true, false)) return; | ||||
| 
 | ||||
|           /**
 | ||||
|            * Make sure the Z probe is within the physical limits | ||||
|            * NOTE: This doesn't necessarily ensure the Z probe is also | ||||
|            * within the bed! | ||||
|            */ | ||||
|           float cpx = RAW_CURRENT_POSITION(X_AXIS), cpy = RAW_CURRENT_POSITION(Y_AXIS); | ||||
|           if (   cpx >= X_MIN_POS - (X_PROBE_OFFSET_FROM_EXTRUDER) | ||||
|               && cpx <= X_MAX_POS - (X_PROBE_OFFSET_FROM_EXTRUDER) | ||||
|               && cpy >= Y_MIN_POS - (Y_PROBE_OFFSET_FROM_EXTRUDER) | ||||
|               && cpy <= Y_MAX_POS - (Y_PROBE_OFFSET_FROM_EXTRUDER)) { | ||||
| 
 | ||||
|             // Home the Z axis
 | ||||
|             HOMEAXIS(Z); | ||||
|           } | ||||
|           else { | ||||
|             LCD_MESSAGEPGM(MSG_ZPROBE_OUT); | ||||
|             SERIAL_ECHO_START; | ||||
|             SERIAL_ECHOLNPGM(MSG_ZPROBE_OUT); | ||||
|           } | ||||
| 
 | ||||
|           #if ENABLED(DEBUG_LEVELING_FEATURE) | ||||
|             if (DEBUGGING(LEVELING)) { | ||||
|               SERIAL_ECHOLNPGM("<<< Z_SAFE_HOMING"); | ||||
|             } | ||||
|           #endif | ||||
| 
 | ||||
|         #else // !Z_SAFE_HOMING
 | ||||
| 
 | ||||
|           home_z_safely(); | ||||
|         #else | ||||
|           HOMEAXIS(Z); | ||||
| 
 | ||||
|         #endif // !Z_SAFE_HOMING
 | ||||
| 
 | ||||
|         #endif | ||||
|         #if ENABLED(DEBUG_LEVELING_FEATURE) | ||||
|           if (DEBUGGING(LEVELING)) DEBUG_POS("> (home_all_axis || homeZ) > final", current_position); | ||||
|         #endif | ||||
| 
 | ||||
|       } // home_all_axis || homeZ
 | ||||
| 
 | ||||
|     #endif // Z_HOME_DIR < 0
 | ||||
| 
 | ||||
|     SYNC_PLAN_POSITION_KINEMATIC(); | ||||
|  | ||||
| @ -408,6 +408,9 @@ | ||||
| #ifndef MSG_ERR_MINTEMP_BED | ||||
|   #define MSG_ERR_MINTEMP_BED                 "Err: MINTEMP BED" | ||||
| #endif | ||||
| #ifndef MSG_ERR_Z_HOMING | ||||
|   #define MSG_ERR_Z_HOMING                    "G28 Z Forbidden" | ||||
| #endif | ||||
| #ifndef MSG_HALTED | ||||
|   #define MSG_HALTED                          "PRINTER HALTED" | ||||
| #endif | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user