Browse Source

Z Axis Safe Homing when using Z Probe

Recommended for those who are using the Z Probe for Z Homing (as
Z-Endstop)

This feature has two changes:

1) Allow user to choose where the Z Probe will touch the bed when homing
all axis together (G28) by setting below defines:

Z_SAFE_HOMING_X_POINT
Z_SAFE_HOMING_Y_POINT

2) Prevents the user to perform Z Axis Homing when the Z Probe is
outsite bed.
Alex Borro 11 years ago
parent
commit
b33375d438
4 changed files with 128 additions and 35 deletions
  1. 29
    11
      Marlin/Configuration.h
  2. 7
    6
      Marlin/Marlin.h
  3. 74
    18
      Marlin/Marlin_main.cpp
  4. 18
    0
      Marlin/language.h

+ 29
- 11
Marlin/Configuration.h View File

305
 #define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
305
 #define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
306
 #define max_software_endstops true  // If true, axis won't move to coordinates greater than the defined lengths below.
306
 #define max_software_endstops true  // If true, axis won't move to coordinates greater than the defined lengths below.
307
 
307
 
308
+// Travel limits after homing
309
+#define X_MAX_POS 205
310
+#define X_MIN_POS 0
311
+#define Y_MAX_POS 205
312
+#define Y_MIN_POS 0
313
+#define Z_MAX_POS 200
314
+#define Z_MIN_POS 0
315
+
316
+#define X_MAX_LENGTH (X_MAX_POS - X_MIN_POS)
317
+#define Y_MAX_LENGTH (Y_MAX_POS - Y_MIN_POS)
318
+#define Z_MAX_LENGTH (Z_MAX_POS - Z_MIN_POS)
308
 //============================= Bed Auto Leveling ===========================
319
 //============================= Bed Auto Leveling ===========================
309
 
320
 
310
 //#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
321
 //#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
336
   // You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.
347
   // You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.
337
 
348
 
338
 //  #define PROBE_SERVO_DEACTIVATION_DELAY 300  
349
 //  #define PROBE_SERVO_DEACTIVATION_DELAY 300  
350
+
351
+
352
+//If you have enabled the Bed Auto Levelling and are using the same Z Probe for Z Homing, 
353
+//it is highly recommended you let this Z_SAFE_HOMING enabled!!!
354
+
355
+  #define Z_SAFE_HOMING   // This feature is meant to avoid Z homing with probe outside the bed area. 
356
+                          // When defined, it will:
357
+                          // - Allow Z homing only after X and Y homing AND stepper drivers still enabled
358
+                          // - If stepper drivers timeout, it will need X and Y homing again before Z homing
359
+                          // - Position the probe in a defined XY point before Z Homing when homing all axis (G28)
360
+                          // - Block Z homing only when the probe is outside bed area.
361
+  
362
+  #ifdef Z_SAFE_HOMING
363
+    
364
+    #define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2)    // X point for Z homing when homing all axis (G28)
365
+    #define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2)    // Y point for Z homing when homing all axis (G28)
366
+    
367
+  #endif
339
   
368
   
340
 #endif
369
 #endif
341
 
370
 
342
-// Travel limits after homing
343
-#define X_MAX_POS 205
344
-#define X_MIN_POS 0
345
-#define Y_MAX_POS 205
346
-#define Y_MIN_POS 0
347
-#define Z_MAX_POS 200
348
-#define Z_MIN_POS 0
349
-
350
-#define X_MAX_LENGTH (X_MAX_POS - X_MIN_POS)
351
-#define Y_MAX_LENGTH (Y_MAX_POS - Y_MIN_POS)
352
-#define Z_MAX_LENGTH (Z_MAX_POS - Z_MIN_POS)
353
 
371
 
354
 // The position of the homing switches
372
 // The position of the homing switches
355
 //#define MANUAL_HOME_POSITIONS  // If defined, MANUAL_*_HOME_POS below will be used
373
 //#define MANUAL_HOME_POSITIONS  // If defined, MANUAL_*_HOME_POS below will be used

