소스 검색

Update current position in M852

Scott Lahteine 7 년 전
부모
커밋
117fc872a7
1개의 변경된 파일32개의 추가작업 그리고 15개의 파일을 삭제
  1. 32
    15
      Marlin/src/gcode/calibrate/M852.cpp

+ 32
- 15
Marlin/src/gcode/calibrate/M852.cpp 파일 보기

@@ -36,37 +36,47 @@
36 36
  *  K[yz_factor] - New YZ skew factor
37 37
  */
38 38
 void GcodeSuite::M852() {
39
-  const bool ijk = parser.seen('I') || parser.seen('S')
40
-    #if ENABLED(SKEW_CORRECTION_FOR_Z)
41
-      || parser.seen('J') || parser.seen('K')
42
-    #endif
43
-  ;
44
-  bool badval = false;
39
+  uint8_t ijk = 0, badval = 0, setval = 0;
45 40
 
46 41
   if (parser.seen('I') || parser.seen('S')) {
42
+    ++ijk;
47 43
     const float value = parser.value_linear_units();
48
-    if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX))
49
-      planner.xy_skew_factor = value;
44
+    if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) {
45
+      if (planner.xy_skew_factor != value) {
46
+        planner.xy_skew_factor = value;
47
+        ++setval;
48
+      }
49
+    }
50 50
     else
51
-      badval = true;
51
+      ++badval;
52 52
   }
53 53
 
54 54
   #if ENABLED(SKEW_CORRECTION_FOR_Z)
55 55
 
56 56
     if (parser.seen('J')) {
57
+      ++ijk;
57 58
       const float value = parser.value_linear_units();
58
-      if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX))
59
-        planner.xz_skew_factor = value;
59
+      if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) {
60
+        if (planner.xz_skew_factor != value) {
61
+          planner.xz_skew_factor = value;
62
+          ++setval;
63
+        }
64
+      }
60 65
       else
61
-        badval = true;
66
+        ++badval;
62 67
     }
63 68
 
64 69
     if (parser.seen('K')) {
70
+      ++ijk;
65 71
       const float value = parser.value_linear_units();
66
-      if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX))
67
-        planner.yz_skew_factor = value;
72
+      if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) {
73
+        if (planner.yz_skew_factor != value) {
74
+          planner.yz_skew_factor = value;
75
+          ++setval;
76
+        }
77
+      }
68 78
       else
69
-        badval = true;
79
+        ++badval;
70 80
     }
71 81
 
72 82
   #endif
@@ -74,6 +84,13 @@ void GcodeSuite::M852() {
74 84
   if (badval)
75 85
     SERIAL_ECHOLNPGM(MSG_SKEW_MIN " " STRINGIFY(SKEW_FACTOR_MIN) " " MSG_SKEW_MAX " " STRINGIFY(SKEW_FACTOR_MAX));
76 86
 
87
+  // When skew is changed the current position changes
88
+  if (setval) {
89
+    set_current_from_steppers_for_axis(ALL_AXES);
90
+    SYNC_PLAN_POSITION_KINEMATIC();
91
+    report_current_position();
92
+  }
93
+
77 94
   if (!ijk) {
78 95
     SERIAL_ECHO_START();
79 96
     SERIAL_ECHOPAIR(MSG_SKEW_FACTOR " XY: ", planner.xy_skew_factor);

Loading…
취소
저장