Skip to content

Commit a154374

Browse files
EvilGremlinansonl
authored andcommitted
✨ Switching extruder/nozzle without servo (e.g., Dondolo) (#24553)
Co-authored-by: Anson Liu <ansonl@users.noreply.github.com>
1 parent b5a27aa commit a154374

11 files changed

+145
-66
lines changed

Marlin/Configuration.h

+10-1
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,13 @@
270270
#endif
271271
#endif
272272

273-
// A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles
273+
// Switch extruders by bumping the toolhead. Requires EVENT_GCODE_TOOLCHANGE_#.
274+
//#define MECHANICAL_SWITCHING_EXTRUDER
275+
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+
*/
274280
//#define SWITCHING_NOZZLE
275281
#if ENABLED(SWITCHING_NOZZLE)
276282
#define SWITCHING_NOZZLE_SERVO_NR 0
@@ -279,6 +285,9 @@
279285
#define SWITCHING_NOZZLE_SERVO_DWELL 2500 // Dwell time to wait for servo to make physical move
280286
#endif
281287

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

Marlin/src/MarlinCore.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
669669
&& ELAPSED(ms, gcode.previous_move_ms + SEC_TO_MS(EXTRUDER_RUNOUT_SECONDS))
670670
&& !planner.has_blocks_queued()
671671
) {
672-
#if ENABLED(SWITCHING_EXTRUDER)
672+
#if HAS_SWITCHING_EXTRUDER
673673
bool oldstatus;
674674
switch (active_extruder) {
675675
default: oldstatus = stepper.AXIS_IS_ENABLED(E_AXIS, 0); stepper.ENABLE_EXTRUDER(0); break;
@@ -683,7 +683,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
683683
#endif // E_STEPPERS > 2
684684
#endif // E_STEPPERS > 1
685685
}
686-
#else // !SWITCHING_EXTRUDER
686+
#else // !HAS_SWITCHING_EXTRUDER
687687
bool oldstatus;
688688
switch (active_extruder) {
689689
default:
@@ -699,7 +699,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
699699
planner.set_e_position_mm(olde);
700700
planner.synchronize();
701701

702-
#if ENABLED(SWITCHING_EXTRUDER)
702+
#if HAS_SWITCHING_EXTRUDER
703703
switch (active_extruder) {
704704
default: if (oldstatus) stepper.ENABLE_EXTRUDER(0); else stepper.DISABLE_EXTRUDER(0); break;
705705
#if E_STEPPERS > 1
@@ -709,12 +709,12 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
709709
#endif // E_STEPPERS > 2
710710
#endif // E_STEPPERS > 1
711711
}
712-
#else // !SWITCHING_EXTRUDER
712+
#else // !HAS_SWITCHING_EXTRUDER
713713
switch (active_extruder) {
714714
#define _CASE_RESTORE(N) case N: if (oldstatus) stepper.ENABLE_EXTRUDER(N); else stepper.DISABLE_EXTRUDER(N); break;
715715
REPEAT(E_STEPPERS, _CASE_RESTORE);
716716
}
717-
#endif // !SWITCHING_EXTRUDER
717+
#endif // !HAS_SWITCHING_EXTRUDER
718718

719719
gcode.reset_stepper_timeout(ms);
720720
}

Marlin/src/inc/Conditionals_LCD.h

+13-4
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,9 @@
613613
#undef TEMP_SENSOR_7
614614
#undef SINGLENOZZLE
615615
#undef SWITCHING_EXTRUDER
616+
#undef MECHANICAL_SWITCHING_EXTRUDER
616617
#undef SWITCHING_NOZZLE
618+
#undef MECHANICAL_SWITCHING_NOZZLE
617619
#undef MIXING_EXTRUDER
618620
#undef HOTEND_IDLE_TIMEOUT
619621
#undef DISABLE_E
@@ -629,12 +631,19 @@
629631
#define E_TERN_(N) TERN_(HAS_MULTI_EXTRUDER, N)
630632
#define E_TERN0(N) TERN0(HAS_MULTI_EXTRUDER, N)
631633

634+
#if EITHER(SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_EXTRUDER)
635+
#define HAS_SWITCHING_EXTRUDER 1
636+
#endif
637+
#if EITHER(SWITCHING_NOZZLE, MECHANICAL_SWITCHING_NOZZLE)
638+
#define HAS_SWITCHING_NOZZLE 1
639+
#endif
640+
632641
#if ENABLED(E_DUAL_STEPPER_DRIVERS) // E0/E1 steppers act in tandem as E0
633642

634643
#define E_STEPPERS 2
635644
#define E_MANUAL 1
636645

637-
#elif ENABLED(SWITCHING_EXTRUDER) // One stepper for every two EXTRUDERS
646+
#elif HAS_SWITCHING_EXTRUDER // One stepper for every two EXTRUDERS
638647

639648
#if EXTRUDERS > 4
640649
#define E_STEPPERS 3
@@ -643,7 +652,7 @@
643652
#else
644653
#define E_STEPPERS 1
645654
#endif
646-
#if DISABLED(SWITCHING_NOZZLE)
655+
#if !HAS_SWITCHING_NOZZLE
647656
#define HOTENDS E_STEPPERS
648657
#endif
649658

@@ -668,7 +677,7 @@
668677
#endif
669678

670679
// No inactive extruders with SWITCHING_NOZZLE or Průša MMU1
671-
#if ENABLED(SWITCHING_NOZZLE) || HAS_PRUSA_MMU1
680+
#if HAS_SWITCHING_NOZZLE || HAS_PRUSA_MMU1
672681
#undef DISABLE_INACTIVE_EXTRUDER
673682
#endif
674683

@@ -1064,7 +1073,7 @@
10641073
#endif
10651074

10661075
// Switching extruder has its own servo?
1067-
#if ENABLED(SWITCHING_EXTRUDER) && (DISABLED(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)
10681077
#define DO_SWITCH_EXTRUDER 1
10691078
#endif
10701079

Marlin/src/inc/Conditionals_adv.h

+21-19
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,26 @@
3030
#define AXIS_RELATIVE_MODES {}
3131
#endif
3232

33-
#ifdef SWITCHING_NOZZLE_E1_SERVO_NR
33+
#if defined(SWITCHING_NOZZLE_E1_SERVO_NR) && DISABLED(MECHANICAL_SWITCHING_NOZZLE)
3434
#define SWITCHING_NOZZLE_TWO_SERVOS 1
3535
#endif
3636

3737
// Determine NUM_SERVOS if none was supplied
3838
#ifndef NUM_SERVOS
3939
#define NUM_SERVOS 0
40-
#if ANY(HAS_Z_SERVO_PROBE, CHAMBER_VENT, SWITCHING_TOOLHEAD, SWITCHING_EXTRUDER, SWITCHING_NOZZLE, SPINDLE_SERVO)
41-
#if NUM_SERVOS <= Z_PROBE_SERVO_NR
42-
#undef NUM_SERVOS
43-
#define NUM_SERVOS (Z_PROBE_SERVO_NR + 1)
44-
#endif
45-
#if NUM_SERVOS <= CHAMBER_VENT_SERVO_NR
46-
#undef NUM_SERVOS
47-
#define NUM_SERVOS (CHAMBER_VENT_SERVO_NR + 1)
48-
#endif
49-
#if NUM_SERVOS <= SWITCHING_TOOLHEAD_SERVO_NR
50-
#undef NUM_SERVOS
51-
#define NUM_SERVOS (SWITCHING_TOOLHEAD_SERVO_NR + 1)
52-
#endif
40+
#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
44+
#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
48+
#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
52+
#if ENABLED(SWITCHING_NOZZLE)
5353
#if NUM_SERVOS <= SWITCHING_NOZZLE_SERVO_NR
5454
#undef NUM_SERVOS
5555
#define NUM_SERVOS (SWITCHING_NOZZLE_SERVO_NR + 1)
@@ -58,6 +58,8 @@
5858
#undef NUM_SERVOS
5959
#define NUM_SERVOS (SWITCHING_NOZZLE_E1_SERVO_NR + 1)
6060
#endif
61+
#endif
62+
#if ENABLED(SWITCHING_EXTRUDER)
6163
#if NUM_SERVOS <= SWITCHING_EXTRUDER_SERVO_NR
6264
#undef NUM_SERVOS
6365
#define NUM_SERVOS (SWITCHING_EXTRUDER_SERVO_NR + 1)
@@ -66,12 +68,12 @@
6668
#undef NUM_SERVOS
6769
#define NUM_SERVOS (SWITCHING_EXTRUDER_E23_SERVO_NR + 1)
6870
#endif
69-
#if NUM_SERVOS <= SPINDLE_SERVO_NR
70-
#undef NUM_SERVOS
71-
#define NUM_SERVOS (SPINDLE_SERVO_NR + 1)
72-
#endif
7371
#endif
74-
#endif
72+
#if ENABLED(SPINDLE_SERVO) && NUM_SERVOS <= SPINDLE_SERVO_NR
73+
#undef NUM_SERVOS
74+
#define NUM_SERVOS (SPINDLE_SERVO_NR + 1)
75+
#endif
76+
#endif // !defined(NUM_SERVOS)
7577

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

Marlin/src/inc/SanityCheck.h

+44-17
Original file line numberDiff line numberDiff line change
@@ -1269,20 +1269,34 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
12691269
/**
12701270
* A Dual Nozzle carriage with switching servo
12711271
*/
1272-
#if ENABLED(SWITCHING_NOZZLE)
1273-
#if ENABLED(DUAL_X_CARRIAGE)
1272+
#if BOTH(SWITCHING_NOZZLE, MECHANICAL_SWITCHING_NOZZLE)
1273+
#error "Enable only one of SWITCHING_NOZZLE or MECHANICAL_SWITCHING_NOZZLE."
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."
1279+
#elif ENABLED(SINGLENOZZLE)
1280+
#error "MECHANICAL_SWITCHING_NOZZLE and SINGLENOZZLE are incompatible."
1281+
#elif HAS_PRUSA_MMU2
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)
12741292
#error "SWITCHING_NOZZLE and DUAL_X_CARRIAGE are incompatible."
12751293
#elif ENABLED(SINGLENOZZLE)
12761294
#error "SWITCHING_NOZZLE and SINGLENOZZLE are incompatible."
12771295
#elif HAS_PRUSA_MMU2
12781296
#error "SWITCHING_NOZZLE and PRUSA_MMU2(S) are incompatible."
1279-
#elif EXTRUDERS != 2
1280-
#error "SWITCHING_NOZZLE requires exactly 2 EXTRUDERS."
12811297
#elif NUM_SERVOS < 1
12821298
#error "SWITCHING_NOZZLE requires NUM_SERVOS >= 1."
1283-
#endif
1284-
1285-
#ifndef SWITCHING_NOZZLE_SERVO_NR
1299+
#elif !defined(SWITCHING_NOZZLE_SERVO_NR)
12861300
#error "SWITCHING_NOZZLE requires SWITCHING_NOZZLE_SERVO_NR."
12871301
#elif SWITCHING_NOZZLE_SERVO_NR == 0 && !PIN_EXISTS(SERVO0)
12881302
#error "SERVO0_PIN must be defined for your SWITCHING_NOZZLE."
@@ -1293,7 +1307,6 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
12931307
#elif SWITCHING_NOZZLE_SERVO_NR == 3 && !PIN_EXISTS(SERVO3)
12941308
#error "SERVO3_PIN must be defined for your SWITCHING_NOZZLE."
12951309
#endif
1296-
12971310
#ifdef SWITCHING_NOZZLE_E1_SERVO_NR
12981311
#if SWITCHING_NOZZLE_E1_SERVO_NR == SWITCHING_NOZZLE_SERVO_NR
12991312
#error "SWITCHING_NOZZLE_E1_SERVO_NR must be different from SWITCHING_NOZZLE_SERVO_NR."
@@ -1307,14 +1320,26 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
13071320
#error "SERVO3_PIN must be defined for your SWITCHING_NOZZLE."
13081321
#endif
13091322
#endif
1310-
#endif
1323+
#endif // SWITCHING_NOZZLE
13111324

