Skip to content

Commit 70bce1b

Browse files
committed
clean up checks
1 parent a39c9f1 commit 70bce1b

6 files changed

+84
-71
lines changed

Marlin/Configuration.h

+9-6
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,6 @@
260260
*/
261261
//#define MMU_MODEL PRUSA_MMU2
262262

263-
// Switch extruders by bumping toolhead, requires EVENT_GCODE_TOOLCHANGE_#
264-
//#define MECHANICAL_SWITCHING_EXTRUDER
265-
266263
// A dual extruder that uses a single stepper motor
267264
//#define SWITCHING_EXTRUDER
268265
#if ENABLED(SWITCHING_EXTRUDER)
@@ -273,10 +270,13 @@
273270
#endif
274271
#endif
275272

276-
// Switch nozzles by bumping toolhead, requires EVENT_GCODE_TOOLCHANGE_#
277-
//#define MECHANICAL_SWITCHING_NOZZLE
273+
// Switch extruders by bumping the toolhead. Requires EVENT_GCODE_TOOLCHANGE_#.
274+
//#define MECHANICAL_SWITCHING_EXTRUDER
278275

279-
// A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles, can be combined with SWITCHING_EXTRUDER
276+
/**
277+
* A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles.
278+
* Can be combined with SWITCHING_EXTRUDER.
279+
*/
280280
//#define SWITCHING_NOZZLE
281281
#if ENABLED(SWITCHING_NOZZLE)
282282
#define SWITCHING_NOZZLE_SERVO_NR 0
@@ -285,6 +285,9 @@
285285
#define SWITCHING_NOZZLE_SERVO_DWELL 2500 // Dwell time to wait for servo to make physical move
286286
#endif
287287