+ 7
- 6
Marlin/Marlin.h View File

107
 #if defined(DUAL_X_CARRIAGE) && defined(X_ENABLE_PIN) && X_ENABLE_PIN > -1 \
107
 #if defined(DUAL_X_CARRIAGE) && defined(X_ENABLE_PIN) && X_ENABLE_PIN > -1 \
108
     && defined(X2_ENABLE_PIN) && X2_ENABLE_PIN > -1
108
     && defined(X2_ENABLE_PIN) && X2_ENABLE_PIN > -1
109
   #define  enable_x() do { WRITE(X_ENABLE_PIN, X_ENABLE_ON); WRITE(X2_ENABLE_PIN, X_ENABLE_ON); } while (0)
109
   #define  enable_x() do { WRITE(X_ENABLE_PIN, X_ENABLE_ON); WRITE(X2_ENABLE_PIN, X_ENABLE_ON); } while (0)
110
-  #define disable_x() do { WRITE(X_ENABLE_PIN,!X_ENABLE_ON); WRITE(X2_ENABLE_PIN,!X_ENABLE_ON); } while (0)
110
+  #define disable_x() do { WRITE(X_ENABLE_PIN,!X_ENABLE_ON); WRITE(X2_ENABLE_PIN,!X_ENABLE_ON); axis_known_position[X_AXIS] = false; } while (0)
111
 #elif defined(X_ENABLE_PIN) && X_ENABLE_PIN > -1
111
 #elif defined(X_ENABLE_PIN) && X_ENABLE_PIN > -1
112
   #define  enable_x() WRITE(X_ENABLE_PIN, X_ENABLE_ON)
112
   #define  enable_x() WRITE(X_ENABLE_PIN, X_ENABLE_ON)
113
-  #define disable_x() WRITE(X_ENABLE_PIN,!X_ENABLE_ON)
113
+  #define disable_x() { WRITE(X_ENABLE_PIN,!X_ENABLE_ON); axis_known_position[X_AXIS] = false; }
114
 #else
114
 #else
115
   #define enable_x() ;
115
   #define enable_x() ;
116
   #define disable_x() ;
116
   #define disable_x() ;
119
 #if defined(Y_ENABLE_PIN) && Y_ENABLE_PIN > -1
119
 #if defined(Y_ENABLE_PIN) && Y_ENABLE_PIN > -1
120
   #ifdef Y_DUAL_STEPPER_DRIVERS
120
   #ifdef Y_DUAL_STEPPER_DRIVERS
121
     #define  enable_y() { WRITE(Y_ENABLE_PIN, Y_ENABLE_ON); WRITE(Y2_ENABLE_PIN,  Y_ENABLE_ON); }
121
     #define  enable_y() { WRITE(Y_ENABLE_PIN, Y_ENABLE_ON); WRITE(Y2_ENABLE_PIN,  Y_ENABLE_ON); }
122
-    #define disable_y() { WRITE(Y_ENABLE_PIN,!Y_ENABLE_ON); WRITE(Y2_ENABLE_PIN, !Y_ENABLE_ON); }
122
+    #define disable_y() { WRITE(Y_ENABLE_PIN,!Y_ENABLE_ON); WRITE(Y2_ENABLE_PIN, !Y_ENABLE_ON); axis_known_position[Y_AXIS] = false; }
123
   #else
123
   #else
124
     #define  enable_y() WRITE(Y_ENABLE_PIN, Y_ENABLE_ON)
124
     #define  enable_y() WRITE(Y_ENABLE_PIN, Y_ENABLE_ON)
125
-    #define disable_y() WRITE(Y_ENABLE_PIN,!Y_ENABLE_ON)
125
+    #define disable_y() { WRITE(Y_ENABLE_PIN,!Y_ENABLE_ON); axis_known_position[Y_AXIS] = false; }
126
   #endif
126
   #endif
127
 #else
127
 #else
128
   #define enable_y() ;
128
   #define enable_y() ;
132
 #if defined(Z_ENABLE_PIN) && Z_ENABLE_PIN > -1
