Add a proper flag for ABL enabled
This commit is contained in:
parent
666e944336
commit
cbc158eb62
3 changed files with 64 additions and 15 deletions
|
@ -2119,8 +2119,13 @@ static void clean_up_after_endstop_or_probe_move() {
|
|||
|
||||
/**
|
||||
* Reset calibration results to zero.
|
||||
*
|
||||
* TODO: Proper functions to disable / enable
|
||||
* bed leveling via a flag, correcting the
|
||||
* current position in each case.
|
||||
*/
|
||||
void reset_bed_level() {
|
||||
planner.abl_enabled = false;
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("reset_bed_level");
|
||||
#endif
|
||||
|
@ -2128,7 +2133,6 @@ static void clean_up_after_endstop_or_probe_move() {
|
|||
planner.bed_level_matrix.set_to_identity();
|
||||
#elif ENABLED(AUTO_BED_LEVELING_NONLINEAR)
|
||||
memset(bed_level_grid, 0, sizeof(bed_level_grid));
|
||||
nonlinear_grid_spacing[X_AXIS] = nonlinear_grid_spacing[Y_AXIS] = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -3505,16 +3509,15 @@ inline void gcode_G28() {
|
|||
|
||||
stepper.synchronize();
|
||||
|
||||
// Disable auto bed leveling during G29
|
||||
bool auto_bed_leveling_was_enabled = planner.abl_enabled,
|
||||
abl_should_reenable = auto_bed_leveling_was_enabled;
|
||||
|
||||
planner.abl_enabled = false;
|
||||
|
||||
if (!dryrun) {
|
||||
|
||||
// Reset the bed_level_matrix because leveling
|
||||
// needs to be done without leveling enabled.
|
||||
reset_bed_level();
|
||||
|
||||
//
|
||||
// Re-orient the current position without leveling
|
||||
// based on where the steppers are positioned.
|
||||
//
|
||||
get_cartesian_from_steppers();
|
||||
memcpy(current_position, cartes, sizeof(cartes));
|
||||
|
||||
|
@ -3525,7 +3528,10 @@ inline void gcode_G28() {
|
|||
setup_for_endstop_or_probe_move();
|
||||
|
||||
// Deploy the probe. Probe will raise if needed.
|
||||
if (DEPLOY_PROBE()) return;
|
||||
if (DEPLOY_PROBE()) {
|
||||
planner.abl_enabled = abl_should_reenable;
|
||||
return;
|
||||
}
|
||||
|
||||
float xProbe = 0, yProbe = 0, measured_z = 0;
|
||||
|
||||
|
@ -3537,11 +3543,16 @@ inline void gcode_G28() {
|
|||
|
||||
#if ENABLED(AUTO_BED_LEVELING_NONLINEAR)
|
||||
|
||||
nonlinear_grid_spacing[X_AXIS] = xGridSpacing;
|
||||
nonlinear_grid_spacing[Y_AXIS] = yGridSpacing;
|
||||
float zoffset = zprobe_zoffset;
|
||||
if (code_seen('Z')) zoffset += code_value_axis_units(Z_AXIS);
|
||||
|
||||
if (xGridSpacing != nonlinear_grid_spacing[X_AXIS] || yGridSpacing != nonlinear_grid_spacing[Y_AXIS]) {
|
||||
nonlinear_grid_spacing[X_AXIS] = xGridSpacing;
|
||||
nonlinear_grid_spacing[Y_AXIS] = yGridSpacing;
|
||||
// Can't re-enable (on error) until the new grid is written
|
||||
abl_should_reenable = false;
|
||||
}
|
||||
|
||||
#elif ENABLED(AUTO_BED_LEVELING_LINEAR_GRID)
|
||||
|
||||
/**
|
||||
|
@ -3600,6 +3611,11 @@ inline void gcode_G28() {
|
|||
|
||||
measured_z = probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level);
|
||||
|
||||
if (measured_z == NAN) {
|
||||
planner.abl_enabled = abl_should_reenable;
|
||||
return;
|
||||
}
|
||||
|
||||
#if ENABLED(AUTO_BED_LEVELING_LINEAR_GRID)
|
||||
|
||||
mean += measured_z;
|
||||
|
@ -3639,6 +3655,11 @@ inline void gcode_G28() {
|
|||
measured_z = points[i].z = probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level);
|
||||
}
|
||||
|
||||
if (measured_z == NAN) {
|
||||
planner.abl_enabled = abl_should_reenable;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!dryrun) {
|
||||
vector_3 planeNormal = vector_3::cross(points[0] - points[1], points[2] - points[1]).get_normal();
|
||||
if (planeNormal.z < 0) {
|
||||
|
@ -3647,12 +3668,23 @@ inline void gcode_G28() {
|
|||
planeNormal.z *= -1;
|
||||
}
|
||||
planner.bed_level_matrix = matrix_3x3::create_look_at(planeNormal);
|
||||
|
||||
// Can't re-enable (on error) until the new grid is written
|
||||
abl_should_reenable = false;
|
||||
}
|
||||
|
||||
#endif // AUTO_BED_LEVELING_3POINT
|
||||
|
||||
// Raise to _Z_CLEARANCE_DEPLOY_PROBE. Stow the probe.
|
||||
if (STOW_PROBE()) return;
|
||||
if (STOW_PROBE()) {
|
||||
planner.abl_enabled = abl_should_reenable;
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Unless this is a dry run, auto bed leveling will
|
||||
// definitely be enabled after this point
|
||||
//
|
||||
|
||||
// Restore state after probing
|
||||
clean_up_after_endstop_or_probe_move();
|
||||
|
@ -3842,6 +3874,9 @@ inline void gcode_G28() {
|
|||
report_current_position();
|
||||
|
||||
KEEPALIVE_STATE(IN_HANDLER);
|
||||
|
||||
// Auto Bed Leveling is complete! Enable if possible.
|
||||
planner.abl_enabled = dryrun ? abl_should_reenable : true;
|
||||
}
|
||||
|
||||
#endif // AUTO_BED_LEVELING_FEATURE
|
||||
|
@ -7738,7 +7773,7 @@ void ok_to_send() {
|
|||
|
||||
// Get the Z adjustment for non-linear bed leveling
|
||||
float nonlinear_z_offset(float cartesian[XYZ]) {
|
||||
if (nonlinear_grid_spacing[X_AXIS] == 0 || nonlinear_grid_spacing[Y_AXIS] == 0) return 0; // G29 not done!
|
||||
if (planner.abl_enabled) return;
|
||||
|
||||
int half_x = (ABL_GRID_POINTS_X - 1) / 2,
|
||||
half_y = (ABL_GRID_POINTS_Y - 1) / 2;
|
||||
|
|
|
@ -98,6 +98,10 @@ float Planner::min_feedrate_mm_s,
|
|||
Planner::max_e_jerk,
|
||||
Planner::min_travel_feedrate_mm_s;
|
||||
|
||||
#if ENABLED(AUTO_BED_LEVELING_FEATURE)
|
||||
bool Planner::abl_enabled = false; // Flag that auto bed leveling is enabled
|
||||
#endif
|
||||
|
||||
#if ENABLED(AUTO_BED_LEVELING_LINEAR)
|
||||
matrix_3x3 Planner::bed_level_matrix; // Transform to compensate for bed level
|
||||
#endif
|
||||
|
@ -524,6 +528,11 @@ void Planner::check_axes_activity() {
|
|||
#if PLANNER_LEVELING
|
||||
|
||||
void Planner::apply_leveling(float &lx, float &ly, float &lz) {
|
||||
|
||||
#if ENABLED(AUTO_BED_LEVELING_FEATURE)
|
||||
if (!abl_enabled) return;
|
||||
#endif
|
||||
|
||||
#if ENABLED(MESH_BED_LEVELING)
|
||||
|
||||
if (mbl.active())
|
||||
|
@ -562,6 +571,11 @@ void Planner::check_axes_activity() {
|
|||
}
|
||||
|
||||
void Planner::unapply_leveling(float &lx, float &ly, float &lz) {
|
||||
|
||||
#if ENABLED(AUTO_BED_LEVELING_FEATURE)
|
||||
if (!abl_enabled) return;
|
||||
#endif
|
||||
|
||||
#if ENABLED(MESH_BED_LEVELING)
|
||||
|
||||
if (mbl.active())
|
||||
|
@ -627,8 +641,7 @@ void Planner::buffer_line(ARG_X, ARG_Y, ARG_Z, const float &e, float fr_mm_s, co
|
|||
dz = target[Z_AXIS] - position[Z_AXIS];
|
||||
|
||||
/*
|
||||
SERIAL_ECHOPGM(" Planner ");
|
||||
SERIAL_ECHOPAIR("FR:", fr_mm_s);
|
||||
SERIAL_ECHOPAIR(" Planner FR:", fr_mm_s);
|
||||
SERIAL_CHAR(' ');
|
||||
#if IS_KINEMATIC
|
||||
SERIAL_ECHOPAIR("A:", lx);
|
||||
|
|
|
@ -137,6 +137,7 @@ class Planner {
|
|||
static float min_travel_feedrate_mm_s;
|
||||
|
||||
#if ENABLED(AUTO_BED_LEVELING_FEATURE)
|
||||
static bool abl_enabled; // Flag that bed leveling is enabled
|
||||
static matrix_3x3 bed_level_matrix; // Transform to compensate for bed level
|
||||
#endif
|
||||
|
||||
|
|
Reference in a new issue