From: Ian Jackson Date: Thu, 9 Aug 2012 17:15:32 +0000 (+0100) Subject: software endstops: use *_MIN_POS and *_MAX_POS for arcs X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=858be0694a9217288dc360e4dd238295d2a748b7;p=marlin.git software endstops: use *_MIN_POS and *_MAX_POS for arcs If [XYZ]_HOME_POS and [XYZ]_MIN_POS aren't 0, these corrections are wrong. Use the same logic as in Marlin.pde:prepare_move: ie, clamp to [XYZ]_{MIN,MAX}_POS. Signed-off-by: Ian Jackson --- diff --git a/Marlin/motion_control.cpp b/Marlin/motion_control.cpp index f11d8c8..a10d73f 100644 --- a/Marlin/motion_control.cpp +++ b/Marlin/motion_control.cpp @@ -126,15 +126,15 @@ void mc_arc(float *position, float *target, float *offset, uint8_t axis_0, uint8 arc_target[E_AXIS] += extruder_per_segment; if (min_software_endstops) { - if (arc_target[X_AXIS] < X_HOME_POS) arc_target[X_AXIS] = X_HOME_POS; - if (arc_target[Y_AXIS] < Y_HOME_POS) arc_target[Y_AXIS] = Y_HOME_POS; - if (arc_target[Z_AXIS] < Z_HOME_POS) arc_target[Z_AXIS] = Z_HOME_POS; + if (arc_target[X_AXIS] < X_MIN_POS) arc_target[X_AXIS] = X_MIN_POS; + if (arc_target[Y_AXIS] < Y_MIN_POS) arc_target[Y_AXIS] = Y_MIN_POS; + if (arc_target[Z_AXIS] < Z_MIN_POS) arc_target[Z_AXIS] = Z_MIN_POS; } if (max_software_endstops) { - if (arc_target[X_AXIS] > X_MAX_LENGTH) arc_target[X_AXIS] = X_MAX_LENGTH; - if (arc_target[Y_AXIS] > Y_MAX_LENGTH) arc_target[Y_AXIS] = Y_MAX_LENGTH; - if (arc_target[Z_AXIS] > Z_MAX_LENGTH) arc_target[Z_AXIS] = Z_MAX_LENGTH; + if (arc_target[X_AXIS] > X_MAX_POS) arc_target[X_AXIS] = X_MAX_POS; + if (arc_target[Y_AXIS] > Y_MAX_POS) arc_target[Y_AXIS] = Y_MAX_POS; + if (arc_target[Z_AXIS] > Z_MAX_POS) arc_target[Z_AXIS] = Z_MAX_POS; } plan_buffer_line(arc_target[X_AXIS], arc_target[Y_AXIS], arc_target[Z_AXIS], arc_target[E_AXIS], feed_rate, extruder);