13121325
/**
13131326
* Single Stepper Dual Extruder with switching servo
13141327
*/
1315-
#if ENABLED(SWITCHING_EXTRUDER)
1328+
#if BOTH(SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_EXTRUDER)
1329+
#error "Enable only one of SWITCHING_EXTRUDER or MECHANICAL_SWITCHING_EXTRUDER."
1330+
#elif ENABLED(MECHANICAL_SWITCHING_EXTRUDER)
1331+
#if 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."
1337+
#endif
1338+
#elif ENABLED(SWITCHING_EXTRUDER)
13161339
#if NUM_SERVOS < 1
13171340
#error "SWITCHING_EXTRUDER requires NUM_SERVOS >= 1."
1341+
#elif !defined(SWITCHING_EXTRUDER_SERVO_NR)
1342+
#error "SWITCHING_EXTRUDER requires SWITCHING_EXTRUDER_SERVO_NR."
13181343
#elif SWITCHING_EXTRUDER_SERVO_NR == 0 && !PIN_EXISTS(SERVO0)
13191344
#error "SERVO0_PIN must be defined for your SWITCHING_EXTRUDER."
13201345
#elif SWITCHING_EXTRUDER_SERVO_NR == 1 && !PIN_EXISTS(SERVO1)
@@ -1338,8 +1363,10 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
13381363
#elif SWITCHING_EXTRUDER_E23_SERVO_NR == SWITCHING_EXTRUDER_SERVO_NR
13391364
#error "SWITCHING_EXTRUDER_E23_SERVO_NR should be a different extruder from SWITCHING_EXTRUDER_SERVO_NR."
13401365
#endif
1366+
#elif EXTRUDERS < 2
1367+
#error "SWITCHING_EXTRUDER requires EXTRUDERS >= 2."
13411368
#endif
1342-
#endif
1369+
#endif // SWITCHING_EXTRUDER
13431370

