mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2025-03-22 22:26:18 +00:00
🧑💻 Clarify G28 R / R0
This commit is contained in:
parent
cbbcc01b47
commit
6ebbfa832c
1 changed files with 29 additions and 6 deletions
|
@ -408,17 +408,40 @@ void GcodeSuite::G28() {
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Z may home first, e.g., when homing away from the bed
|
||||||
TERN_(HOME_Z_FIRST, if (doZ) homeaxis(Z_AXIS));
|
TERN_(HOME_Z_FIRST, if (doZ) homeaxis(Z_AXIS));
|
||||||
|
|
||||||
|
// 'R' to specify a specific raise. 'R0' indicates no raise, e.g., for recovery.resume
|
||||||
|
// When 'R0' is used, there should already be adequate clearance, e.g., from homing Z to max.
|
||||||
const bool seenR = parser.seenval('R');
|
const bool seenR = parser.seenval('R');
|
||||||
const float z_homing_height = seenR ? parser.value_linear_units() : Z_HOMING_HEIGHT;
|
|
||||||
|
|
||||||
if (z_homing_height && (seenR || NUM_AXIS_GANG(doX, || doY, || TERN0(Z_SAFE_HOMING, doZ), || doI, || doJ, || doK, || doU, || doV, || doW))) {
|
// Use raise given by 'R' or Z_HOMING_HEIGHT (above the probe trigger point)
|
||||||
// Raise Z before homing any other axes and z is not already high enough (never lower z)
|
float z_homing_height = seenR ? parser.value_linear_units() : Z_HOMING_HEIGHT;
|
||||||
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Raise Z (before homing) by ", z_homing_height);
|
|
||||||
do_z_clearance(z_homing_height);
|
// Check for any lateral motion that might require clearance
|
||||||
TERN_(BLTOUCH, bltouch.init());
|
const bool may_skate = seenR || NUM_AXIS_GANG(doX, || doY, || TERN0(Z_SAFE_HOMING, doZ), || doI, || doJ, || doK, || doU, || doV, || doW);
|
||||||
|
|
||||||
|
if (seenR && z_homing_height == 0) {
|
||||||
|
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("R0 = No Z raise");
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
bool with_probe = ENABLED(HOMING_Z_WITH_PROBE);
|
||||||
|
// Raise above the current Z (which should be synced in the planner)
|
||||||
|
// The "height" for Z is a coordinate. But if Z is not trusted/homed make it relative.
|
||||||
|
if (seenR || !TERN(HOME_AFTER_DEACTIVATE, axis_is_trusted, axis_was_homed)(Z_AXIS)) {
|
||||||
|
z_homing_height += current_position.z;
|
||||||
|
with_probe = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (may_skate) {
|
||||||
|
// Apply Z clearance before doing any lateral motion
|
||||||
|
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Raise Z before homing:");
|
||||||
|
do_z_clearance(z_homing_height, with_probe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init BLTouch ahead of any lateral motion, even if not homing with the probe
|
||||||
|
TERN_(BLTOUCH, if (may_skate) bltouch.init());
|
||||||
|
|
||||||
// Diagonal move first if both are homing
|
// Diagonal move first if both are homing
|
||||||
TERN_(QUICK_HOME, if (doX && doY) quick_home_xy());
|
TERN_(QUICK_HOME, if (doX && doY) quick_home_xy());
|
||||||
|
|
Loading…
Add table
Reference in a new issue