288+
// Switch nozzles by bumping the toolhead. Requires EVENT_GCODE_TOOLCHANGE_#.
289+
//#define MECHANICAL_SWITCHING_NOZZLE
290+
288291
/**
289292
* Two separate X-carriages with extruders that connect to a moving part
290293
* via a solenoid docking mechanism. Requires SOL1_PIN and SOL2_PIN.

Marlin/src/inc/Conditionals_LCD.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -1073,7 +1073,7 @@
10731073
#endif
10741074

10751075
// Switching extruder has its own servo?
1076-
#if ENABLED(SWITCHING_EXTRUDER) && !(HAS_SWITCHING_NOZZLE && SWITCHING_EXTRUDER_SERVO_NR == SWITCHING_NOZZLE_SERVO_NR)
1076+
#if ENABLED(SWITCHING_EXTRUDER) && (!HAS_SWITCHING_NOZZLE || SWITCHING_EXTRUDER_SERVO_NR != SWITCHING_NOZZLE_SERVO_NR)
10771077
#define DO_SWITCH_EXTRUDER 1
10781078
#endif
10791079

Marlin/src/inc/Conditionals_adv.h

+12-12
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@
3838
#ifndef NUM_SERVOS
3939
#define NUM_SERVOS 0
4040
#if HAS_Z_SERVO_PROBE && NUM_SERVOS <= Z_PROBE_SERVO_NR
41-
#undef NUM_SERVOS
42-
#define NUM_SERVOS (Z_PROBE_SERVO_NR + 1)
43-
#endif
41+
#undef NUM_SERVOS
42+
#define NUM_SERVOS (Z_PROBE_SERVO_NR + 1)
43+
#endif
4444
#if ENABLED(CHAMBER_VENT) && NUM_SERVOS <= CHAMBER_VENT_SERVO_NR
45-
#undef NUM_SERVOS
46-
#define NUM_SERVOS (CHAMBER_VENT_SERVO_NR + 1)
47-
#endif
45+
#undef NUM_SERVOS
46+
#define NUM_SERVOS (CHAMBER_VENT_SERVO_NR + 1)
47+
#endif
4848
#if ENABLED(SWITCHING_TOOLHEAD) && NUM_SERVOS <= SWITCHING_TOOLHEAD_SERVO_NR
49-
#undef NUM_SERVOS
50-
#define NUM_SERVOS (SWITCHING_TOOLHEAD_SERVO_NR + 1)
51-
#endif
49+
#undef NUM_SERVOS
50+
#define NUM_SERVOS (SWITCHING_TOOLHEAD_SERVO_NR + 1)
51+
#endif
5252
#if ENABLED(SWITCHING_NOZZLE)
5353
#if NUM_SERVOS <= SWITCHING_NOZZLE_SERVO_NR
5454
#undef NUM_SERVOS
@@ -70,10 +70,10 @@
7070
#endif
7171
#endif
7272
#if ENABLED(SPINDLE_SERVO) && NUM_SERVOS <= SPINDLE_SERVO_NR
73-
#undef NUM_SERVOS
74-
#define NUM_SERVOS (SPINDLE_SERVO_NR + 1)
75-
#endif
73+
#undef NUM_SERVOS
74+
#define NUM_SERVOS (SPINDLE_SERVO_NR + 1)
7675
#endif
76+
#endif // !defined(NUM_SERVOS)
7777

7878
// Convenience override for a BLTouch alone
7979
#if ENABLED(BLTOUCH) && NUM_SERVOS == 1

Marlin/src/inc/SanityCheck.h

+40-38
Original file line numberDiff line numberDiff line change
@@ -1271,29 +1271,33 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
12711271
*/
12721272
#if BOTH(SWITCHING_NOZZLE, MECHANICAL_SWITCHING_NOZZLE)
12731273
#error "Enable only one of SWITCHING_NOZZLE or MECHANICAL_SWITCHING_NOZZLE."
1274-
#elif HAS_SWITCHING_NOZZLE
1275-
#if ENABLED(DUAL_X_CARRIAGE)
1276-
#error "SWITCHING_NOZZLE(_MECHANICAL) and DUAL_X_CARRIAGE are incompatible."
1274+
#elif ENABLED(MECHANICAL_SWITCHING_NOZZLE)
1275+
#if EXTRUDERS != 2
1276+
#error "MECHANICAL_SWITCHING_NOZZLE requires exactly 2 EXTRUDERS."
1277+
#elif ENABLED(DUAL_X_CARRIAGE)
1278+
#error "MECHANICAL_SWITCHING_NOZZLE and DUAL_X_CARRIAGE are incompatible."
12771279
#elif ENABLED(SINGLENOZZLE)
1278-
#error "SWITCHING_NOZZLE(_MECHANICAL) and SINGLENOZZLE are incompatible."
1280+
#error "MECHANICAL_SWITCHING_NOZZLE and SINGLENOZZLE are incompatible."
12791281
#elif HAS_PRUSA_MMU2
1280-
#error "SWITCHING_NOZZLE(_MECHANICAL) and PRUSA_MMU2(S) are incompatible."
1281-
#elif EXTRUDERS != 2
1282-
#error "SWITCHING_NOZZLE(_MECHANICAL) requires exactly 2 EXTRUDERS."
1283-
#endif
1284-
1285-
#if ENABLED(MECHANICAL_SWITCHING_NOZZLE)
1286-
#ifndef EVENT_GCODE_TOOLCHANGE_T0
1287-
#error "MECHANICAL_SWITCHING_NOZZLE requires EVENT_GCODE_TOOLCHANGE_T0."
1288-
#endif
1289-
#ifndef EVENT_GCODE_TOOLCHANGE_T1
1290-
#error "MECHANICAL_SWITCHING_NOZZLE requires EVENT_GCODE_TOOLCHANGE_T1."
1291-
#endif
1292-
#else
1293-
#ifndef SWITCHING_NOZZLE_SERVO_NR
1282+
#error "MECHANICAL_SWITCHING_NOZZLE and PRUSA_MMU2(S) are incompatible."
1283+
#elif !defined(EVENT_GCODE_TOOLCHANGE_T0)
1284+
#error "MECHANICAL_SWITCHING_NOZZLE requires EVENT_GCODE_TOOLCHANGE_T0."
1285+
#elif !defined(EVENT_GCODE_TOOLCHANGE_T1)
1286+
#error "MECHANICAL_SWITCHING_NOZZLE requires EVENT_GCODE_TOOLCHANGE_T1."
1287+
#endif
1288+
#elif ENABLED(SWITCHING_NOZZLE)
1289+
#if EXTRUDERS != 2
1290+
#error "SWITCHING_NOZZLE requires exactly 2 EXTRUDERS."
1291+
#elif ENABLED(DUAL_X_CARRIAGE)
1292+
#error "SWITCHING_NOZZLE and DUAL_X_CARRIAGE are incompatible."
1293+
#elif ENABLED(SINGLENOZZLE)
1294+
#error "SWITCHING_NOZZLE and SINGLENOZZLE are incompatible."
1295+
#elif HAS_PRUSA_MMU2
1296+
#error "SWITCHING_NOZZLE and PRUSA_MMU2(S) are incompatible."
1297+
#elif NUM_SERVOS < 1
1298+
#error "SWITCHING_NOZZLE requires NUM_SERVOS >= 1."
1299+
#elif !defined(SWITCHING_NOZZLE_SERVO_NR)
12941300
#error "SWITCHING_NOZZLE requires SWITCHING_NOZZLE_SERVO_NR."
1295-
#elif NUM_SERVOS < 1
1296-
#error "SWITCHING_NOZZLE requires NUM_SERVOS >= 1."
12971301
#elif SWITCHING_NOZZLE_SERVO_NR == 0 && !PIN_EXISTS(SERVO0)
12981302
#error "SERVO0_PIN must be defined for your SWITCHING_NOZZLE."
12991303
#elif SWITCHING_NOZZLE_SERVO_NR == 1 && !PIN_EXISTS(SERVO1)
@@ -1303,7 +1307,6 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
13031307
#elif SWITCHING_NOZZLE_SERVO_NR == 3 && !PIN_EXISTS(SERVO3)
13041308
#error "SERVO3_PIN must be defined for your SWITCHING_NOZZLE."
13051309
#endif
1306-
13071310
#ifdef SWITCHING_NOZZLE_E1_SERVO_NR
13081311
#if SWITCHING_NOZZLE_E1_SERVO_NR == SWITCHING_NOZZLE_SERVO_NR
13091312
#error "SWITCHING_NOZZLE_E1_SERVO_NR must be different from SWITCHING_NOZZLE_SERVO_NR."
@@ -1317,28 +1320,26 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
13171320
#error "SERVO3_PIN must be defined for your SWITCHING_NOZZLE."
13181321
#endif
13191322
#endif
1320-
#endif
1321-
#endif
1323+
#endif // SWITCHING_NOZZLE
13221324