132
 #if defined(Z_ENABLE_PIN) && Z_ENABLE_PIN > -1
133
   #ifdef Z_DUAL_STEPPER_DRIVERS
133
   #ifdef Z_DUAL_STEPPER_DRIVERS
134
     #define  enable_z() { WRITE(Z_ENABLE_PIN, Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN, Z_ENABLE_ON); }
134
     #define  enable_z() { WRITE(Z_ENABLE_PIN, Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN, Z_ENABLE_ON); }
135
-    #define disable_z() { WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN,!Z_ENABLE_ON); }
135
+    #define disable_z() { WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN,!Z_ENABLE_ON); axis_known_position[Z_AXIS] = false; }
136
   #else
136
   #else
137
     #define  enable_z() WRITE(Z_ENABLE_PIN, Z_ENABLE_ON)
137
     #define  enable_z() WRITE(Z_ENABLE_PIN, Z_ENABLE_ON)
138
-    #define disable_z() WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON)
138
+    #define disable_z() { WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); axis_known_position[Z_AXIS] = false; }
139
   #endif
139
   #endif
140
 #else
140
 #else
141
   #define enable_z() ;
141
   #define enable_z() ;
209
 #endif
209
 #endif
210
 extern float min_pos[3];
210
 extern float min_pos[3];
211
 extern float max_pos[3];
211
 extern float max_pos[3];
212
+extern bool axis_known_position[3];
212
 extern int fanSpeed;
213
 extern int fanSpeed;
213
 #ifdef BARICUDA
214
 #ifdef BARICUDA
214
 extern int ValvePressure;
215
 extern int ValvePressure;

+ 74
- 18
Marlin/Marlin_main.cpp View File

43
 #include "ConfigurationStore.h"
43
 #include "ConfigurationStore.h"
44
 #include "language.h"
44
 #include "language.h"
45
 #include "pins_arduino.h"
45
 #include "pins_arduino.h"
46
+#include "math.h"
46
 
47
 
47
 #ifdef BLINKM
48
 #ifdef BLINKM
48
 #include "BlinkM.h"
49
 #include "BlinkM.h"
191
 #endif
192
 #endif
192
 float min_pos[3] = { X_MIN_POS, Y_MIN_POS, Z_MIN_POS };
193
 float min_pos[3] = { X_MIN_POS, Y_MIN_POS, Z_MIN_POS };
193
 float max_pos[3] = { X_MAX_POS, Y_MAX_POS, Z_MAX_POS };
194
 float max_pos[3] = { X_MAX_POS, Y_MAX_POS, Z_MAX_POS };
195
+bool axis_known_position[3] = {false, false, false};
194
 
196
 
195
 // Extruder offset
197
 // Extruder offset
196
 #if EXTRUDERS > 1
198
 #if EXTRUDERS > 1
949
     current_position[axis] = 0;
951
     current_position[axis] = 0;
950
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
952
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
951
 	
953
 	
954
+
952
     // Engage Servo endstop if enabled
955
     // Engage Servo endstop if enabled
953
     #ifdef SERVO_ENDSTOPS
956
     #ifdef SERVO_ENDSTOPS
954
       #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0)
957
       #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0)
955
         if (axis==Z_AXIS) {
958
         if (axis==Z_AXIS) {
956
-          #if defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
957
-            destination[axis] = Z_RAISE_BEFORE_HOMING * axis_home_dir * (-1);    // Set destination away from bed
958
-            feedrate = max_feedrate[axis];
959
-            plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
960
-            st_synchronize();
961
-          #endif
962
           engage_z_probe();
959
           engage_z_probe();
963
         }
960
         }
964
 	    else
961
 	    else
1000
     destination[axis] = current_position[axis];
997
     destination[axis] = current_position[axis];
1001
     feedrate = 0.0;
998
     feedrate = 0.0;
1002
     endstops_hit_on_purpose();
999
     endstops_hit_on_purpose();
1000
+    axis_known_position[axis] = true;
1003
 
1001
 
1004
     // Retract Servo endstop if enabled
1002
     // Retract Servo endstop if enabled
