|
|
@ -1442,8 +1442,8 @@ static void set_home_offset(AxisEnum axis, float v) {
|
|
|
|
static void set_axis_is_at_home(AxisEnum axis) {
|
|
|
|
static void set_axis_is_at_home(AxisEnum axis) {
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) {
|
|
|
|
if (DEBUGGING(LEVELING)) {
|
|
|
|
SERIAL_ECHOPAIR("set_axis_is_at_home(", axis);
|
|
|
|
SERIAL_ECHOPAIR(">>> set_axis_is_at_home(", axis);
|
|
|
|
SERIAL_ECHOLNPGM(") >>>");
|
|
|
|
SERIAL_ECHOLNPGM(")");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
@ -1993,7 +1993,7 @@ static void clean_up_after_endstop_or_probe_move() {
|
|
|
|
long start_steps = stepper.position(Z_AXIS);
|
|
|
|
long start_steps = stepper.position(Z_AXIS);
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("run_z_probe (DELTA) 1");
|
|
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("run_z_probe (DELTA) 1", current_position);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
// move down slowly until you find the bed
|
|
|
|
// move down slowly until you find the bed
|
|
|
@ -2015,8 +2015,6 @@ static void clean_up_after_endstop_or_probe_move() {
|
|
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("run_z_probe (DELTA) 2", current_position);
|
|
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("run_z_probe (DELTA) 2", current_position);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
SYNC_PLAN_POSITION_KINEMATIC();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#else // !DELTA
|
|
|
|
#else // !DELTA
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(AUTO_BED_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(AUTO_BED_LEVELING_FEATURE)
|
|
|
@ -2054,14 +2052,14 @@ static void clean_up_after_endstop_or_probe_move() {
|
|
|
|
// Get the current stepper position after bumping an endstop
|
|
|
|
// Get the current stepper position after bumping an endstop
|
|
|
|
current_position[Z_AXIS] = stepper.get_axis_position_mm(Z_AXIS);
|
|
|
|
current_position[Z_AXIS] = stepper.get_axis_position_mm(Z_AXIS);
|
|
|
|
|
|
|
|
|
|
|
|
SYNC_PLAN_POSITION_KINEMATIC();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("run_z_probe", current_position);
|
|
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("run_z_probe", current_position);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#endif // !DELTA
|
|
|
|
#endif // !DELTA
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SYNC_PLAN_POSITION_KINEMATIC();
|
|
|
|
|
|
|
|
|
|
|
|
feedrate = old_feedrate;
|
|
|
|
feedrate = old_feedrate;
|
|
|
|
|
|
|
|
|
|
|
|
return current_position[Z_AXIS];
|
|
|
|
return current_position[Z_AXIS];
|
|
|
@ -2083,9 +2081,10 @@ static void clean_up_after_endstop_or_probe_move() {
|
|
|
|
static float probe_pt(float x, float y, bool stow = true, int verbose_level = 1) {
|
|
|
|
static float probe_pt(float x, float y, bool stow = true, int verbose_level = 1) {
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) {
|
|
|
|
if (DEBUGGING(LEVELING)) {
|
|
|
|
SERIAL_ECHOLNPGM("probe_pt >>>");
|
|
|
|
SERIAL_ECHOPAIR(">>> probe_pt(", x);
|
|
|
|
SERIAL_ECHOPAIR("> stow:", stow);
|
|
|
|
SERIAL_ECHOPAIR(", ", y);
|
|
|
|
SERIAL_EOL;
|
|
|
|
SERIAL_ECHOPAIR(", ", stow ? "stow" : "no stow");
|
|
|
|
|
|
|
|
SERIAL_ECHOLNPGM(")");
|
|
|
|
DEBUG_POS("", current_position);
|
|
|
|
DEBUG_POS("", current_position);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -2107,7 +2106,7 @@ static void clean_up_after_endstop_or_probe_move() {
|
|
|
|
do_blocking_move_to_xy(x - (X_PROBE_OFFSET_FROM_EXTRUDER), y - (Y_PROBE_OFFSET_FROM_EXTRUDER));
|
|
|
|
do_blocking_move_to_xy(x - (X_PROBE_OFFSET_FROM_EXTRUDER), y - (Y_PROBE_OFFSET_FROM_EXTRUDER));
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("> deploy_z_probe");
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOPGM("> ");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
deploy_z_probe();
|
|
|
|
deploy_z_probe();
|
|
|
|
|
|
|
|
|
|
|
@ -2115,7 +2114,7 @@ static void clean_up_after_endstop_or_probe_move() {
|
|
|
|
|
|
|
|
|
|
|
|
if (stow) {
|
|
|
|
if (stow) {
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("> stow_z_probe");
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOPGM("> ");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
stow_z_probe();
|
|
|
|
stow_z_probe();
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2329,7 +2328,7 @@ static void homeaxis(AxisEnum axis) {
|
|
|
|
#if HAS_BED_PROBE
|
|
|
|
#if HAS_BED_PROBE
|
|
|
|
if (axis == Z_AXIS && axis_home_dir < 0) {
|
|
|
|
if (axis == Z_AXIS && axis_home_dir < 0) {
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM(" > deploy_z_probe()");
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOPGM("> ");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
deploy_z_probe();
|
|
|
|
deploy_z_probe();
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2453,7 +2452,7 @@ static void homeaxis(AxisEnum axis) {
|
|
|
|
#if HAS_BED_PROBE
|
|
|
|
#if HAS_BED_PROBE
|
|
|
|
if (axis == Z_AXIS && axis_home_dir < 0) {
|
|
|
|
if (axis == Z_AXIS && axis_home_dir < 0) {
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM(" > stow_z_probe()");
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOPGM("> ");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
stow_z_probe();
|
|
|
|
stow_z_probe();
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2543,7 +2542,7 @@ void unknown_command_error() {
|
|
|
|
SERIAL_ECHO_START;
|
|
|
|
SERIAL_ECHO_START;
|
|
|
|
SERIAL_ECHOPGM(MSG_UNKNOWN_COMMAND);
|
|
|
|
SERIAL_ECHOPGM(MSG_UNKNOWN_COMMAND);
|
|
|
|
SERIAL_ECHO(current_command);
|
|
|
|
SERIAL_ECHO(current_command);
|
|
|
|
SERIAL_ECHOPGM("\"\n");
|
|
|
|
SERIAL_ECHOLNPGM("\"");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(HOST_KEEPALIVE_FEATURE)
|
|
|
|
#if ENABLED(HOST_KEEPALIVE_FEATURE)
|
|
|
@ -2741,7 +2740,7 @@ inline void gcode_G4() {
|
|
|
|
inline void gcode_G28() {
|
|
|
|
inline void gcode_G28() {
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("gcode_G28 >>>");
|
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM(">>> gcode_G28");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
// Wait for planner moves to finish!
|
|
|
|
// Wait for planner moves to finish!
|
|
|
@ -3187,19 +3186,11 @@ inline void gcode_G28() {
|
|
|
|
switch (state) {
|
|
|
|
switch (state) {
|
|
|
|
case MeshReport:
|
|
|
|
case MeshReport:
|
|
|
|
if (mbl.has_mesh()) {
|
|
|
|
if (mbl.has_mesh()) {
|
|
|
|
SERIAL_PROTOCOLPGM("State: ");
|
|
|
|
SERIAL_PROTOCOLPAIR("State: ", mbl.active() ? "On" : "Off");
|
|
|
|
if (mbl.active())
|
|
|
|
SERIAL_PROTOCOLPAIR("\nNum X,Y: ", MESH_NUM_X_POINTS);
|
|
|
|
SERIAL_PROTOCOLPGM("On");
|
|
|
|
SERIAL_PROTOCOLCHAR(','); SERIAL_PROTOCOL(MESH_NUM_Y_POINTS);
|
|
|
|
else
|
|
|
|
SERIAL_PROTOCOLPAIR("\nZ search height: ", MESH_HOME_SEARCH_Z);
|
|
|
|
SERIAL_PROTOCOLPGM("Off");
|
|
|
|
SERIAL_PROTOCOLPGM("\nZ offset: "); SERIAL_PROTOCOL_F(mbl.z_offset, 5);
|
|
|
|
SERIAL_PROTOCOLPGM("\nNum X,Y: ");
|
|
|
|
|
|
|
|
SERIAL_PROTOCOL(MESH_NUM_X_POINTS);
|
|
|
|
|
|
|
|
SERIAL_PROTOCOLCHAR(',');
|
|
|
|
|
|
|
|
SERIAL_PROTOCOL(MESH_NUM_Y_POINTS);
|
|
|
|
|
|
|
|
SERIAL_PROTOCOLPGM("\nZ search height: ");
|
|
|
|
|
|
|
|
SERIAL_PROTOCOL(MESH_HOME_SEARCH_Z);
|
|
|
|
|
|
|
|
SERIAL_PROTOCOLPGM("\nZ offset: ");
|
|
|
|
|
|
|
|
SERIAL_PROTOCOL_F(mbl.z_offset, 5);
|
|
|
|
|
|
|
|
SERIAL_PROTOCOLLNPGM("\nMeasured points:");
|
|
|
|
SERIAL_PROTOCOLLNPGM("\nMeasured points:");
|
|
|
|
for (py = 0; py < MESH_NUM_Y_POINTS; py++) {
|
|
|
|
for (py = 0; py < MESH_NUM_Y_POINTS; py++) {
|
|
|
|
for (px = 0; px < MESH_NUM_X_POINTS; px++) {
|
|
|
|
for (px = 0; px < MESH_NUM_X_POINTS; px++) {
|
|
|
@ -3268,30 +3259,30 @@ inline void gcode_G28() {
|
|
|
|
if (code_seen('X')) {
|
|
|
|
if (code_seen('X')) {
|
|
|
|
px = code_value_int() - 1;
|
|
|
|
px = code_value_int() - 1;
|
|
|
|
if (px < 0 || px >= MESH_NUM_X_POINTS) {
|
|
|
|
if (px < 0 || px >= MESH_NUM_X_POINTS) {
|
|
|
|
SERIAL_PROTOCOLPGM("X out of range (1-" STRINGIFY(MESH_NUM_X_POINTS) ").\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("X out of range (1-" STRINGIFY(MESH_NUM_X_POINTS) ").");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
SERIAL_PROTOCOLPGM("X not entered.\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("X not entered.");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (code_seen('Y')) {
|
|
|
|
if (code_seen('Y')) {
|
|
|
|
py = code_value_int() - 1;
|
|
|
|
py = code_value_int() - 1;
|
|
|
|
if (py < 0 || py >= MESH_NUM_Y_POINTS) {
|
|
|
|
if (py < 0 || py >= MESH_NUM_Y_POINTS) {
|
|
|
|
SERIAL_PROTOCOLPGM("Y out of range (1-" STRINGIFY(MESH_NUM_Y_POINTS) ").\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("Y out of range (1-" STRINGIFY(MESH_NUM_Y_POINTS) ").");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
SERIAL_PROTOCOLPGM("Y not entered.\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("Y not entered.");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (code_seen('Z')) {
|
|
|
|
if (code_seen('Z')) {
|
|
|
|
z = code_value_axis_units(Z_AXIS);
|
|
|
|
z = code_value_axis_units(Z_AXIS);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
SERIAL_PROTOCOLPGM("Z not entered.\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("Z not entered.");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mbl.z_values[py][px] = z;
|
|
|
|
mbl.z_values[py][px] = z;
|
|
|
@ -3302,7 +3293,7 @@ inline void gcode_G28() {
|
|
|
|
z = code_value_axis_units(Z_AXIS);
|
|
|
|
z = code_value_axis_units(Z_AXIS);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
SERIAL_PROTOCOLPGM("Z not entered.\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("Z not entered.");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mbl.z_offset = z;
|
|
|
|
mbl.z_offset = z;
|
|
|
@ -3368,7 +3359,7 @@ inline void gcode_G28() {
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) {
|
|
|
|
if (DEBUGGING(LEVELING)) {
|
|
|
|
SERIAL_ECHOLNPGM("gcode_G29 >>>");
|
|
|
|
SERIAL_ECHOLNPGM(">>> gcode_G29");
|
|
|
|
DEBUG_POS("", current_position);
|
|
|
|
DEBUG_POS("", current_position);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -3397,8 +3388,8 @@ inline void gcode_G28() {
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
if (verbose_level > 0) {
|
|
|
|
if (verbose_level > 0) {
|
|
|
|
SERIAL_PROTOCOLPGM("G29 Auto Bed Leveling\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("G29 Auto Bed Leveling");
|
|
|
|
if (dryrun) SERIAL_ECHOLNPGM("Running in DRY-RUN mode");
|
|
|
|
if (dryrun) SERIAL_PROTOCOLLNPGM("Running in DRY-RUN mode");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int auto_bed_leveling_grid_points = AUTO_BED_LEVELING_GRID_POINTS;
|
|
|
|
int auto_bed_leveling_grid_points = AUTO_BED_LEVELING_GRID_POINTS;
|
|
|
@ -3406,7 +3397,7 @@ inline void gcode_G28() {
|
|
|
|
#if DISABLED(DELTA)
|
|
|
|
#if DISABLED(DELTA)
|
|
|
|
if (code_seen('P')) auto_bed_leveling_grid_points = code_value_int();
|
|
|
|
if (code_seen('P')) auto_bed_leveling_grid_points = code_value_int();
|
|
|
|
if (auto_bed_leveling_grid_points < 2) {
|
|
|
|
if (auto_bed_leveling_grid_points < 2) {
|
|
|
|
SERIAL_PROTOCOLPGM("?Number of probed (P)oints is implausible (2 minimum).\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("?Number of probed (P)oints is implausible (2 minimum).");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -3637,17 +3628,17 @@ inline void gcode_G28() {
|
|
|
|
// Show the Topography map if enabled
|
|
|
|
// Show the Topography map if enabled
|
|
|
|
if (do_topography_map) {
|
|
|
|
if (do_topography_map) {
|
|
|
|
|
|
|
|
|
|
|
|
SERIAL_PROTOCOLPGM(" \nBed Height Topography: \n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("\nBed Height Topography:\n"
|
|
|
|
SERIAL_PROTOCOLPGM(" +--- BACK --+\n");
|
|
|
|
" +--- BACK --+\n"
|
|
|
|
SERIAL_PROTOCOLPGM(" | |\n");
|
|
|
|
" | |\n"
|
|
|
|
SERIAL_PROTOCOLPGM(" L | (+) | R\n");
|
|
|
|
" L | (+) | R\n"
|
|
|
|
SERIAL_PROTOCOLPGM(" E | | I\n");
|
|
|
|
" E | | I\n"
|
|
|
|
SERIAL_PROTOCOLPGM(" F | (-) N (+) | G\n");
|
|
|
|
" F | (-) N (+) | G\n"
|
|
|
|
SERIAL_PROTOCOLPGM(" T | | H\n");
|
|
|
|
" T | | H\n"
|
|
|
|
SERIAL_PROTOCOLPGM(" | (-) | T\n");
|
|
|
|
" | (-) | T\n"
|
|
|
|
SERIAL_PROTOCOLPGM(" | |\n");
|
|
|
|
" | |\n"
|
|
|
|
SERIAL_PROTOCOLPGM(" O-- FRONT --+\n");
|
|
|
|
" O-- FRONT --+\n"
|
|
|
|
SERIAL_PROTOCOLPGM(" (0,0)\n");
|
|
|
|
" (0,0)");
|
|
|
|
|
|
|
|
|
|
|
|
float min_diff = 999;
|
|
|
|
float min_diff = 999;
|
|
|
|
|
|
|
|
|
|
|
@ -3674,7 +3665,7 @@ inline void gcode_G28() {
|
|
|
|
} // yy
|
|
|
|
} // yy
|
|
|
|
SERIAL_EOL;
|
|
|
|
SERIAL_EOL;
|
|
|
|
if (verbose_level > 3) {
|
|
|
|
if (verbose_level > 3) {
|
|
|
|
SERIAL_PROTOCOLPGM(" \nCorrected Bed Height vs. Bed Topology: \n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("\nCorrected Bed Height vs. Bed Topology:");
|
|
|
|
|
|
|
|
|
|
|
|
for (int yy = auto_bed_leveling_grid_points - 1; yy >= 0; yy--) {
|
|
|
|
for (int yy = auto_bed_leveling_grid_points - 1; yy >= 0; yy--) {
|
|
|
|
for (int xx = 0; xx < auto_bed_leveling_grid_points; xx++) {
|
|
|
|
for (int xx = 0; xx < auto_bed_leveling_grid_points; xx++) {
|
|
|
@ -3747,7 +3738,7 @@ inline void gcode_G28() {
|
|
|
|
#ifdef Z_PROBE_END_SCRIPT
|
|
|
|
#ifdef Z_PROBE_END_SCRIPT
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
|
|
|
if (DEBUGGING(LEVELING)) {
|
|
|
|
if (DEBUGGING(LEVELING)) {
|
|
|
|
SERIAL_ECHO("Z Probe End Script: ");
|
|
|
|
SERIAL_ECHOPGM("Z Probe End Script: ");
|
|
|
|
SERIAL_ECHOLNPGM(Z_PROBE_END_SCRIPT);
|
|
|
|
SERIAL_ECHOLNPGM(Z_PROBE_END_SCRIPT);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -4130,16 +4121,16 @@ inline void gcode_M42() {
|
|
|
|
|
|
|
|
|
|
|
|
int8_t verbose_level = code_seen('V') ? code_value_byte() : 1;
|
|
|
|
int8_t verbose_level = code_seen('V') ? code_value_byte() : 1;
|
|
|
|
if (verbose_level < 0 || verbose_level > 4) {
|
|
|
|
if (verbose_level < 0 || verbose_level > 4) {
|
|
|
|
SERIAL_PROTOCOLPGM("?Verbose Level not plausible (0-4).\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("?Verbose Level not plausible (0-4).");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (verbose_level > 0)
|
|
|
|
if (verbose_level > 0)
|
|
|
|
SERIAL_PROTOCOLPGM("M48 Z-Probe Repeatability test\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("M48 Z-Probe Repeatability test");
|
|
|
|
|
|
|
|
|
|
|
|
int8_t n_samples = code_seen('P') ? code_value_byte() : 10;
|
|
|
|
int8_t n_samples = code_seen('P') ? code_value_byte() : 10;
|
|
|
|
if (n_samples < 4 || n_samples > 50) {
|
|
|
|
if (n_samples < 4 || n_samples > 50) {
|
|
|
|
SERIAL_PROTOCOLPGM("?Sample size not plausible (4-50).\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("?Sample size not plausible (4-50).");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -4168,7 +4159,7 @@ inline void gcode_M42() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
if (sqrt(X_probe_location * X_probe_location + Y_probe_location * Y_probe_location) > DELTA_PROBEABLE_RADIUS) {
|
|
|
|
if (sqrt(X_probe_location * X_probe_location + Y_probe_location * Y_probe_location) > DELTA_PROBEABLE_RADIUS) {
|
|
|
|
SERIAL_PROTOCOLPGM("? (X,Y) location outside of probeable radius.\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("? (X,Y) location outside of probeable radius.");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -4176,7 +4167,7 @@ inline void gcode_M42() {
|
|
|
|
bool seen_L = code_seen('L');
|
|
|
|
bool seen_L = code_seen('L');
|
|
|
|
uint8_t n_legs = seen_L ? code_value_byte() : 0;
|
|
|
|
uint8_t n_legs = seen_L ? code_value_byte() : 0;
|
|
|
|
if (n_legs > 15) {
|
|
|
|
if (n_legs > 15) {
|
|
|
|
SERIAL_PROTOCOLPGM("?Number of legs in movement not plausible (0-15).\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("?Number of legs in movement not plausible (0-15).");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (n_legs == 1) n_legs = 2;
|
|
|
|
if (n_legs == 1) n_legs = 2;
|
|
|
@ -4190,7 +4181,7 @@ inline void gcode_M42() {
|
|
|
|
* we don't want to use that as a starting point for each probe.
|
|
|
|
* we don't want to use that as a starting point for each probe.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
if (verbose_level > 2)
|
|
|
|
if (verbose_level > 2)
|
|
|
|
SERIAL_PROTOCOLPGM("Positioning the probe...\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("Positioning the probe...");
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(DELTA)
|
|
|
|
#if ENABLED(DELTA)
|
|
|
|
// we don't do bed level correction in M48 because we want the raw data when we probe
|
|
|
|
// we don't do bed level correction in M48 because we want the raw data when we probe
|
|
|
@ -4223,9 +4214,9 @@ inline void gcode_M42() {
|
|
|
|
if (verbose_level > 3) {
|
|
|
|
if (verbose_level > 3) {
|
|
|
|
SERIAL_ECHOPAIR("Starting radius: ", radius);
|
|
|
|
SERIAL_ECHOPAIR("Starting radius: ", radius);
|
|
|
|
SERIAL_ECHOPAIR(" angle: ", angle);
|
|
|
|
SERIAL_ECHOPAIR(" angle: ", angle);
|
|
|
|
SERIAL_ECHO(" Direction: ");
|
|
|
|
SERIAL_ECHOPGM(" Direction: ");
|
|
|
|
if (dir > 0) SERIAL_ECHO("Counter ");
|
|
|
|
if (dir > 0) SERIAL_ECHOPGM("Counter-");
|
|
|
|
SERIAL_ECHOLN("Clockwise");
|
|
|
|
SERIAL_ECHOLNPGM("Clockwise");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (uint8_t l = 0; l < n_legs - 1; l++) {
|
|
|
|
for (uint8_t l = 0; l < n_legs - 1; l++) {
|
|
|
@ -4268,10 +4259,10 @@ inline void gcode_M42() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (verbose_level > 3) {
|
|
|
|
if (verbose_level > 3) {
|
|
|
|
SERIAL_PROTOCOL("Going to:");
|
|
|
|
SERIAL_PROTOCOLPGM("Going to:");
|
|
|
|
SERIAL_ECHOPAIR("x: ", X_current);
|
|
|
|
SERIAL_ECHOPAIR(" X", X_current);
|
|
|
|
SERIAL_ECHOPAIR("y: ", Y_current);
|
|
|
|
SERIAL_ECHOPAIR(" Y", Y_current);
|
|
|
|
SERIAL_ECHOPAIR(" z: ", current_position[Z_AXIS]);
|
|
|
|
SERIAL_ECHOPAIR(" Z", current_position[Z_AXIS]);
|
|
|
|
SERIAL_EOL;
|
|
|
|
SERIAL_EOL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
do_blocking_move_to_xy(X_current, Y_current);
|
|
|
|
do_blocking_move_to_xy(X_current, Y_current);
|
|
|
@ -5542,9 +5533,9 @@ inline void gcode_M226() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (servo_index >= 0) {
|
|
|
|
else if (servo_index >= 0) {
|
|
|
|
SERIAL_ECHO_START;
|
|
|
|
SERIAL_ECHO_START;
|
|
|
|
SERIAL_ECHO(" Servo ");
|
|
|
|
SERIAL_ECHOPGM(" Servo ");
|
|
|
|
SERIAL_ECHO(servo_index);
|
|
|
|
SERIAL_ECHO(servo_index);
|
|
|
|
SERIAL_ECHO(": ");
|
|
|
|
SERIAL_ECHOPGM(": ");
|
|
|
|
SERIAL_ECHOLN(servo[servo_index].read());
|
|
|
|
SERIAL_ECHOLN(servo[servo_index].read());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -5601,17 +5592,17 @@ inline void gcode_M226() {
|
|
|
|
thermalManager.updatePID();
|
|
|
|
thermalManager.updatePID();
|
|
|
|
SERIAL_ECHO_START;
|
|
|
|
SERIAL_ECHO_START;
|
|
|
|
#if ENABLED(PID_PARAMS_PER_HOTEND)
|
|
|
|
#if ENABLED(PID_PARAMS_PER_HOTEND)
|
|
|
|
SERIAL_ECHO(" e:"); // specify extruder in serial output
|
|
|
|
SERIAL_ECHOPGM(" e:"); // specify extruder in serial output
|
|
|
|
SERIAL_ECHO(e);
|
|
|
|
SERIAL_ECHO(e);
|
|
|
|
#endif // PID_PARAMS_PER_HOTEND
|
|
|
|
#endif // PID_PARAMS_PER_HOTEND
|
|
|
|
SERIAL_ECHO(" p:");
|
|
|
|
SERIAL_ECHOPGM(" p:");
|
|
|
|
SERIAL_ECHO(PID_PARAM(Kp, e));
|
|
|
|
SERIAL_ECHO(PID_PARAM(Kp, e));
|
|
|
|
SERIAL_ECHO(" i:");
|
|
|
|
SERIAL_ECHOPGM(" i:");
|
|
|
|
SERIAL_ECHO(unscalePID_i(PID_PARAM(Ki, e)));
|
|
|
|
SERIAL_ECHO(unscalePID_i(PID_PARAM(Ki, e)));
|
|
|
|
SERIAL_ECHO(" d:");
|
|
|
|
SERIAL_ECHOPGM(" d:");
|
|
|
|
SERIAL_ECHO(unscalePID_d(PID_PARAM(Kd, e)));
|
|
|
|
SERIAL_ECHO(unscalePID_d(PID_PARAM(Kd, e)));
|
|
|
|
#if ENABLED(PID_ADD_EXTRUSION_RATE)
|
|
|
|
#if ENABLED(PID_ADD_EXTRUSION_RATE)
|
|
|
|
SERIAL_ECHO(" c:");
|
|
|
|
SERIAL_ECHOPGM(" c:");
|
|
|
|
//Kc does not have scaling applied above, or in resetting defaults
|
|
|
|
//Kc does not have scaling applied above, or in resetting defaults
|
|
|
|
SERIAL_ECHO(PID_PARAM(Kc, e));
|
|
|
|
SERIAL_ECHO(PID_PARAM(Kc, e));
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -5635,11 +5626,11 @@ inline void gcode_M226() {
|
|
|
|
thermalManager.updatePID();
|
|
|
|
thermalManager.updatePID();
|
|
|
|
|
|
|
|
|
|
|
|
SERIAL_ECHO_START;
|
|
|
|
SERIAL_ECHO_START;
|
|
|
|
SERIAL_ECHO(" p:");
|
|
|
|
SERIAL_ECHOPGM(" p:");
|
|
|
|
SERIAL_ECHO(thermalManager.bedKp);
|
|
|
|
SERIAL_ECHO(thermalManager.bedKp);
|
|
|
|
SERIAL_ECHO(" i:");
|
|
|
|
SERIAL_ECHOPGM(" i:");
|
|
|
|
SERIAL_ECHO(unscalePID_i(thermalManager.bedKi));
|
|
|
|
SERIAL_ECHO(unscalePID_i(thermalManager.bedKi));
|
|
|
|
SERIAL_ECHO(" d:");
|
|
|
|
SERIAL_ECHOPGM(" d:");
|
|
|
|
SERIAL_ECHOLN(unscalePID_d(thermalManager.bedKd));
|
|
|
|
SERIAL_ECHOLN(unscalePID_d(thermalManager.bedKd));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -5739,7 +5730,7 @@ inline void gcode_M303() {
|
|
|
|
#if ENABLED(SCARA)
|
|
|
|
#if ENABLED(SCARA)
|
|
|
|
bool SCARA_move_to_cal(uint8_t delta_x, uint8_t delta_y) {
|
|
|
|
bool SCARA_move_to_cal(uint8_t delta_x, uint8_t delta_y) {
|
|
|
|
//SoftEndsEnabled = false; // Ignore soft endstops during calibration
|
|
|
|
//SoftEndsEnabled = false; // Ignore soft endstops during calibration
|
|
|
|
//SERIAL_ECHOLN(" Soft endstops disabled ");
|
|
|
|
//SERIAL_ECHOLNPGM(" Soft endstops disabled");
|
|
|
|
if (IsRunning()) {
|
|
|
|
if (IsRunning()) {
|
|
|
|
//gcode_get_destination(); // For X Y Z E F
|
|
|
|
//gcode_get_destination(); // For X Y Z E F
|
|
|
|
delta[X_AXIS] = delta_x;
|
|
|
|
delta[X_AXIS] = delta_x;
|
|
|
@ -5758,7 +5749,7 @@ inline void gcode_M303() {
|
|
|
|
* M360: SCARA calibration: Move to cal-position ThetaA (0 deg calibration)
|
|
|
|
* M360: SCARA calibration: Move to cal-position ThetaA (0 deg calibration)
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
inline bool gcode_M360() {
|
|
|
|
inline bool gcode_M360() {
|
|
|
|
SERIAL_ECHOLN(" Cal: Theta 0 ");
|
|
|
|
SERIAL_ECHOLNPGM(" Cal: Theta 0");
|
|
|
|
return SCARA_move_to_cal(0, 120);
|
|
|
|
return SCARA_move_to_cal(0, 120);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -5766,7 +5757,7 @@ inline void gcode_M303() {
|
|
|
|
* M361: SCARA calibration: Move to cal-position ThetaB (90 deg calibration - steps per degree)
|
|
|
|
* M361: SCARA calibration: Move to cal-position ThetaB (90 deg calibration - steps per degree)
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
inline bool gcode_M361() {
|
|
|
|
inline bool gcode_M361() {
|
|
|
|
SERIAL_ECHOLN(" Cal: Theta 90 ");
|
|
|
|
SERIAL_ECHOLNPGM(" Cal: Theta 90");
|
|
|
|
return SCARA_move_to_cal(90, 130);
|
|
|
|
return SCARA_move_to_cal(90, 130);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -5774,7 +5765,7 @@ inline void gcode_M303() {
|
|
|
|
* M362: SCARA calibration: Move to cal-position PsiA (0 deg calibration)
|
|
|
|
* M362: SCARA calibration: Move to cal-position PsiA (0 deg calibration)
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
inline bool gcode_M362() {
|
|
|
|
inline bool gcode_M362() {
|
|
|
|
SERIAL_ECHOLN(" Cal: Psi 0 ");
|
|
|
|
SERIAL_ECHOLNPGM(" Cal: Psi 0");
|
|
|
|
return SCARA_move_to_cal(60, 180);
|
|
|
|
return SCARA_move_to_cal(60, 180);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -5782,7 +5773,7 @@ inline void gcode_M303() {
|
|
|
|
* M363: SCARA calibration: Move to cal-position PsiB (90 deg calibration - steps per degree)
|
|
|
|
* M363: SCARA calibration: Move to cal-position PsiB (90 deg calibration - steps per degree)
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
inline bool gcode_M363() {
|
|
|
|
inline bool gcode_M363() {
|
|
|
|
SERIAL_ECHOLN(" Cal: Psi 90 ");
|
|
|
|
SERIAL_ECHOLNPGM(" Cal: Psi 90");
|
|
|
|
return SCARA_move_to_cal(50, 90);
|
|
|
|
return SCARA_move_to_cal(50, 90);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -5790,7 +5781,7 @@ inline void gcode_M303() {
|
|
|
|
* M364: SCARA calibration: Move to cal-position PSIC (90 deg to Theta calibration position)
|
|
|
|
* M364: SCARA calibration: Move to cal-position PSIC (90 deg to Theta calibration position)
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
inline bool gcode_M364() {
|
|
|
|
inline bool gcode_M364() {
|
|
|
|
SERIAL_ECHOLN(" Cal: Theta-Psi 90 ");
|
|
|
|
SERIAL_ECHOLNPGM(" Cal: Theta-Psi 90");
|
|
|
|
return SCARA_move_to_cal(45, 135);
|
|
|
|
return SCARA_move_to_cal(45, 135);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -6109,6 +6100,7 @@ inline void gcode_M503() {
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
SERIAL_ECHOPGM(MSG_Z_MIN);
|
|
|
|
SERIAL_ECHOPGM(MSG_Z_MIN);
|
|
|
|
SERIAL_ECHO(Z_PROBE_OFFSET_RANGE_MIN);
|
|
|
|
SERIAL_ECHO(Z_PROBE_OFFSET_RANGE_MIN);
|
|
|
|
|
|
|
|
SERIAL_CHAR(' ');
|
|
|
|
SERIAL_ECHOPGM(MSG_Z_MAX);
|
|
|
|
SERIAL_ECHOPGM(MSG_Z_MAX);
|
|
|
|
SERIAL_ECHO(Z_PROBE_OFFSET_RANGE_MAX);
|
|
|
|
SERIAL_ECHO(Z_PROBE_OFFSET_RANGE_MAX);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -6625,7 +6617,7 @@ inline void gcode_T(uint8_t tmp_extruder) {
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
SERIAL_ECHO_START;
|
|
|
|
SERIAL_ECHO_START;
|
|
|
|
SERIAL_ECHO(MSG_ACTIVE_EXTRUDER);
|
|
|
|
SERIAL_ECHOPGM(MSG_ACTIVE_EXTRUDER);
|
|
|
|
SERIAL_PROTOCOLLN((int)active_extruder);
|
|
|
|
SERIAL_PROTOCOLLN((int)active_extruder);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|