13231325
/**
13241326
* Single Stepper Dual Extruder with switching servo
13251327
*/
13261328
#if BOTH(SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_EXTRUDER)
13271329
#error "Enable only one of SWITCHING_EXTRUDER or MECHANICAL_SWITCHING_EXTRUDER."
1328-
#elif HAS_SWITCHING_EXTRUDER
1330+
#elif ENABLED(MECHANICAL_SWITCHING_EXTRUDER)
13291331
#if EXTRUDERS < 2
1330-
#error "SWITCHING_EXTRUDER(_MECHANICAL) requires EXTRUDERS >= 2."
1332+
#error "MECHANICAL_SWITCHING_EXTRUDER requires EXTRUDERS >= 2."
1333+
#elif !defined(EVENT_GCODE_TOOLCHANGE_T0)
1334+
#error "MECHANICAL_SWITCHING_EXTRUDER requires EVENT_GCODE_TOOLCHANGE_T0."
1335+
#elif !defined(EVENT_GCODE_TOOLCHANGE_T1)
1336+
#error "MECHANICAL_SWITCHING_EXTRUDER requires EVENT_GCODE_TOOLCHANGE_T1."
13311337
#endif
1332-
#if ENABLED(MECHANICAL_SWITCHING_EXTRUDER)
1333-
#ifndef EVENT_GCODE_TOOLCHANGE_T0
1334-
#error "MECHANICAL_SWITCHING_EXTRUDER requires EVENT_GCODE_TOOLCHANGE_T0."
1335-
#endif
1336-
#ifndef EVENT_GCODE_TOOLCHANGE_T1
1337-
#error "MECHANICAL_SWITCHING_EXTRUDER requires EVENT_GCODE_TOOLCHANGE_T1."
1338-
#endif
1339-
#else
1338+
#elif ENABLED(SWITCHING_EXTRUDER)
13401339
#if NUM_SERVOS < 1
13411340
#error "SWITCHING_EXTRUDER requires NUM_SERVOS >= 1."
1341+
#elif !defined(SWITCHING_EXTRUDER_SERVO_NR)
1342+
#error "SWITCHING_EXTRUDER requires SWITCHING_EXTRUDER_SERVO_NR."
13421343
#elif SWITCHING_EXTRUDER_SERVO_NR == 0 && !PIN_EXISTS(SERVO0)
13431344
#error "SERVO0_PIN must be defined for your SWITCHING_EXTRUDER."
13441345
#elif SWITCHING_EXTRUDER_SERVO_NR == 1 && !PIN_EXISTS(SERVO1)
@@ -1362,9 +1363,10 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
13621363
#elif SWITCHING_EXTRUDER_E23_SERVO_NR == SWITCHING_EXTRUDER_SERVO_NR
13631364
#error "SWITCHING_EXTRUDER_E23_SERVO_NR should be a different extruder from SWITCHING_EXTRUDER_SERVO_NR."
13641365
#endif
1366+
#elif EXTRUDERS < 2
1367+
#error "SWITCHING_EXTRUDER requires EXTRUDERS >= 2."
13651368
#endif
1366-
#endif
1367-
#endif
1369+
#endif // SWITCHING_EXTRUDER
13681370