1005
     #ifdef SERVO_ENDSTOPS
1003
     #ifdef SERVO_ENDSTOPS
1208
         HOMEAXIS(Y);
1206
         HOMEAXIS(Y);
1209
       }
1207
       }
1210
 
1208
 
1211
-      #if Z_HOME_DIR < 0                      // If homing towards BED do Z last
1212
-      if((home_all_axis) || (code_seen(axis_codes[Z_AXIS]))) {
1213
-        HOMEAXIS(Z);
1214
-      }
1215
-      #endif
1216
-
1217
       if(code_seen(axis_codes[X_AXIS]))
1209
       if(code_seen(axis_codes[X_AXIS]))
1218
       {
1210
       {
1219
         if(code_value_long() != 0) {
1211
         if(code_value_long() != 0) {
1226
           current_position[Y_AXIS]=code_value()+add_homeing[1];
1218
           current_position[Y_AXIS]=code_value()+add_homeing[1];
1227
         }
1219
         }
1228
       }
1220
       }
1221
+      
1222
+      #if Z_HOME_DIR < 0                      // If homing towards BED do Z last
1223
+        #ifndef Z_SAFE_HOMING
1224
+          if((home_all_axis) || (code_seen(axis_codes[Z_AXIS]))) {
1225
+            #if defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
1226
+              destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1);    // Set destination away from bed
1227
+              feedrate = max_feedrate[Z_AXIS];
1228
+              plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
1229
+              st_synchronize();
1230
+            #endif
1231
+            HOMEAXIS(Z);
1232
+          }
1233
+        #else                      // Z Safe mode activated. 
1234
+          if(home_all_axis) {
1235
+            destination[X_AXIS] = round(Z_SAFE_HOMING_X_POINT - X_PROBE_OFFSET_FROM_EXTRUDER);
1236
+            destination[Y_AXIS] = round(Z_SAFE_HOMING_Y_POINT - Y_PROBE_OFFSET_FROM_EXTRUDER);
1237
+            destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1);    // Set destination away from bed
1238
+            feedrate = XY_TRAVEL_SPEED;
1239
+            current_position[Z_AXIS] = 0;
1240
+			
1241
+            plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1242
+            plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
1243
+            st_synchronize();
1244
+            current_position[X_AXIS] = destination[X_AXIS];
1245
+            current_position[Y_AXIS] = destination[Y_AXIS];
1229
 
1246
 
1247
+            HOMEAXIS(Z);
1248
+          }
1249
+                                                // Let's see if X and Y are homed and probe is inside bed area.
1250
+          if(code_seen(axis_codes[Z_AXIS])) {
1251
+            if ( (axis_known_position[X_AXIS]) && (axis_known_position[Y_AXIS]) \
1252
+              && (current_position[X_AXIS]+X_PROBE_OFFSET_FROM_EXTRUDER >= X_MIN_POS) \
1253
+              && (current_position[X_AXIS]+X_PROBE_OFFSET_FROM_EXTRUDER <= X_MAX_POS) \
1254
+              && (current_position[Y_AXIS]+Y_PROBE_OFFSET_FROM_EXTRUDER >= Y_MIN_POS) \
1255
+              && (current_position[Y_AXIS]+Y_PROBE_OFFSET_FROM_EXTRUDER <= Y_MAX_POS)) {
1256
+
1257
+              current_position[Z_AXIS] = 0;
1258
+              plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);			  
1259
+              destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1);    // Set destination away from bed
1260
+              feedrate = max_feedrate[Z_AXIS];
1261
+              plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
1262
+              st_synchronize();
1263
+
1264
+              HOMEAXIS(Z);
1265
+            } else if (!((axis_known_position[X_AXIS]) && (axis_known_position[Y_AXIS]))) {
1266
+                LCD_MESSAGEPGM(MSG_POSITION_UNKNOWN);
1267
+                SERIAL_ECHO_START;
1268
+                SERIAL_ECHOLNPGM(MSG_POSITION_UNKNOWN);
1269
+            } else {
1270
+                LCD_MESSAGEPGM(MSG_ZPROBE_OUT);
1271
+                SERIAL_ECHO_START;
1272
+                SERIAL_ECHOLNPGM(MSG_ZPROBE_OUT);
1273
+            }
1274
+          }
1275
+        #endif
1276
+      #endif
1277
+
1278
+      
1279
+     
1230
       if(code_seen(axis_codes[Z_AXIS])) {
1280
       if(code_seen(axis_codes[Z_AXIS])) {
1231
         if(code_value_long() != 0) {
1281
         if(code_value_long() != 0) {
1232
           current_position[Z_AXIS]=code_value()+add_homeing[2];
1282
           current_position[Z_AXIS]=code_value()+add_homeing[2];
1233
         }
1283
         }
1234
       }
1284
       }
