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();
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
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;
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))\
{ \
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();\
}
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];
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) {
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) {