Followup to hotend_offset[Z] patch
This commit is contained in:
parent
e2b8fc4f17
commit
d1c9517903
9 changed files with 25 additions and 39 deletions
|
@ -22,7 +22,7 @@
|
|||
|
||||
#include "../../inc/MarlinConfig.h"
|
||||
|
||||
#if HOTENDS > 1
|
||||
#if HAS_HOTEND_OFFSET
|
||||
|
||||
#include "../gcode.h"
|
||||
#include "../../module/motion.h"
|
||||
|
@ -37,7 +37,7 @@
|
|||
* T<tool>
|
||||
* X<xoffset>
|
||||
* Y<yoffset>
|
||||
* Z<zoffset> - Available with DUAL_X_CARRIAGE, SWITCHING_NOZZLE and PARKING_EXTRUDER
|
||||
* Z<zoffset>
|
||||
*/
|
||||
void GcodeSuite::M218() {
|
||||
if (get_target_extruder_from_command() || target_extruder == 0) return;
|
||||
|
@ -51,13 +51,10 @@ void GcodeSuite::M218() {
|
|||
hotend_offset[Y_AXIS][target_extruder] = parser.value_linear_units();
|
||||
report = false;
|
||||
}
|
||||
|
||||
#if HAS_HOTEND_OFFSET_Z
|
||||
if (parser.seenval('Z')) {
|
||||
hotend_offset[Z_AXIS][target_extruder] = parser.value_linear_units();
|
||||
report = false;
|
||||
}
|
||||
#endif
|
||||
if (parser.seenval('Z')) {
|
||||
hotend_offset[Z_AXIS][target_extruder] = parser.value_linear_units();
|
||||
report = false;
|
||||
}
|
||||
|
||||
if (report) {
|
||||
SERIAL_ECHO_START();
|
||||
|
@ -67,10 +64,8 @@ void GcodeSuite::M218() {
|
|||
SERIAL_ECHO(hotend_offset[X_AXIS][e]);
|
||||
SERIAL_CHAR(',');
|
||||
SERIAL_ECHO(hotend_offset[Y_AXIS][e]);
|
||||
#if HAS_HOTEND_OFFSET_Z
|
||||
SERIAL_CHAR(',');
|
||||
SERIAL_ECHO(hotend_offset[Z_AXIS][e]);
|
||||
#endif
|
||||
SERIAL_CHAR(',');
|
||||
SERIAL_ECHO(hotend_offset[Z_AXIS][e]);
|
||||
}
|
||||
SERIAL_EOL();
|
||||
}
|
||||
|
@ -81,4 +76,4 @@ void GcodeSuite::M218() {
|
|||
#endif
|
||||
}
|
||||
|
||||
#endif // HOTENDS > 1
|
||||
#endif // HAS_HOTEND_OFFSET
|
||||
|
|
|
@ -65,7 +65,7 @@ void GcodeSuite::M125() {
|
|||
// Lift Z axis
|
||||
if (parser.seenval('Z')) park_point.z = parser.linearval('Z');
|
||||
|
||||
#if HOTENDS > 1 && DISABLED(DUAL_X_CARRIAGE) && DISABLED(DELTA)
|
||||
#if HAS_HOTEND_OFFSET && DISABLED(DUAL_X_CARRIAGE) && DISABLED(DELTA)
|
||||
park_point.x += (active_extruder ? hotend_offset[X_AXIS][active_extruder] : 0);
|
||||
park_point.y += (active_extruder ? hotend_offset[Y_AXIS][active_extruder] : 0);
|
||||
#endif
|
||||
|
|
|
@ -87,7 +87,7 @@ void GcodeSuite::M600() {
|
|||
if (parser.seenval('X')) park_point.x = parser.linearval('X');
|
||||
if (parser.seenval('Y')) park_point.y = parser.linearval('Y');
|
||||
|
||||
#if HOTENDS > 1 && DISABLED(DUAL_X_CARRIAGE) && DISABLED(DELTA)
|
||||
#if HAS_HOTEND_OFFSET && DISABLED(DUAL_X_CARRIAGE) && DISABLED(DELTA)
|
||||
park_point.x += (active_extruder ? hotend_offset[X_AXIS][active_extruder] : 0);
|
||||
park_point.y += (active_extruder ? hotend_offset[Y_AXIS][active_extruder] : 0);
|
||||
#endif
|
||||
|
|
|
@ -458,6 +458,8 @@
|
|||
|
||||
#define DO_SWITCH_EXTRUDER (ENABLED(SWITCHING_EXTRUDER) && (DISABLED(SWITCHING_NOZZLE) || SWITCHING_EXTRUDER_SERVO_NR != SWITCHING_NOZZLE_SERVO_NR))
|
||||
|
||||
#define HAS_HOTEND_OFFSET (HOTENDS > 1)
|
||||
|
||||
/**
|
||||
* DISTINCT_E_FACTORS affects how some E factors are accessed
|
||||
*/
|
||||
|
|
|
@ -413,7 +413,6 @@
|
|||
/**
|
||||
* Default hotend offsets, if not defined
|
||||
*/
|
||||
#define HAS_HOTEND_OFFSET_Z (HOTENDS > 1 && (ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE) || ENABLED(PARKING_EXTRUDER)))
|
||||
#if HOTENDS > 1
|
||||
#ifndef HOTEND_OFFSET_X
|
||||
#define HOTEND_OFFSET_X { 0 } // X offsets for each extruder
|
||||
|
@ -421,8 +420,8 @@
|
|||
#ifndef HOTEND_OFFSET_Y
|
||||
#define HOTEND_OFFSET_Y { 0 } // Y offsets for each extruder
|
||||
#endif
|
||||
#if HAS_HOTEND_OFFSET_Z && !defined(HOTEND_OFFSET_Z)
|
||||
#define HOTEND_OFFSET_Z { 0 }
|
||||
#ifndef HOTEND_OFFSET_Z
|
||||
#define HOTEND_OFFSET_Z { 0 } // Z offsets for each extruder
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ typedef struct SettingsDataStruct {
|
|||
|
||||
float home_offset[XYZ]; // M206 XYZ
|
||||
|
||||
#if HOTENDS > 1
|
||||
#if HAS_HOTEND_OFFSET
|
||||
float hotend_offset[XYZ][HOTENDS - 1]; // M218 XYZ
|
||||
#endif
|
||||
|
||||
|
@ -433,7 +433,7 @@ void MarlinSettings::postprocess() {
|
|||
#endif
|
||||
EEPROM_WRITE(home_offset);
|
||||
|
||||
#if HOTENDS > 1
|
||||
#if HAS_HOTEND_OFFSET
|
||||
// Skip hotend 0 which must be 0
|
||||
for (uint8_t e = 1; e < HOTENDS; e++)
|
||||
LOOP_XYZ(i) EEPROM_WRITE(hotend_offset[i][e]);
|
||||
|
@ -1038,7 +1038,7 @@ void MarlinSettings::postprocess() {
|
|||
// Hotend Offsets, if any
|
||||
//
|
||||
|
||||
#if HOTENDS > 1
|
||||
#if HAS_HOTEND_OFFSET
|
||||
// Skip hotend 0 which must be 0
|
||||
for (uint8_t e = 1; e < HOTENDS; e++)
|
||||
LOOP_XYZ(i) EEPROM_READ(hotend_offset[i][e]);
|
||||
|
@ -1749,16 +1749,8 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
|||
ZERO(home_offset);
|
||||
#endif
|
||||
|
||||
#if HOTENDS > 1
|
||||
constexpr float tmp4[XYZ][HOTENDS] = {
|
||||
HOTEND_OFFSET_X,
|
||||
HOTEND_OFFSET_Y
|
||||
#ifdef HOTEND_OFFSET_Z
|
||||
, HOTEND_OFFSET_Z
|
||||
#else
|
||||
, { 0 }
|
||||
#endif
|
||||
};
|
||||
#if HAS_HOTEND_OFFSET
|
||||
constexpr float tmp4[XYZ][HOTENDS] = { HOTEND_OFFSET_X, HOTEND_OFFSET_Y, HOTEND_OFFSET_Z };
|
||||
static_assert(
|
||||
tmp4[X_AXIS][0] == 0 && tmp4[Y_AXIS][0] == 0 && tmp4[Z_AXIS][0] == 0,
|
||||
"Offsets for the first hotend must be 0.0."
|
||||
|
@ -2163,7 +2155,7 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
|||
SERIAL_ECHOLNPAIR_P(port, " Z", LINEAR_UNIT(home_offset[Z_AXIS]));
|
||||
#endif
|
||||
|
||||
#if HOTENDS > 1
|
||||
#if HAS_HOTEND_OFFSET
|
||||
if (!forReplay) {
|
||||
CONFIG_ECHO_START;
|
||||
SERIAL_ECHOLNPGM_P(port, "Hotend offsets:");
|
||||
|
@ -2173,9 +2165,7 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
|||
SERIAL_ECHOPAIR_P(port, " M218 T", (int)e);
|
||||
SERIAL_ECHOPAIR_P(port, " X", LINEAR_UNIT(hotend_offset[X_AXIS][e]));
|
||||
SERIAL_ECHOPAIR_P(port, " Y", LINEAR_UNIT(hotend_offset[Y_AXIS][e]));
|
||||
#if HAS_HOTEND_OFFSET_Z
|
||||
SERIAL_ECHOPAIR_P(port, " Z", LINEAR_UNIT(hotend_offset[Z_AXIS][e]));
|
||||
#endif
|
||||
SERIAL_ECHOPAIR_P(port, " Z", LINEAR_UNIT(hotend_offset[Z_AXIS][e]));
|
||||
SERIAL_EOL_P(port);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -102,7 +102,7 @@ void recalc_delta_settings() {
|
|||
}while(0)
|
||||
|
||||
void inverse_kinematics(const float raw[XYZ]) {
|
||||
#if HOTENDS > 1
|
||||
#if HAS_HOTEND_OFFSET
|
||||
// Delta hotend offsets must be applied in Cartesian space with no "spoofing"
|
||||
const float pos[XYZ] = {
|
||||
raw[X_AXIS] - hotend_offset[X_AXIS][active_extruder],
|
||||
|
|
|
@ -92,7 +92,7 @@ float destination[XYZE] = { 0 };
|
|||
uint8_t active_extruder; // = 0;
|
||||
|
||||
// Extruder offsets
|
||||
#if HOTENDS > 1
|
||||
#if HAS_HOTEND_OFFSET
|
||||
float hotend_offset[XYZ][HOTENDS]; // Initialized by settings.load()
|
||||
#endif
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ extern int16_t feedrate_percentage;
|
|||
|
||||
extern uint8_t active_extruder;
|
||||
|
||||
#if HOTENDS > 1
|
||||
#if HAS_HOTEND_OFFSET
|
||||
extern float hotend_offset[XYZ][HOTENDS];
|
||||
#endif
|
||||
|
||||
|
|
Reference in a new issue