1235
       #ifdef ENABLE_AUTO_BED_LEVELING
1285
       #ifdef ENABLE_AUTO_BED_LEVELING
1236
-         current_position[Z_AXIS] -= Z_PROBE_OFFSET_FROM_EXTRUDER;  //Add Z_Probe offset (the distance is negative)
1286
+        if((home_all_axis) || (code_seen(axis_codes[Z_AXIS]))) {
1287
+          current_position[Z_AXIS] -= Z_PROBE_OFFSET_FROM_EXTRUDER;  //Add Z_Probe offset (the distance is negative)
1288
+        }
1237
       #endif
1289
       #endif
1238
       plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1290
       plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1239
 #endif // else DELTA
1291
 #endif // else DELTA
1275
             do_blocking_move_to(LEFT_PROBE_BED_POSITION - X_PROBE_OFFSET_FROM_EXTRUDER, BACK_PROBE_BED_POSITION - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);
1327
             do_blocking_move_to(LEFT_PROBE_BED_POSITION - X_PROBE_OFFSET_FROM_EXTRUDER, BACK_PROBE_BED_POSITION - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);
1276
 
1328
 
1277
             engage_z_probe();   // Engage Z Servo endstop if available
1329
             engage_z_probe();   // Engage Z Servo endstop if available
1278
-            
1279
             run_z_probe();
1330
             run_z_probe();
1280
             float z_at_xLeft_yBack = current_position[Z_AXIS];
1331
             float z_at_xLeft_yBack = current_position[Z_AXIS];
1332
+            retract_z_probe();
1281
 
1333
 
1282
             SERIAL_PROTOCOLPGM("Bed x: ");
1334
             SERIAL_PROTOCOLPGM("Bed x: ");
1283
             SERIAL_PROTOCOL(LEFT_PROBE_BED_POSITION);
1335
             SERIAL_PROTOCOL(LEFT_PROBE_BED_POSITION);
1290
             // prob 2
1342
             // prob 2
1291
             do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
1343
             do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
1292
             do_blocking_move_to(LEFT_PROBE_BED_POSITION - X_PROBE_OFFSET_FROM_EXTRUDER, FRONT_PROBE_BED_POSITION - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);
1344
             do_blocking_move_to(LEFT_PROBE_BED_POSITION - X_PROBE_OFFSET_FROM_EXTRUDER, FRONT_PROBE_BED_POSITION - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);
1345
+
1346
+            engage_z_probe();   // Engage Z Servo endstop if available
1293
             run_z_probe();
1347
             run_z_probe();
1294
             float z_at_xLeft_yFront = current_position[Z_AXIS];
1348
             float z_at_xLeft_yFront = current_position[Z_AXIS];
1295
-
1349
+            retract_z_probe();
1350
+            
1296
             SERIAL_PROTOCOLPGM("Bed x: ");
1351
             SERIAL_PROTOCOLPGM("Bed x: ");
1297
             SERIAL_PROTOCOL(LEFT_PROBE_BED_POSITION);
1352
             SERIAL_PROTOCOL(LEFT_PROBE_BED_POSITION);
1298
             SERIAL_PROTOCOLPGM(" y: ");
1353
             SERIAL_PROTOCOLPGM(" y: ");
1305
             do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
