improve G30 probing

Add optional parameters
X, Y for probe point
S sets stowing on and off
This commit is contained in:
Nikolay Zinov 2016-11-05 13:08:41 +03:00
parent 1614c9d207
commit dea00bbcf1

View File

@ -117,7 +117,7 @@
* G21 - Set input units to millimeters * G21 - Set input units to millimeters
* G28 - Home one or more axes * G28 - Home one or more axes
* G29 - Detailed Z probe, probes the bed at 3 or more points. Will fail if you haven't homed yet. * G29 - Detailed Z probe, probes the bed at 3 or more points. Will fail if you haven't homed yet.
* G30 - Single Z probe, probes bed at current XY location. * G30 - Single Z probe, probes bed at X Y location (defaults to current XY location)
* G31 - Dock sled (Z_PROBE_SLED only) * G31 - Dock sled (Z_PROBE_SLED only)
* G32 - Undock sled (Z_PROBE_SLED only) * G32 - Undock sled (Z_PROBE_SLED only)
* G38 - Probe target - similar to G28 except it uses the Z_MIN endstop for all three axes * G38 - Probe target - similar to G28 except it uses the Z_MIN endstop for all three axes
@ -4226,8 +4226,16 @@ inline void gcode_G28() {
/** /**
* G30: Do a single Z probe at the current XY * G30: Do a single Z probe at the current XY
* Usage:
* G30 <X#> <Y#> <S#>
* X = Probe X position (default=current probe position)
* Y = Probe Y position (default=current probe position)
* S = Stows the probe if 1 (default=1)
*/ */
inline void gcode_G30() { inline void gcode_G30() {
float X_probe_location = code_seen('X') ? code_value_axis_units(X_AXIS) : current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER;
float Y_probe_location = code_seen('Y') ? code_value_axis_units(Y_AXIS) : current_position[Y_AXIS] + Y_PROBE_OFFSET_FROM_EXTRUDER;
bool stow = code_seen('S') ? code_value_bool() : true;
// Disable leveling so the planner won't mess with us // Disable leveling so the planner won't mess with us
#if PLANNER_LEVELING #if PLANNER_LEVELING
@ -4236,9 +4244,9 @@ inline void gcode_G28() {
setup_for_endstop_or_probe_move(); setup_for_endstop_or_probe_move();
float measured_z = probe_pt(current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER, float measured_z = probe_pt(X_probe_location,
current_position[Y_AXIS] + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_probe_location,
true, 1); stow, 1);
SERIAL_PROTOCOLPGM("Bed X: "); SERIAL_PROTOCOLPGM("Bed X: ");
SERIAL_PROTOCOL(current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER + 0.0001); SERIAL_PROTOCOL(current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER + 0.0001);