From a3e2bf730d01bcfc9b40c29a5e9b53d2d0ca125d Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 4 Aug 2012 15:43:30 +0000 Subject: [PATCH] minimums too --- Marlin/Marlin.h | 5 +---- Marlin/Marlin.pde | 23 ++++++++++++++++------- Marlin/motion_control.cpp | 6 +++--- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 7645830..c8115af 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -157,10 +157,6 @@ void manage_inactivity(byte debug); enum AxisEnum {X_AXIS=0, Y_AXIS=1, Z_AXIS=2, E_AXIS=3}; -#define X_HOME_POS_A (X_HOME_POS + add_homeing[X_AXIS]) -#define Y_HOME_POS_A (Y_HOME_POS + add_homeing[Y_AXIS]) -#define Z_HOME_POS_A (Z_HOME_POS + add_homeing[Z_AXIS]) - void FlushSerialRequestResend(); void ClearToSend(); @@ -187,6 +183,7 @@ extern float homing_feedrate[]; extern bool axis_relative_modes[]; extern float current_position[NUM_AXIS] ; extern float add_homeing[3]; +extern float min_pos[3]; extern unsigned char FanSpeed; // Handling multiple extruders pins diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index dd40cdf..9f8e98c 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -141,6 +141,7 @@ volatile bool feedmultiplychanged=false; volatile int extrudemultiply=100; //100->1 200->2 float current_position[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0 }; float add_homeing[3]={0,0,0}; +float min_pos[3] = { X_MIN_POS, Y_MIN_POS, Z_MIN_POS }; uint8_t active_extruder = 0; unsigned char FanSpeed=0; @@ -541,6 +542,14 @@ bool code_seen(char code) return (strchr_pointer != NULL); //Return True if a character was found } +static const float base_min_pos[3] = { X_MIN_POS, Y_MIN_POS, Z_MIN_POS }; +static const float base_home_pos[3] = { X_HOME_POS, Y_HOME_POS, Z_HOME_POS }; + +static void axis_is_at_home(int axis) { + current_position[axis] = base_home_pos[axis] + add_homeing[axis]; + min_pos[axis] = base_min_pos[axis] + add_homeing[axis]; +} + #define HOMEAXIS(LETTER) \ if ((LETTER##_MIN_PIN > -1 && LETTER##_HOME_DIR==-1) || (LETTER##_MAX_PIN > -1 && LETTER##_HOME_DIR==1))\ { \ @@ -562,8 +571,8 @@ bool code_seen(char code) plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); \ st_synchronize();\ \ - current_position[LETTER##_AXIS] = LETTER##_HOME_POS_A;\ - destination[LETTER##_AXIS] = current_position[LETTER##_AXIS];\ + axis_is_at_home(LETTER##_AXIS); \ + destination[LETTER##_AXIS] = current_position[LETTER##_AXIS]; \ feedrate = 0.0;\ endstops_hit_on_purpose();\ } @@ -676,8 +685,8 @@ void process_commands() plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); st_synchronize(); - current_position[X_AXIS] = X_HOME_POS_A; - current_position[Y_AXIS] = Y_HOME_POS_A; + axis_is_at_home(X_AXIS); + axis_is_at_home(Y_AXIS); plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); destination[X_AXIS] = current_position[X_AXIS]; destination[Y_AXIS] = current_position[Y_AXIS]; @@ -1542,9 +1551,9 @@ void get_arc_coordinates() void prepare_move() { if (min_software_endstops) { - if (destination[X_AXIS] < X_MIN_POS) destination[X_AXIS] = X_MIN_POS; - if (destination[Y_AXIS] < Y_MIN_POS) destination[Y_AXIS] = Y_MIN_POS; - if (destination[Z_AXIS] < Z_MIN_POS) destination[Z_AXIS] = Z_MIN_POS; + if (destination[X_AXIS] < min_pos[0]) destination[X_AXIS] = min_pos[0]; + if (destination[Y_AXIS] < min_pos[1]) destination[Y_AXIS] = min_pos[1]; + if (destination[Z_AXIS] < min_pos[2]) destination[Z_AXIS] = min_pos[2]; } if (max_software_endstops) { diff --git a/Marlin/motion_control.cpp b/Marlin/motion_control.cpp index 6bcea41..450924a 100644 --- a/Marlin/motion_control.cpp +++ b/Marlin/motion_control.cpp @@ -126,9 +126,9 @@ 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_A) arc_target[X_AXIS] = X_HOME_POS_A; - if (arc_target[Y_AXIS] < Y_HOME_POS_A) arc_target[Y_AXIS] = Y_HOME_POS_A; - if (arc_target[Z_AXIS] < Z_HOME_POS_A) arc_target[Z_AXIS] = Z_HOME_POS_A; + if (arc_target[X_AXIS] < min_pos[0]) arc_target[X_AXIS] = min_pos[0]; + if (arc_target[Y_AXIS] < min_pos[1]) arc_target[Y_AXIS] = min_pos[1]; + if (arc_target[Z_AXIS] < min_pos[2]) arc_target[Z_AXIS] = min_pos[2]; } if (max_software_endstops) { -- 2.30.2