Browse Source

Various improvements - mostly UBL-related (#6607)

UBL Clean up.
bgort 8 years ago
parent
commit
a59066bca9
4 changed files with 35 additions and 40 deletions
  1. 3
    3
      Marlin/Marlin_main.cpp
  2. 2
    1
      Marlin/least_squares_fit.cpp
  3. 4
    14
      Marlin/ubl.cpp
  4. 26
    22
      Marlin/ubl_G29.cpp

+ 3
- 3
Marlin/Marlin_main.cpp View File

4360
 
4360
 
4361
       verbose_level = code_seen('V') && code_has_value() ? code_value_int() : 0;
4361
       verbose_level = code_seen('V') && code_has_value() ? code_value_int() : 0;
4362
       if (!WITHIN(verbose_level, 0, 4)) {
4362
       if (!WITHIN(verbose_level, 0, 4)) {
4363
-        SERIAL_PROTOCOLLNPGM("?(V)erbose Level is implausible (0-4).");
4363
+        SERIAL_PROTOCOLLNPGM("?(V)erbose level is implausible (0-4).");
4364
         return;
4364
         return;
4365
       }
4365
       }
4366
 
4366
 
5081
 
5081
 
5082
       const int8_t verbose_level = code_seen('V') ? code_value_byte() : 1;
5082
       const int8_t verbose_level = code_seen('V') ? code_value_byte() : 1;
5083
       if (!WITHIN(verbose_level, 0, 2)) {
5083
       if (!WITHIN(verbose_level, 0, 2)) {
5084
-        SERIAL_PROTOCOLLNPGM("?(V)erbose Level is implausible (0-2).");
5084
+        SERIAL_PROTOCOLLNPGM("?(V)erbose level is implausible (0-2).");
5085
         return;
5085
         return;
5086
       }
5086
       }
5087
 
5087
 
6183
 
6183
 
6184
     const int8_t verbose_level = code_seen('V') ? code_value_byte() : 1;
6184
     const int8_t verbose_level = code_seen('V') ? code_value_byte() : 1;
6185
     if (!WITHIN(verbose_level, 0, 4)) {
6185
     if (!WITHIN(verbose_level, 0, 4)) {
6186
-      SERIAL_PROTOCOLLNPGM("?Verbose Level not plausible (0-4).");
6186
+      SERIAL_PROTOCOLLNPGM("?(V)erbose level is implausible (0-4).");
6187
       return;
6187
       return;
6188
     }
6188
     }
6189
 
6189
 

+ 2
- 1
Marlin/least_squares_fit.cpp View File

73
   lsf->yzbar = lsf->yzbar / N - lsf->ybar * lsf->zbar;
73
   lsf->yzbar = lsf->yzbar / N - lsf->ybar * lsf->zbar;
74
   lsf->xzbar = lsf->xzbar / N - lsf->xbar * lsf->zbar;
74
   lsf->xzbar = lsf->xzbar / N - lsf->xbar * lsf->zbar;
75
   const float DD = lsf->x2bar * lsf->y2bar - sq(lsf->xybar);
75
   const float DD = lsf->x2bar * lsf->y2bar - sq(lsf->xybar);
76
+
76
   if (fabs(DD) <= 1e-10 * (lsf->max_absx + lsf->max_absy))
77
   if (fabs(DD) <= 1e-10 * (lsf->max_absx + lsf->max_absy))
77
-    return -1;
78
+    return 1;
78
 
79
 
79
   lsf->A = (lsf->yzbar * lsf->xybar - lsf->xzbar * lsf->y2bar) / DD;
80
   lsf->A = (lsf->yzbar * lsf->xybar - lsf->xzbar * lsf->y2bar) / DD;
80
   lsf->B = (lsf->xzbar * lsf->xybar - lsf->yzbar * lsf->x2bar) / DD;
81
   lsf->B = (lsf->xzbar * lsf->xybar - lsf->yzbar * lsf->x2bar) / DD;

+ 4
- 14
Marlin/ubl.cpp View File

50
     safe_delay(10);
50
     safe_delay(10);
51
   }
51
   }
52
 
52
 
53
-  static void serial_echo_mspaces(const uint8_t cnt) {
54
-    for (uint8_t i = GRID_MAX_POINTS_X - 1; --i;) {
55
-      SERIAL_ECHO_SP((uint8_t)cnt);
56
-      safe_delay(10);
57
-    }
58
-  }
59
-
60
   ubl_state unified_bed_leveling::state;
