Browse Source

Use babystepping to adjust bed probe z-offset

Thomas Moore 8 years ago
parent
commit
361655828f
2 changed files with 45 additions and 5 deletions
  1. 5
    0
      Marlin/Marlin_main.cpp
  2. 40
    5
      Marlin/ultralcd.cpp

+ 5
- 0
Marlin/Marlin_main.cpp View File

@@ -7991,6 +7991,11 @@ inline void gcode_M503() {
7991 7991
           #endif
7992 7992
         #endif
7993 7993
 
7994
+        #if ENABLED(BABYSTEPPING)
7995
+          if (planner.abl_enabled)
7996
+            thermalManager.babystep_axis(Z_AXIS, lround((value - zprobe_zoffset) * planner.axis_steps_per_mm[Z_AXIS]));
7997
+        #endif
7998
+
7994 7999
         zprobe_zoffset = value;
7995 8000
         SERIAL_ECHO(zprobe_zoffset);
7996 8001
       }

+ 40
- 5
Marlin/ultralcd.cpp View File

@@ -834,7 +834,7 @@ void kill_screen(const char* lcd_msg) {
834 834
       if (lcd_clicked) { defer_return_to_status = false; return lcd_goto_previous_menu(); }
835 835
       ENCODER_DIRECTION_NORMAL();
836 836
       if (encoderPosition) {
837
-        int babystep_increment = (int32_t)encoderPosition * (BABYSTEP_MULTIPLICATOR);
837
+        const int babystep_increment = (int32_t)encoderPosition * (BABYSTEP_MULTIPLICATOR);
838 838
         encoderPosition = 0;
839 839
         lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
840 840
         thermalManager.babystep_axis(axis, babystep_increment);
@@ -850,8 +850,37 @@ void kill_screen(const char* lcd_msg) {
850 850
       void lcd_babystep_x() { lcd_goto_screen(_lcd_babystep_x); babysteps_done = 0; defer_return_to_status = true; }
851 851
       void lcd_babystep_y() { lcd_goto_screen(_lcd_babystep_y); babysteps_done = 0; defer_return_to_status = true; }
852 852
     #endif
853
-    void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, PSTR(MSG_BABYSTEPPING_Z)); }
854
-    void lcd_babystep_z() { lcd_goto_screen(_lcd_babystep_z); babysteps_done = 0; defer_return_to_status = true; }
853
+
854
+    #if HAS_BED_PROBE
855
+
856
+      void lcd_babystep_zoffset() {
857
+        if (lcd_clicked) { defer_return_to_status = false; return lcd_goto_previous_menu(); }
858
+        defer_return_to_status = true;
859
+        ENCODER_DIRECTION_NORMAL();
860
+        if (encoderPosition) {
861
+          const int babystep_increment = (int32_t)encoderPosition * (BABYSTEP_MULTIPLICATOR);
862
+          encoderPosition = 0;
863
+
864
+          const float new_zoffset = zprobe_zoffset + steps_to_mm[Z_AXIS] * babystep_increment;
865
+          if (WITHIN(new_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
866
+            
867
+            if (planner.abl_enabled)
868
+              thermalManager.babystep_axis(Z_AXIS, babystep_increment);
869
+      
870
+            zprobe_zoffset = new_zoffset;
871
+            lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
872
+          }
873
+        }
874
+        if (lcdDrawUpdate)
875
+          lcd_implementation_drawedit(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(zprobe_zoffset));
876
+      }
877
+
878
+    #else // !HAS_BED_PROBE
879
+
880
+      void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, PSTR(MSG_BABYSTEPPING_Z)); }
881
+      void lcd_babystep_z() { lcd_goto_screen(_lcd_babystep_z); babysteps_done = 0; defer_return_to_status = true; }
882
+
883
+    #endif // HAS_BED_PROBE
855 884
 
856 885
   #endif //BABYSTEPPING
857 886
 
@@ -1057,7 +1086,9 @@ void kill_screen(const char* lcd_msg) {
1057 1086
         MENU_ITEM(submenu, MSG_BABYSTEP_X, lcd_babystep_x);
1058 1087
         MENU_ITEM(submenu, MSG_BABYSTEP_Y, lcd_babystep_y);
1059 1088
       #endif //BABYSTEP_XY
1060
-      MENU_ITEM(submenu, MSG_BABYSTEP_Z, lcd_babystep_z);
1089
+      #if !HAS_BED_PROBE
1090
+        MENU_ITEM(submenu, MSG_BABYSTEP_Z, lcd_babystep_z);
1091
+      #endif
1061 1092
     #endif
1062 1093
 
1063 1094
     //
@@ -2378,7 +2409,11 @@ void kill_screen(const char* lcd_msg) {
2378 2409
     START_MENU();
2379 2410
     MENU_BACK(MSG_CONTROL);
2380 2411
     #if HAS_BED_PROBE
2381
-      MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
2412
+      #if ENABLED(BABYSTEPPING)
2413
+        MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
2414
+      #else
2415
+        MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
2416
+      #endif
2382 2417
     #endif
2383 2418
     // Manual bed leveling, Bed Z:
2384 2419
     #if ENABLED(MESH_BED_LEVELING) && ENABLED(LCD_BED_LEVELING)

Loading…
Cancel
Save