G28 F override specified axes as needed

This commit is contained in:
Scott Lahteine 2024-10-04 16:26:32 -05:00
parent 7c8e5fc97d
commit 0da6c2f682

View file

@ -239,8 +239,10 @@ void GcodeSuite::G28() {
#if ENABLED(EDITABLE_HOMING_FEEDRATE)
REMEMBER(fr, homing_feedrate_mm_m);
if (parser.floatval('F') > 0)
homing_feedrate_mm_m.x = TERN_(HAS_Y_AXIS, homing_feedrate_mm_m.y =) parser.value_linear_units(); // mm/min
float override_fr_units_min = parser.floatval('F');
NOLESS(override_fr_units_min, 0.0f);
#else
constexpr float override_fr_units_min = 0.0f;
#endif
#if ENABLED(FULL_REPORT_TO_HOST_FEATURE)
@ -307,6 +309,12 @@ void GcodeSuite::G28() {
#if ENABLED(DELTA)
if (override_fr_units_min) {
homing_feedrate_mm_m.x = X_AXIS_UNIT(override_fr_units_min);
homing_feedrate_mm_m.y = Y_AXIS_UNIT(override_fr_units_min);
homing_feedrate_mm_m.z = Z_AXIS_UNIT(override_fr_units_min);
}
constexpr bool doZ = true; // for NANODLP_Z_SYNC if your DLP is on a DELTA
home_delta();
@ -315,6 +323,12 @@ void GcodeSuite::G28() {
#elif ENABLED(AXEL_TPARA)
if (override_fr_units_min) {
homing_feedrate_mm_m.x = X_AXIS_UNIT(override_fr_units_min);
homing_feedrate_mm_m.y = Y_AXIS_UNIT(override_fr_units_min);
homing_feedrate_mm_m.z = Z_AXIS_UNIT(override_fr_units_min);
}
constexpr bool doZ = true; // for NANODLP_Z_SYNC if your DLP is on a TPARA
home_TPARA();
@ -352,6 +366,14 @@ void GcodeSuite::G28() {
constexpr bool doY = false;
#endif
#define OVERRIDE_AXIS_FR(A) if (override_fr_units_min && do##A) homing_feedrate_mm_m.A = A##_AXIS_UNIT(override_fr_units_min);
XYZ_CODE(
OVERRIDE_AXIS_FR(X),
OVERRIDE_AXIS_FR(Y),
OVERRIDE_AXIS_FR(Z)
);
#if HAS_Z_AXIS
UNUSED(needZ); UNUSED(homeZZ);
@ -433,7 +455,9 @@ void GcodeSuite::G28() {
#if ALL(FOAMCUTTER_XYUV, HAS_I_AXIS)
// Home I (after X)
OVERRIDE_AXIS_FR(I);
if (doI) homeaxis(I_AXIS);
doI = false;
#endif
#if HAS_Y_AXIS
@ -444,7 +468,9 @@ void GcodeSuite::G28() {
#if ALL(FOAMCUTTER_XYUV, HAS_J_AXIS)
// Home J (after Y)
OVERRIDE_AXIS_FR(J);
if (doJ) homeaxis(J_AXIS);
doJ = false;
#endif
TERN_(IMPROVE_HOMING_RELIABILITY, end_slow_homing(saved_motion_state));
@ -476,14 +502,9 @@ void GcodeSuite::G28() {
}
#endif
SECONDARY_AXIS_CODE(
if (doI) homeaxis(I_AXIS),
if (doJ) homeaxis(J_AXIS),
if (doK) homeaxis(K_AXIS),
if (doU) homeaxis(U_AXIS),
if (doV) homeaxis(V_AXIS),
if (doW) homeaxis(W_AXIS)
);
#define _HOME_AXIS(A) if (do##A) homeaxis(_AXIS(A));
SECONDARY_AXIS_MAP(OVERRIDE_AXIS_FR);
SECONDARY_AXIS_MAP(_HOME_AXIS);
#endif // HAS_Z_AXIS