53
   ubl_state unified_bed_leveling::state;
61
 
54
 
62
   float unified_bed_leveling::z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y],
55
   float unified_bed_leveling::z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y],
148
     if (map0) {
141
     if (map0) {
149
       SERIAL_PROTOCOLLNPGM("\nBed Topography Report:\n");
142
       SERIAL_PROTOCOLLNPGM("\nBed Topography Report:\n");
150
       serial_echo_xy(0, GRID_MAX_POINTS_Y - 1);
143
       serial_echo_xy(0, GRID_MAX_POINTS_Y - 1);
151
-      SERIAL_ECHO_SP(3);
152
-      serial_echo_mspaces(spaces);
144
+      SERIAL_ECHO_SP(spaces * (GRID_MAX_POINTS_X - 2) + 3);
153
       serial_echo_xy(GRID_MAX_POINTS_X - 1, GRID_MAX_POINTS_Y - 1);
145
       serial_echo_xy(GRID_MAX_POINTS_X - 1, GRID_MAX_POINTS_Y - 1);
154
       SERIAL_EOL;
146
       SERIAL_EOL;
155
       serial_echo_xy(UBL_MESH_MIN_X, UBL_MESH_MAX_Y);
147
       serial_echo_xy(UBL_MESH_MIN_X, UBL_MESH_MAX_Y);
156
-      serial_echo_mspaces(spaces);
148
+      SERIAL_ECHO_SP(spaces * (GRID_MAX_POINTS_X - 2));
157
       serial_echo_xy(UBL_MESH_MAX_X, UBL_MESH_MAX_Y);
149
       serial_echo_xy(UBL_MESH_MAX_X, UBL_MESH_MAX_Y);
158
       SERIAL_EOL;
150
       SERIAL_EOL;
159
     }
151
     }
198
 
190
 
199
     if (map0) {
191
     if (map0) {
200
       serial_echo_xy(UBL_MESH_MIN_X, UBL_MESH_MIN_Y);
192
       serial_echo_xy(UBL_MESH_MIN_X, UBL_MESH_MIN_Y);
201
-      SERIAL_ECHO_SP(4);
202
-      serial_echo_mspaces(spaces);
193
+      SERIAL_ECHO_SP(spaces * (GRID_MAX_POINTS_X - 2) + 4);
203
       serial_echo_xy(UBL_MESH_MAX_X, UBL_MESH_MIN_Y);
194
       serial_echo_xy(UBL_MESH_MAX_X, UBL_MESH_MIN_Y);
204
       SERIAL_EOL;
195
       SERIAL_EOL;
205
       serial_echo_xy(0, 0);
196
       serial_echo_xy(0, 0);
206
-      SERIAL_ECHO_SP(5);
207
-      serial_echo_mspaces(spaces);
197
+      SERIAL_ECHO_SP(spaces * (GRID_MAX_POINTS_X - 2) + 5);
208
       serial_echo_xy(GRID_MAX_POINTS_X - 1, 0);
198
       serial_echo_xy(GRID_MAX_POINTS_X - 1, 0);
209
       SERIAL_EOL;
199
       SERIAL_EOL;
210
     }
200
     }

+ 26
- 22
Marlin/ubl_G29.cpp View File

311
   #define USE_PROBE_AS_REFERENCE 1
311
   #define USE_PROBE_AS_REFERENCE 1
312
 
312
 
313
   // The simple parameter flags and values are 'static' so parameter parsing can be in a support routine.
313
   // The simple parameter flags and values are 'static' so parameter parsing can be in a support routine.
314
-  static int g29_verbose_level, phase_value = -1, repetition_cnt,
314
+  static int g29_verbose_level, phase_value, repetition_cnt,
315
              storage_slot = 0, map_type, grid_size;
315
              storage_slot = 0, map_type, grid_size;
316
   static bool repeat_flag, c_flag, x_flag, y_flag;
316
   static bool repeat_flag, c_flag, x_flag, y_flag;
317
   static float x_pos, y_pos, measured_z, card_thickness = 0.0, ubl_constant = 0.0;
317
   static float x_pos, y_pos, measured_z, card_thickness = 0.0, ubl_constant = 0.0;
318
 
318
 
319
-    extern void lcd_setstatus(const char* message, const bool persist);
320
-    extern void lcd_setstatuspgm(const char* message, const uint8_t level);
319
+  extern void lcd_setstatus(const char* message, const bool persist);
320
+  extern void lcd_setstatuspgm(const char* message, const uint8_t level);
321
 
