Fix G28 homing Y with X
- Fixed a typo causing G28 to home incorrectly - Added documentation to G28 - Added homeXYZ bools to neaten the code - Added a note about home_offsets being questionable
This commit is contained in:
parent
a22efc5f11
commit
e8ae51bfe3
@ -1703,7 +1703,25 @@ inline void gcode_G4() {
|
||||
#endif //FWRETRACT
|
||||
|
||||
/**
|
||||
* G28: Home all axes, one at a time
|
||||
* G28: Home all axes according to settings
|
||||
*
|
||||
* Parameters
|
||||
*
|
||||
* None Home to all axes with no parameters.
|
||||
* With QUICK_HOME enabled XY will home together, then Z.
|
||||
*
|
||||
* Cartesian parameters
|
||||
*
|
||||
* X Home to the X endstop
|
||||
* Y Home to the Y endstop
|
||||
* Z Home to the Z endstop
|
||||
*
|
||||
* If numbers are included with XYZ set the position as with G92
|
||||
* Currently adds the home_offset, which may be wrong and removed soon.
|
||||
*
|
||||
* Xn Home X, setting X to n + home_offset[X_AXIS]
|
||||
* Yn Home Y, setting Y to n + home_offset[Y_AXIS]
|
||||
* Zn Home Z, setting Z to n + home_offset[Z_AXIS]
|
||||
*/
|
||||
inline void gcode_G28() {
|
||||
#ifdef ENABLE_AUTO_BED_LEVELING
|
||||
@ -1726,7 +1744,7 @@ inline void gcode_G28() {
|
||||
|
||||
enable_endstops(true);
|
||||
|
||||
for (int i = X_AXIS; i < NUM_AXIS; i++) destination[i] = current_position[i];
|
||||
for (int i = 0; i < NUM_AXIS; i++) destination[i] = current_position[i]; // includes E_AXIS
|
||||
|
||||
feedrate = 0.0;
|
||||
|
||||
@ -1757,23 +1775,25 @@ inline void gcode_G28() {
|
||||
|
||||
#else // NOT DELTA
|
||||
|
||||
home_all_axis = !(code_seen(axis_codes[X_AXIS]) || code_seen(axis_codes[Y_AXIS]) || code_seen(axis_codes[Z_AXIS]));
|
||||
bool homeX = code_seen(axis_codes[X_AXIS]),
|
||||
homeY = code_seen(axis_codes[Y_AXIS]),
|
||||
homeZ = code_seen(axis_codes[Z_AXIS]);
|
||||
|
||||
home_all_axis = !homeX && !homeY && !homeZ; // No parameters means home all axes
|
||||
|
||||
#if Z_HOME_DIR > 0 // If homing away from BED do Z first
|
||||
if (home_all_axis || code_seen(axis_codes[Z_AXIS])) {
|
||||
HOMEAXIS(Z);
|
||||
}
|
||||
if (home_all_axis || homeZ) HOMEAXIS(Z);
|
||||
#endif
|
||||
|
||||
#ifdef QUICK_HOME
|
||||
if (home_all_axis || code_seen(axis_codes[X_AXIS] && code_seen(axis_codes[Y_AXIS]))) { //first diagonal move
|
||||
if (home_all_axis || (homeX && homeY)) { //first diagonal move
|
||||
current_position[X_AXIS] = current_position[Y_AXIS] = 0;
|
||||
|
||||
#ifndef DUAL_X_CARRIAGE
|
||||
int x_axis_home_dir = home_dir(X_AXIS);
|
||||
#else
|
||||
#ifdef DUAL_X_CARRIAGE
|
||||
int x_axis_home_dir = x_home_dir(active_extruder);
|
||||
extruder_duplication_enabled = false;
|
||||
#else
|
||||
int x_axis_home_dir = home_dir(X_AXIS);
|
||||
#endif
|
||||
|
||||
sync_plan_position();
|
||||
@ -1807,7 +1827,8 @@ inline void gcode_G28() {
|
||||
}
|
||||
#endif //QUICK_HOME
|
||||
|
||||
if ((home_all_axis) || (code_seen(axis_codes[X_AXIS]))) {
|
||||
// Home X
|
||||
if (home_all_axis || homeX) {
|
||||
#ifdef DUAL_X_CARRIAGE
|
||||
int tmp_extruder = active_extruder;
|
||||
extruder_duplication_enabled = false;
|
||||
@ -1825,31 +1846,38 @@ inline void gcode_G28() {
|
||||
#endif
|
||||
}
|
||||
|
||||
if (home_all_axis || code_seen(axis_codes[Y_AXIS])) HOMEAXIS(Y);
|
||||
// Home Y
|
||||
if (home_all_axis || homeY) HOMEAXIS(Y);
|
||||
|
||||
// Set the X position, if included
|
||||
// Adds the home_offset as well, which may be wrong
|
||||
if (code_seen(axis_codes[X_AXIS])) {
|
||||
if (code_value_long() != 0) {
|
||||
current_position[X_AXIS] = code_value()
|
||||
float v = code_value();
|
||||
if (v) current_position[X_AXIS] = v
|
||||
#ifndef SCARA
|
||||
+ home_offset[X_AXIS]
|
||||
#endif
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
if (code_seen(axis_codes[Y_AXIS]) && code_value_long() != 0) {
|
||||
current_position[Y_AXIS] = code_value()
|
||||
// Set the Y position, if included
|
||||
// Adds the home_offset as well, which may be wrong
|
||||
if (code_seen(axis_codes[Y_AXIS])) {
|
||||
float v = code_value();
|
||||
if (v) current_position[Y_AXIS] = v
|
||||
#ifndef SCARA
|
||||
+ home_offset[Y_AXIS]
|
||||
#endif
|
||||
;
|
||||
}
|
||||
|
||||
#if Z_HOME_DIR < 0 // If homing towards BED do Z last
|
||||
// Home Z last if homing towards the bed
|
||||
#if Z_HOME_DIR < 0
|
||||
|
||||
#ifndef Z_SAFE_HOMING
|
||||
|
||||
if (home_all_axis || code_seen(axis_codes[Z_AXIS])) {
|
||||
if (home_all_axis || homeZ) {
|
||||
// Raise Z before homing Z? Shouldn't this happen before homing X or Y?
|
||||
#if defined(Z_RAISE_BEFORE_HOMING) && Z_RAISE_BEFORE_HOMING > 0
|
||||
destination[Z_AXIS] = -Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS); // Set destination away from bed
|
||||
feedrate = max_feedrate[Z_AXIS];
|
||||
@ -1878,7 +1906,7 @@ inline void gcode_G28() {
|
||||
}
|
||||
|
||||
// Let's see if X and Y are homed and probe is inside bed area.
|
||||
if (code_seen(axis_codes[Z_AXIS])) {
|
||||
if (homeZ) {
|
||||
|
||||
if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS]) {
|
||||
|
||||
@ -1912,13 +1940,15 @@ inline void gcode_G28() {
|
||||
|
||||
#endif // Z_HOME_DIR < 0
|
||||
|
||||
|
||||
if (code_seen(axis_codes[Z_AXIS]) && code_value_long() != 0)
|
||||
current_position[Z_AXIS] = code_value() + home_offset[Z_AXIS];
|
||||
// Set the Z position, if included
|
||||
// Adds the home_offset as well, which may be wrong
|
||||
if (code_seen(axis_codes[Z_AXIS])) {
|
||||
float v = code_value();
|
||||
if (v) current_position[Z_AXIS] = v + home_offset[Z_AXIS];
|
||||
}
|
||||
|
||||
#if defined(ENABLE_AUTO_BED_LEVELING) && (Z_HOME_DIR < 0)
|
||||
if (home_all_axis || code_seen(axis_codes[Z_AXIS]))
|
||||
current_position[Z_AXIS] += zprobe_zoffset; //Add Z_Probe offset (the distance is negative)
|
||||
if (home_all_axis || homeZ) current_position[Z_AXIS] += zprobe_zoffset; // Add Z_Probe offset (the distance is negative)
|
||||
#endif
|
||||
sync_plan_position();
|
||||
|
||||
@ -2741,7 +2771,7 @@ inline void gcode_M42() {
|
||||
* E = Engage probe for each reading
|
||||
* L = Number of legs of movement before probe
|
||||
*
|
||||
* This function assumes the bed has been homed. Specificaly, that a G28 command
|
||||
* This function assumes the bed has been homed. Specifically, that a G28 command
|
||||
* as been issued prior to invoking the M48 Z-Probe repeatability measurement function.
|
||||
* Any information generated by a prior G29 Bed leveling command will be lost and need to be
|
||||
* regenerated.
|
||||
|
Loading…
Reference in New Issue
Block a user