1360
             do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
1306
             // the current position will be updated by the blocking move so the head will not lower on this next call.
1361
             // the current position will be updated by the blocking move so the head will not lower on this next call.
1307
             do_blocking_move_to(RIGHT_PROBE_BED_POSITION - X_PROBE_OFFSET_FROM_EXTRUDER, FRONT_PROBE_BED_POSITION - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);
1362
             do_blocking_move_to(RIGHT_PROBE_BED_POSITION - X_PROBE_OFFSET_FROM_EXTRUDER, FRONT_PROBE_BED_POSITION - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);
1363
+
1364
+            engage_z_probe();   // Engage Z Servo endstop if available
1308
             run_z_probe();
1365
             run_z_probe();
1309
             float z_at_xRight_yFront = current_position[Z_AXIS];
1366
             float z_at_xRight_yFront = current_position[Z_AXIS];
1310
-
1367
+            retract_z_probe(); // Retract Z Servo endstop if available
1368
+            
1311
             SERIAL_PROTOCOLPGM("Bed x: ");
1369
             SERIAL_PROTOCOLPGM("Bed x: ");
1312
             SERIAL_PROTOCOL(RIGHT_PROBE_BED_POSITION);
1370
             SERIAL_PROTOCOL(RIGHT_PROBE_BED_POSITION);
1313
             SERIAL_PROTOCOLPGM(" y: ");
1371
             SERIAL_PROTOCOLPGM(" y: ");
1320
 
1378
 
1321
             set_bed_level_equation(z_at_xLeft_yFront, z_at_xRight_yFront, z_at_xLeft_yBack);
1379
             set_bed_level_equation(z_at_xLeft_yFront, z_at_xRight_yFront, z_at_xLeft_yBack);
1322
 
1380
 
1323
-            retract_z_probe(); // Retract Z Servo endstop if available
1324
-            
1325
             st_synchronize();            
1381
             st_synchronize();            
1326
 
1382
 
1327
             // The following code correct the Z height difference from z-probe position and hotend tip position.
1383
             // The following code correct the Z height difference from z-probe position and hotend tip position.

+ 18
- 0
Marlin/language.h View File

136
 	#define MSG_FILAMENTCHANGE "Change filament"
136
 	#define MSG_FILAMENTCHANGE "Change filament"
137
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
137
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
138
 	#define MSG_CNG_SDCARD "Change SD-Card"
138
 	#define MSG_CNG_SDCARD "Change SD-Card"
139
+    #define MSG_ZPROBE_OUT "ZProbe Outside Bed"
140
+    #define MSG_POSITION_UNKNOWN "Home X/Y before Z"
139
 
141
 
140
 // Serial Console Messages
142
 // Serial Console Messages
141
 
143
 
301
 	#define MSG_FILAMENTCHANGE "Change filament"
303
 	#define MSG_FILAMENTCHANGE "Change filament"
302
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
304
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
303
 	#define MSG_CNG_SDCARD "Change SD-Card"
305
 	#define MSG_CNG_SDCARD "Change SD-Card"
306
+    #define MSG_ZPROBE_OUT "ZProbe Outside Bed"
307
+    #define MSG_POSITION_UNKNOWN "Home X/Y before Z"
304
 
308
 
305
 // Serial Console Messages
309
 // Serial Console Messages
306
 
310
 
465
 	#define MSG_FILAMENTCHANGE "Changer filament"
469
 	#define MSG_FILAMENTCHANGE "Changer filament"
466
 	#define MSG_INIT_SDCARD "Init. la carte SD"	
470
 	#define MSG_INIT_SDCARD "Init. la carte SD"	
467
 	#define MSG_CNG_SDCARD "Changer de carte SD"
471
 	#define MSG_CNG_SDCARD "Changer de carte SD"
472
+    #define MSG_ZPROBE_OUT "ZProbe Outside Bed"
473
+    #define MSG_POSITION_UNKNOWN "Home X/Y before Z"
468
 
474
 
469
 // Serial Console Messages
475
 // Serial Console Messages
470
 
476
 