321
 
322
   void __attribute__((optimize("O0"))) gcode_G29() {
322
   void __attribute__((optimize("O0"))) gcode_G29() {
323
 
323
 
324
-
325
     if (ubl.eeprom_start < 0) {
324
     if (ubl.eeprom_start < 0) {
326
       SERIAL_PROTOCOLLNPGM("?You need to enable your EEPROM and initialize it");
325
       SERIAL_PROTOCOLLNPGM("?You need to enable your EEPROM and initialize it");
327
       SERIAL_PROTOCOLLNPGM("with M502, M500, M501 in that order.\n");
326
       SERIAL_PROTOCOLLNPGM("with M502, M500, M501 in that order.\n");
384
     }
383
     }
385
 
384
 
386
     if (code_seen('J')) {
385
     if (code_seen('J')) {
387
-      if (!WITHIN(grid_size, 2, 9)) {
388
-        SERIAL_PROTOCOLLNPGM("ERROR - grid size must be between 2 and 9");
389
-        return;
390
-      }
391
       ubl.save_ubl_active_state_and_disable();
386
       ubl.save_ubl_active_state_and_disable();
392
       ubl.tilt_mesh_based_on_probed_grid(code_seen('O') || code_seen('M'));
387
       ubl.tilt_mesh_based_on_probed_grid(code_seen('O') || code_seen('M'));
393
       ubl.restore_ubl_active_state_and_leave();
388
       ubl.restore_ubl_active_state_and_leave();
394
     }
389
     }
395
 
390
 
396
     if (code_seen('P')) {
391
     if (code_seen('P')) {
397
-      phase_value = code_value_int();
398
-      if (!WITHIN(phase_value, 0, 7)) {
399
-        SERIAL_PROTOCOLLNPGM("Invalid Phase value. (0-4)\n");
400
-        return;
392
+      if (WITHIN(phase_value,0,1) && ubl.state.eeprom_storage_slot==-1) {
393
+        ubl.state.eeprom_storage_slot=0;
394
+        SERIAL_PROTOCOLLNPGM("Default storage slot 0 selected.\n");
401
       }
395
       }
396
+
402
       switch (phase_value) {
397
       switch (phase_value) {
403
         case 0:
398
         case 0:
404
           //
399
           //
420
             SERIAL_PROTOCOLPAIR("Probing Mesh Points Closest to (", x_pos);
415
             SERIAL_PROTOCOLPAIR("Probing Mesh Points Closest to (", x_pos);
421
             SERIAL_PROTOCOLCHAR(',');
416
             SERIAL_PROTOCOLCHAR(',');
422
             SERIAL_PROTOCOL(y_pos);
417
             SERIAL_PROTOCOL(y_pos);
423
-            SERIAL_PROTOCOLLNPGM(")\n");
418
+            SERIAL_PROTOCOLLNPGM(").\n");
424
           }
419
           }
425
           ubl.probe_entire_mesh(x_pos + X_PROBE_OFFSET_FROM_EXTRUDER, y_pos + Y_PROBE_OFFSET_FROM_EXTRUDER,
420
           ubl.probe_entire_mesh(x_pos + X_PROBE_OFFSET_FROM_EXTRUDER, y_pos + Y_PROBE_OFFSET_FROM_EXTRUDER,
426
                             code_seen('O') || code_seen('M'), code_seen('E'), code_seen('U'));
421
                             code_seen('O') || code_seen('M'), code_seen('E'), code_seen('U'));
460
             }
455
             }
461
           }
456
           }
462
           manually_probe_remaining_mesh(x_pos, y_pos, height, card_thickness, code_seen('O') || code_seen('M'));
457
           manually_probe_remaining_mesh(x_pos, y_pos, height, card_thickness, code_seen('O') || code_seen('M'));
463
-          SERIAL_PROTOCOLLNPGM("G29 P2 finished");
458
+          SERIAL_PROTOCOLLNPGM("G29 P2 finished.");
464
 
459
 
465
         } break;
460
         } break;
466
 
461
 
757
   }
752
   }
758
 
753
 
