|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|