632
 	#define MSG_FILAMENTCHANGE "Filament wechseln"
638
 	#define MSG_FILAMENTCHANGE "Filament wechseln"
633
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
639
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
634
 	#define MSG_CNG_SDCARD "Change SD-Card"
640
 	#define MSG_CNG_SDCARD "Change SD-Card"
641
+    #define MSG_ZPROBE_OUT "ZProbe Outside Bed"
642
+    #define MSG_POSITION_UNKNOWN "Home X/Y before Z"
635
 	
643
 	
636
 // Serial Console Messages
644
 // Serial Console Messages
637
 
645
 
803
 	#define MSG_RETRACT_ARROW "Retraer"
811
 	#define MSG_RETRACT_ARROW "Retraer"
804
 	#define MSG_PART_RELEASE "Desacople Parcial"
812
 	#define MSG_PART_RELEASE "Desacople Parcial"
805
 	#define MSG_STEPPER_RELEASED "Desacoplada."
813
 	#define MSG_STEPPER_RELEASED "Desacoplada."
814
+    #define MSG_ZPROBE_OUT "ZProbe Outside Bed"
815
+    #define MSG_POSITION_UNKNOWN "Home X/Y before Z"
806
 
816
 
807
 // Serial Console Messages
817
 // Serial Console Messages
808
 
818
 
964
 	#define MSG_FILAMENTCHANGE "Change filament"
974
 	#define MSG_FILAMENTCHANGE "Change filament"
965
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
975
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
966
 	#define MSG_CNG_SDCARD "Change SD-Card"
976
 	#define MSG_CNG_SDCARD "Change SD-Card"
977
+    #define MSG_ZPROBE_OUT "ZProbe Outside Bed"
978
+    #define MSG_POSITION_UNKNOWN "Home X/Y before Z"
967
 
979
 
968
 // Serial Console Messages
980
 // Serial Console Messages
969
 
981
 
1125
 	#define MSG_FILAMENTCHANGE       "Cambia filamento"
1137
 	#define MSG_FILAMENTCHANGE       "Cambia filamento"
1126
 	#define MSG_INIT_SDCARD          "Iniz. SD-Card"
1138
 	#define MSG_INIT_SDCARD          "Iniz. SD-Card"
1127
 	#define MSG_CNG_SDCARD           "Cambia SD-Card"
1139
 	#define MSG_CNG_SDCARD           "Cambia SD-Card"
1140
+    #define MSG_ZPROBE_OUT "ZProbe Outside Bed"
1141
+    #define MSG_POSITION_UNKNOWN "Home X/Y before Z"
1128
 
1142
 
1129
 	// Serial Console Messages
1143
 	// Serial Console Messages
1130
 
1144
 
1295
 	#define MSG_FILAMENTCHANGE "Change filament"
1309
 	#define MSG_FILAMENTCHANGE "Change filament"
1296
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
1310
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
1297
 	#define MSG_CNG_SDCARD "Change SD-Card"
1311
 	#define MSG_CNG_SDCARD "Change SD-Card"
1312
+    #define MSG_ZPROBE_OUT "Sonda fora da mesa"
1313
+    #define MSG_POSITION_UNKNOWN "Home X/Y antes de Z"
1298
 
1314
 
1299
 // Serial Console Messages
1315
 // Serial Console Messages
1300
 
1316
 
1461
 	#define MSG_FILAMENTCHANGE "Change filament"
1477
 	#define MSG_FILAMENTCHANGE "Change filament"
1462
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
1478
 	#define MSG_INIT_SDCARD "Init. SD-Card"	
1463
 	#define MSG_CNG_SDCARD "Change SD-Card"
1479
 	#define MSG_CNG_SDCARD "Change SD-Card"
1480
+    #define MSG_ZPROBE_OUT "ZProbe Outside Bed"
1481
+    #define MSG_POSITION_UNKNOWN "Home X/Y before Z"
1464
 
1482
 
1465
 // Serial Console Messages
1483
 // Serial Console Messages
1466
 
1484
 

Loading…
Cancel
Save