chiark / gitweb /
minimums too
[marlin.git] / Marlin / Marlin.pde
index dd40cdf76dc0d1fac55048ee5b6a2c9e80000db3..9f8e98c249422caa2d2f618b8cb4ae7cc10a45f1 100644 (file)
@@ -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) {