13691371
/**
13701372
* Mixing Extruder requirements
@@ -1377,7 +1379,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
13771379
#elif ENABLED(FILAMENT_WIDTH_SENSOR)
13781380
#error "MIXING_EXTRUDER is incompatible with FILAMENT_WIDTH_SENSOR. Comment out this line to use it anyway."
13791381
#elif HAS_SWITCHING_EXTRUDER
1380-
#error "MIXING_EXTRUDER is not compatible with SWITCHING_EXTRUDER(_MECHANICAL)."
1382+
#error "MIXING_EXTRUDER is incompatible with (MECHANICAL_)SWITCHING_EXTRUDER."
13811383
#elif ENABLED(SINGLENOZZLE)
13821384
#error "MIXING_EXTRUDER is incompatible with SINGLENOZZLE."
13831385
#elif ENABLED(DISABLE_INACTIVE_EXTRUDER)
@@ -1396,7 +1398,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
13961398
#elif ENABLED(MIXING_EXTRUDER)
13971399
#error "E_DUAL_STEPPER_DRIVERS is incompatible with MIXING_EXTRUDER."
13981400
#elif HAS_SWITCHING_EXTRUDER
1399-
#error "E_DUAL_STEPPER_DRIVERS is incompatible with SWITCHING_EXTRUDER(_MECHANICAL)."
1401+
#error "E_DUAL_STEPPER_DRIVERS is incompatible with (MECHANICAL_)SWITCHING_EXTRUDER."
14001402
#endif
14011403
#endif
14021404

@@ -2759,7 +2761,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
27592761
#elif ENABLED(MIXING_EXTRUDER)
27602762
#error "MULTI_NOZZLE_DUPLICATION is incompatible with MIXING_EXTRUDER."
27612763
#elif HAS_SWITCHING_EXTRUDER
2762-
#error "MULTI_NOZZLE_DUPLICATION is incompatible with SWITCHING_EXTRUDER(_MECHANICAL)."
2764+
#error "MULTI_NOZZLE_DUPLICATION is incompatible with (MECHANICAL_)SWITCHING_EXTRUDER."
27632765
#elif HOTENDS < 2
27642766
#error "MULTI_NOZZLE_DUPLICATION requires 2 or more hotends."
27652767
#endif

Marlin/src/module/temperature.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,7 @@ class Temperature {
748748
static raw_adc_t mintemp_raw_COOLER, maxtemp_raw_COOLER;
749749
#endif
750750

751-
#if HAS_TEMP_BOARD && ENABLED(THERMAL_PROTECTION_BOARD)
751+
#if BOTH(HAS_TEMP_BOARD, THERMAL_PROTECTION_BOARD)
752752
static raw_adc_t mintemp_raw_BOARD, maxtemp_raw_BOARD;
753753
#endif
754754

Marlin/src/module/tool_change.cpp

+21-13
Original file line numberDiff line numberDiff line change
@@ -1279,7 +1279,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
12791279
fast_line_to_current(Z_AXIS);
12801280
}
12811281
move_nozzle_servo(new_tool);
1282-
#elif ENABLED(MECHANICAL_SWITCHING_EXTRUDER) || ENABLED(MECHANICAL_SWITCHING_NOZZLE)
1282+
#elif EITHER(MECHANICAL_SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_NOZZLE)
12831283
if (!no_move) {
12841284
current_position.z = _MIN(current_position.z + toolchange_settings.z_raise, _MIN(TERN(HAS_SOFTWARE_ENDSTOPS, soft_endstop.max.z, Z_MAX_POS), Z_MAX_POS));
12851285
fast_line_to_current(Z_AXIS);
@@ -1349,17 +1349,17 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
13491349
#else
13501350
do_blocking_move_to_xy(destination, planner.settings.max_feedrate_mm_s[X_AXIS]);
13511351

1352-
// If using MECHANICAL_SWITCHING extruder/nozzle, set HOTEND_OFFSET in Z axis after running EVENT_GCODE_TOOLCHANGE further below.
1352+
// If using MECHANICAL_SWITCHING extruder/nozzle, set HOTEND_OFFSET in Z axis after running EVENT_GCODE_TOOLCHANGE below.
13531353
#if NONE(MECHANICAL_SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_NOZZLE)
1354-
do_blocking_move_to_z(destination.z, planner.settings.max_feedrate_mm_s[Z_AXIS]);
1355-
SECONDARY_AXIS_CODE(
1356-
do_blocking_move_to_i(destination.i, planner.settings.max_feedrate_mm_s[I_AXIS]),
1357-
do_blocking_move_to_j(destination.j, planner.settings.max_feedrate_mm_s[J_AXIS]),
1358-
do_blocking_move_to_k(destination.k, planner.settings.max_feedrate_mm_s[K_AXIS]),
1359-
do_blocking_move_to_u(destination.u, planner.settings.max_feedrate_mm_s[U_AXIS]),
1360-
do_blocking_move_to_v(destination.v, planner.settings.max_feedrate_mm_s[V_AXIS]),
1361-
do_blocking_move_to_w(destination.w, planner.settings.max_feedrate_mm_s[W_AXIS])
1362-
);
1354+
do_blocking_move_to_z(destination.z, planner.settings.max_feedrate_mm_s[Z_AXIS]);
1355+
SECONDARY_AXIS_CODE(
1356+
do_blocking_move_to_i(destination.i, planner.settings.max_feedrate_mm_s[I_AXIS]),
1357+
do_blocking_move_to_j(destination.j, planner.settings.max_feedrate_mm_s[J_AXIS]),
1358+
do_blocking_move_to_k(destination.k, planner.settings.max_feedrate_mm_s[K_AXIS]),
1359+
do_blocking_move_to_u(destination.u, planner.settings.max_feedrate_mm_s[U_AXIS]),
1360+
do_blocking_move_to_v(destination.v, planner.settings.max_feedrate_mm_s[V_AXIS]),
1361+
do_blocking_move_to_w(destination.w, planner.settings.max_feedrate_mm_s[W_AXIS])
1362+
);
13631363
#endif
13641364
#endif
13651365

@@ -1469,7 +1469,8 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
14691469
}
14701470
#endif
14711471

1472-
// If using MECHANICAL_SWITCHING extruder/nozzle, set HOTEND_OFFSET in Z axis after running EVENT_GCODE_TOOLCHANGE so that nozzle does not lower below print surface if new hotend Z offset is higher than old hotend Z offset.
1472+
// If using MECHANICAL_SWITCHING extruder/nozzle, set HOTEND_OFFSET in Z axis after running EVENT_GCODE_TOOLCHANGE
1473+
// so that nozzle does not lower below print surface if new hotend Z offset is higher than old hotend Z offset.
14731474
#if EITHER(MECHANICAL_SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_NOZZLE)
14741475
#if HAS_HOTEND_OFFSET
14751476
xyz_pos_t diff = hotend_offset[new_tool] - hotend_offset[old_tool];
@@ -1480,7 +1481,14 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
14801481

14811482
if (!no_move) {
14821483
// Move to new hotend Z offset and reverse Z_RAISE
1483-
do_blocking_move_to_z(_MIN(_MAX((destination.z - diff.z) - toolchange_settings.z_raise, _MAX(TERN(HAS_SOFTWARE_ENDSTOPS, soft_endstop.min.z, Z_MIN_POS), Z_MIN_POS)), _MIN(TERN(HAS_SOFTWARE_ENDSTOPS, soft_endstop.max.z, Z_MAX_POS), Z_MAX_POS)), planner.settings.max_feedrate_mm_s[Z_AXIS]);
1484+
do_blocking_move_to_z(
1485+
_MIN(
1486+
_MAX((destination.z - diff.z) - toolchange_settings.z_raise,
1487+
_MAX(TERN(HAS_SOFTWARE_ENDSTOPS, soft_endstop.min.z, Z_MIN_POS), Z_MIN_POS)
1488+
),
1489+
_MIN(TERN(HAS_SOFTWARE_ENDSTOPS, soft_endstop.max.z, Z_MAX_POS), Z_MAX_POS)),
1490+
planner.settings.max_feedrate_mm_s[Z_AXIS]
1491+
);
14841492
}
14851493
#endif
14861494

0 commit comments

Comments
 (0)