13441371
/**
13451372
* Mixing Extruder requirements
@@ -1351,8 +1378,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
13511378
#error "You must set MIXING_STEPPERS >= 2 for a mixing extruder."
13521379
#elif ENABLED(FILAMENT_WIDTH_SENSOR)
13531380
#error "MIXING_EXTRUDER is incompatible with FILAMENT_WIDTH_SENSOR. Comment out this line to use it anyway."
1354-
#elif ENABLED(SWITCHING_EXTRUDER)
1355-
#error "Please select either MIXING_EXTRUDER or SWITCHING_EXTRUDER, not both."
1381+
#elif HAS_SWITCHING_EXTRUDER
1382+
#error "MIXING_EXTRUDER is incompatible with (MECHANICAL_)SWITCHING_EXTRUDER."
13561383
#elif ENABLED(SINGLENOZZLE)
13571384
#error "MIXING_EXTRUDER is incompatible with SINGLENOZZLE."
13581385
#elif ENABLED(DISABLE_INACTIVE_EXTRUDER)
@@ -1370,8 +1397,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
13701397
#error "E_DUAL_STEPPER_DRIVERS can only be used with EXTRUDERS set to 1."
13711398
#elif ENABLED(MIXING_EXTRUDER)
13721399
#error "E_DUAL_STEPPER_DRIVERS is incompatible with MIXING_EXTRUDER."
1373-
#elif ENABLED(SWITCHING_EXTRUDER)
1374-
#error "E_DUAL_STEPPER_DRIVERS is incompatible with SWITCHING_EXTRUDER."
1400+
#elif HAS_SWITCHING_EXTRUDER
1401+
#error "E_DUAL_STEPPER_DRIVERS is incompatible with (MECHANICAL_)SWITCHING_EXTRUDER."
13751402
#endif
13761403
#endif
13771404

@@ -2733,8 +2760,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
27332760
#error "MULTI_NOZZLE_DUPLICATION is incompatible with DUAL_X_CARRIAGE."
27342761
#elif ENABLED(MIXING_EXTRUDER)
27352762
#error "MULTI_NOZZLE_DUPLICATION is incompatible with MIXING_EXTRUDER."
2736-
#elif ENABLED(SWITCHING_EXTRUDER)
2737-
#error "MULTI_NOZZLE_DUPLICATION is incompatible with SWITCHING_EXTRUDER."
2763+
#elif HAS_SWITCHING_EXTRUDER
2764+
#error "MULTI_NOZZLE_DUPLICATION is incompatible with (MECHANICAL_)SWITCHING_EXTRUDER."
27382765
#elif HOTENDS < 2
27392766
#error "MULTI_NOZZLE_DUPLICATION requires 2 or more hotends."
27402767
#endif

Marlin/src/lcd/menu/menu_motion.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ void menu_move() {
232232
else
233233
GCODES_ITEM(MSG_AUTO_HOME, FPSTR(G28_STR));
234234

235-
#if ANY(SWITCHING_EXTRUDER, SWITCHING_NOZZLE, MAGNETIC_SWITCHING_TOOLHEAD)
235+
#if ANY(HAS_SWITCHING_EXTRUDER, HAS_SWITCHING_NOZZLE, MAGNETIC_SWITCHING_TOOLHEAD)
236236

237237
#if EXTRUDERS >= 4
238238
switch (active_extruder) {
@@ -265,7 +265,7 @@ void menu_move() {
265265

266266
#define SUBMENU_MOVE_E(N) SUBMENU_N(N, MSG_MOVE_EN, []{ _menu_move_distance(E_AXIS, []{ lcd_move_e(N); }, N); });
267267

268-
#if EITHER(SWITCHING_EXTRUDER, SWITCHING_NOZZLE)
268+
#if HAS_SWITCHING_EXTRUDER || HAS_SWITCHING_NOZZLE
269269

270270
// ...and the non-switching
271271
#if E_MANUAL == 7 || E_MANUAL == 5 || E_MANUAL == 3

Marlin/src/module/planner.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2283,7 +2283,7 @@ bool Planner::_populate_block(
22832283
if (g_uc_extruder_last_move[i]) g_uc_extruder_last_move[i]--;
22842284

22852285
// Switching Extruder uses one E stepper motor per two nozzles
2286-
#define E_STEPPER_INDEX(E) TERN(SWITCHING_EXTRUDER, (E) / 2, E)
2286+
#define E_STEPPER_INDEX(E) TERN(HAS_SWITCHING_EXTRUDER, (E) / 2, E)
22872287

22882288
// Enable all (i.e., both) E steppers for IDEX-style duplication, but only active E steppers for multi-nozzle (i.e., single wide X carriage) duplication
22892289
#define _IS_DUPE(N) TERN0(HAS_DUPLICATION_MODE, (extruder_duplication_enabled && TERN1(MULTI_NOZZLE_DUPLICATION, TEST(duplication_e_mask, N))))

Marlin/src/module/stepper/indirection.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
454454
/**
455455
* Extruder indirection for the single E axis
456456
*/
457-
#if ENABLED(SWITCHING_EXTRUDER) // One stepper driver per two extruders, reversed on odd index
457+
#if HAS_SWITCHING_EXTRUDER // One stepper driver per two extruders, reversed on odd index
458458
#if EXTRUDERS > 7
459459
#define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else if (E < 6) { E2_STEP_WRITE(V); } else { E3_STEP_WRITE(V); } }while(0)
460460
#define NORM_E_DIR(E) do{ switch (E) { \

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

0 commit comments

Comments
 (0)