759
   void unified_bed_leveling::tilt_mesh_based_on_3pts(const float &z1, const float &z2, const float &z3) {
754
   void unified_bed_leveling::tilt_mesh_based_on_3pts(const float &z1, const float &z2, const float &z3) {
760
-    int i, j;
761
-
762
     matrix_3x3 rotation;
755
     matrix_3x3 rotation;
763
     vector_3 v1 = vector_3( (UBL_PROBE_PT_1_X - UBL_PROBE_PT_2_X),
756
     vector_3 v1 = vector_3( (UBL_PROBE_PT_1_X - UBL_PROBE_PT_2_X),
764
                             (UBL_PROBE_PT_1_Y - UBL_PROBE_PT_2_Y),
757
                             (UBL_PROBE_PT_1_Y - UBL_PROBE_PT_2_Y),
892
       //, min(planner.max_feedrate_mm_s[X_AXIS], planner.max_feedrate_mm_s[Y_AXIS]) / 2.0);
885
       //, min(planner.max_feedrate_mm_s[X_AXIS], planner.max_feedrate_mm_s[Y_AXIS]) / 2.0);
893
 
886
 
894
     stepper.synchronize();
887
     stepper.synchronize();
895
-    SERIAL_PROTOCOLPGM("Place shim under nozzle");
888
+    SERIAL_PROTOCOLPGM("Place shim under nozzle.");
896
     say_and_take_a_measurement();
889
     say_and_take_a_measurement();
897
 
890
 
898
     const float z1 = use_encoder_wheel_to_measure_point();
891
     const float z1 = use_encoder_wheel_to_measure_point();
899
     do_blocking_move_to_z(current_position[Z_AXIS] + SIZE_OF_LITTLE_RAISE);
892
     do_blocking_move_to_z(current_position[Z_AXIS] + SIZE_OF_LITTLE_RAISE);
900
     stepper.synchronize();
893
     stepper.synchronize();
901
 
894
 
902
-    SERIAL_PROTOCOLPGM("Remove shim");
895
+    SERIAL_PROTOCOLPGM("Remove shim.");
903
     say_and_take_a_measurement();
896
     say_and_take_a_measurement();
904
 
897
 
905
     const float z2 = use_encoder_wheel_to_measure_point();
898
     const float z2 = use_encoder_wheel_to_measure_point();
1039
 
1032
 
1040
     g29_verbose_level = code_seen('V') ? code_value_int() : 0;
1033
     g29_verbose_level = code_seen('V') ? code_value_int() : 0;
1041
     if (!WITHIN(g29_verbose_level, 0, 4)) {
1034
     if (!WITHIN(g29_verbose_level, 0, 4)) {
1042
-      SERIAL_PROTOCOLLNPGM("?(V)erbose Level is implausible (0-4)\n");
1035
+      SERIAL_PROTOCOLLNPGM("?(V)erbose level is implausible (0-4).\n");
1043
       err_flag = true;
1036
       err_flag = true;
1044
     }
1037
     }
1045
 
1038
 
1039
+    if (code_seen('P')) {
1040
+      phase_value = code_value_int();
1041
+      if (!WITHIN(phase_value, 0, 6)) {
1042
+        SERIAL_PROTOCOLLNPGM("?(P)hase value invalid (0-6).\n");
1043
+        err_flag = true;
1044
+      }
1045
+    }
1046
+
1046
     if (code_seen('J')) {
1047
     if (code_seen('J')) {
1047
       grid_size = code_has_value() ? code_value_int() : 3;
1048
       grid_size = code_has_value() ? code_value_int() : 3;
1048
-      if (!WITHIN(grid_size, 2, 5)) {
1049
-        SERIAL_PROTOCOLLNPGM("Invalid grid probe points specified.\n");
1049
+      if (!WITHIN(grid_size, 2, 9)) {
1050
+        SERIAL_PROTOCOLLNPGM("?Invalid grid size (J) specified (2-9).\n");
1050
         err_flag = true;
1051
         err_flag = true;
1051
       }
1052
       }
1052
     }
1053
     }
1607
       zig_zag ^= true;
1608
       zig_zag ^= true;
1608
     }
1609
     }
1609
 
1610
 
1610
-    const int status = finish_incremental_LSF(&lsf_results);
1611
+    if (finish_incremental_LSF(&lsf_results)) {
1612
+      SERIAL_ECHOPGM("Could not complete LSF!");
1613
+      return;
1614
+    }
1611
 
1615
 
1612
     if (g29_verbose_level > 3) {
1616
     if (g29_verbose_level > 3) {
1613
       SERIAL_ECHOPGM("LSF Results A=");
1617
       SERIAL_ECHOPGM("LSF Results A=");

Loading…
Cancel
Save