diff --git a/Marlin/G26_Mesh_Validation_Tool.cpp b/Marlin/G26_Mesh_Validation_Tool.cpp index e4fa01dd3c..596f24f12c 100644 --- a/Marlin/G26_Mesh_Validation_Tool.cpp +++ b/Marlin/G26_Mesh_Validation_Tool.cpp @@ -69,7 +69,7 @@ * B # Bed Set the Bed Temperature. If not specified, a default of 60 C. will be assumed. * * C Current When searching for Mesh Intersection points to draw, use the current nozzle location - as the base for any distance comparison. + * as the base for any distance comparison. * * D Disable Disable the Unified Bed Leveling System. In the normal case the user is invoking this * command to see how well a Mesh as been adjusted to match a print surface. In order to do @@ -748,10 +748,7 @@ } /** - * We save the question of what to do with the Unified Bed Leveling System's Activation until the very - * end. The reason is, if one of the parameters specified up above is incorrect, we don't want to - * alter the system's status. We wait until we know everything is correct before altering the state - * of the system. + * Wait until all parameters are verified before altering the state! */ ubl.state.active = !code_seen('D'); diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 6f6a15ea3d..07a011cc63 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -7610,13 +7610,14 @@ inline void gcode_M205() { /** * M665: Set delta configurations * - * H = diagonal rod // AC-version + * H = delta height * L = diagonal rod * R = delta radius * S = segments per second - * A = Alpha (Tower 1) diagonal rod trim - * B = Beta (Tower 2) diagonal rod trim - * C = Gamma (Tower 3) diagonal rod trim + * B = delta calibration radius + * X = Alpha (Tower 1) angle trim + * Y = Beta (Tower 2) angle trim + * Z = Rotate A and B by this angle */ inline void gcode_M665() { if (code_seen('H')) { @@ -7628,11 +7629,11 @@ inline void gcode_M205() { if (code_seen('R')) delta_radius = code_value_linear_units(); if (code_seen('S')) delta_segments_per_second = code_value_float(); if (code_seen('B')) delta_calibration_radius = code_value_float(); - if (code_seen('X')) delta_tower_angle_trim[A_AXIS] = code_value_linear_units(); - if (code_seen('Y')) delta_tower_angle_trim[B_AXIS] = code_value_linear_units(); + if (code_seen('X')) delta_tower_angle_trim[A_AXIS] = code_value_float(); + if (code_seen('Y')) delta_tower_angle_trim[B_AXIS] = code_value_float(); if (code_seen('Z')) { // rotate all 3 axis for Z = 0 - delta_tower_angle_trim[A_AXIS] -= code_value_linear_units(); - delta_tower_angle_trim[B_AXIS] -= code_value_linear_units(); + delta_tower_angle_trim[A_AXIS] -= code_value_float(); + delta_tower_angle_trim[B_AXIS] -= code_value_float(); } recalc_delta_settings(delta_radius, delta_diagonal_rod); } @@ -11235,32 +11236,36 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { * Returns true if the caller didn't update current_position. */ inline bool prepare_move_to_destination_cartesian() { - // Do not use feedrate_percentage for E or Z only moves - if (current_position[X_AXIS] == destination[X_AXIS] && current_position[Y_AXIS] == destination[Y_AXIS]) { - line_to_destination(); - } - else { - #if ENABLED(MESH_BED_LEVELING) - if (mbl.active()) { - mesh_line_to_destination(MMS_SCALED(feedrate_mm_s)); - return true; - } - else - #elif ENABLED(AUTO_BED_LEVELING_UBL) - if (ubl.state.active) { - ubl_line_to_destination_cartesian(MMS_SCALED(feedrate_mm_s), active_extruder); - return true; - } - else - #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) - if (planner.abl_enabled) { - bilinear_line_to_destination(MMS_SCALED(feedrate_mm_s)); - return true; - } - else - #endif - line_to_destination(MMS_SCALED(feedrate_mm_s)); - } + #if ENABLED(AUTO_BED_LEVELING_UBL) + const float fr_scaled = MMS_SCALED(feedrate_mm_s); + if (ubl.state.active) { + ubl_line_to_destination_cartesian(fr_scaled, active_extruder); + return true; + } + else + line_to_destination(fr_scaled); + #else + // Do not use feedrate_percentage for E or Z only moves + if (current_position[X_AXIS] == destination[X_AXIS] && current_position[Y_AXIS] == destination[Y_AXIS]) + line_to_destination(); + else { + const float fr_scaled = MMS_SCALED(feedrate_mm_s); + #if ENABLED(MESH_BED_LEVELING) + if (mbl.active()) { + mesh_line_to_destination(fr_scaled); + return true; + } + else + #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) + if (planner.abl_enabled) { + bilinear_line_to_destination(fr_scaled); + return true; + } + else + #endif + line_to_destination(fr_scaled); + } + #endif return false; } diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index 21a98a304f..155a4717f5 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -539,7 +539,7 @@ void Planner::check_axes_activity() { #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) // if z_fade_height enabled (nonzero) and raw_z above it, no leveling required if ((planner.z_fade_height) && (planner.z_fade_height <= RAW_Z_POSITION(lz))) return; - lz += ubl.state.z_offset + ubl.get_z_correction(lx,ly) * ubl.fade_scaling_factor_for_z(lz); + lz += ubl.state.z_offset + ubl.get_z_correction(lx, ly) * ubl.fade_scaling_factor_for_z(lz); #else // no fade lz += ubl.state.z_offset + ubl.get_z_correction(lx,ly); #endif // FADE @@ -617,7 +617,7 @@ void Planner::check_axes_activity() { // so U==(L-O-M)/(1-M/H) for U= ( GRID_MAX_POINTS_X * GRID_MAX_POINTS_Y )) { + if (repetition_cnt >= GRID_MAX_POINTS) { for ( uint8_t x = 0; x < GRID_MAX_POINTS_X; x++ ) { for ( uint8_t y = 0; y < GRID_MAX_POINTS_Y; y++ ) { ubl.z_values[x][y] = ubl_constant; @@ -735,7 +735,7 @@ ubl.save_ubl_active_state_and_disable(); // we don't do bed level correction because we want the raw data when we probe DEPLOY_PROBE(); - uint16_t max_iterations = ( GRID_MAX_POINTS_X * GRID_MAX_POINTS_Y ); + uint16_t max_iterations = GRID_MAX_POINTS; do { if (ubl_lcd_clicked()) { @@ -941,7 +941,7 @@ return thickness; } - void manually_probe_remaining_mesh(const float &lx, const float &ly, float &z_clearance, const float &card_thickness, const bool do_ubl_mesh_map) { + void manually_probe_remaining_mesh(const float &lx, const float &ly, const float &z_clearance, const float &card_thickness, const bool do_ubl_mesh_map) { ubl.has_control_of_lcd_panel = true; ubl.save_ubl_active_state_and_disable(); // we don't do bed level correction because we want the raw data when we probe @@ -956,14 +956,11 @@ if (location.x_index < 0 && location.y_index < 0) continue; const float rawx = pgm_read_float(&ubl.mesh_index_to_xpos[location.x_index]), - rawy = pgm_read_float(&ubl.mesh_index_to_ypos[location.y_index]); - - const float xProbe = LOGICAL_X_POSITION(rawx), + rawy = pgm_read_float(&ubl.mesh_index_to_ypos[location.y_index]), + xProbe = LOGICAL_X_POSITION(rawx), yProbe = LOGICAL_Y_POSITION(rawy); - if ( ! position_is_reachable_raw_xy( rawx, rawy )) { // SHOULD NOT OCCUR (find_closest_mesh_point only returns reachable points) - break; - } + if (!position_is_reachable_raw_xy(rawx, rawy)) break; // SHOULD NOT OCCUR (find_closest_mesh_point only returns reachable points) do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES); @@ -1129,6 +1126,7 @@ SERIAL_PROTOCOLLNPGM("Invalid map type.\n"); return UBL_ERR; } + // Check if a map type was specified if (code_seen('M')) { // Warning! Use of 'M' flouts established standards. map_type = code_has_value() ? code_value_int() : 0; diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index a398a4fda6..7a810d3e3a 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -1674,13 +1674,13 @@ void kill_screen(const char* lcd_msg) { void _lcd_ubl_level_bed(); - int UBL_STORAGE_SLOT = 0; - int CUSTOM_BED_TEMP = 50; - int CUSTOM_HOTEND_TEMP = 190; - int SIDE_POINTS = 3; - int UBL_FILLIN_AMOUNT = 5; - int UBL_HEIGHT_AMOUNT; - int map_type; + int UBL_STORAGE_SLOT = 0, + CUSTOM_BED_TEMP = 50, + CUSTOM_HOTEND_TEMP = 190, + SIDE_POINTS = 3, + UBL_FILLIN_AMOUNT = 5, + UBL_HEIGHT_AMOUNT, + map_type; char UBL_LCD_GCODE [30]; @@ -1858,7 +1858,7 @@ void kill_screen(const char* lcd_msg) { * UBL Build Mesh submenu */ void _lcd_ubl_build_mesh() { - int GRID_NUM_POINTS = GRID_MAX_POINTS_X * GRID_MAX_POINTS_Y ; + int GRID_NUM_POINTS = GRID_MAX_POINTS; START_MENU(); MENU_BACK(MSG_UBL_TOOLS); #if (WATCH_THE_BED)