Fix PARKING_EXTRUDER homing with solenoid (#20473)
This commit is contained in:
@ -28,22 +28,29 @@
|
||||
|
||||
#include "../module/motion.h" // for active_extruder
|
||||
|
||||
#if ENABLED(MANUAL_SOLENOID_CONTROL)
|
||||
#define HAS_SOLENOID(N) HAS_SOLENOID_##N
|
||||
// PARKING_EXTRUDER options alter the default behavior of solenoids, this ensures compliance of M380-381
|
||||
|
||||
#if ENABLED(PARKING_EXTRUDER)
|
||||
#include "../module/tool_change.h"
|
||||
#define SOLENOID_MAGNETIZED_STATE (TERN_(PARKING_EXTRUDER_SOLENOIDS_INVERT,!)PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE)
|
||||
#else
|
||||
#define HAS_SOLENOID(N) (HAS_SOLENOID_##N && EXTRUDERS > N)
|
||||
#define SOLENOID_MAGNETIZED_STATE HIGH
|
||||
#endif
|
||||
|
||||
#define HAS_SOLENOID(N) (HAS_SOLENOID_##N && TERN(MANUAL_SOLENOID_CONTROL, true, EXTRUDERS > N))
|
||||
|
||||
// Used primarily with MANUAL_SOLENOID_CONTROL
|
||||
static void set_solenoid(const uint8_t num, const bool active) {
|
||||
const uint8_t value = active ? HIGH : LOW;
|
||||
const uint8_t value = active ? SOLENOID_MAGNETIZED_STATE : !SOLENOID_MAGNETIZED_STATE;
|
||||
switch (num) {
|
||||
case 0:
|
||||
OUT_WRITE(SOL0_PIN, value);
|
||||
TERN_(PARKING_EXTRUDER, if (!active && active_extruder == 0) parking_extruder_set_parked()); // If active extruder's solenoid is disabled, carriage is considered parked
|
||||
break;
|
||||
#if HAS_SOLENOID(1)
|
||||
case 1:
|
||||
OUT_WRITE(SOL1_PIN, value);
|
||||
TERN_(PARKING_EXTRUDER, if (!active && active_extruder == 1) parking_extruder_set_parked()); // If active extruder's solenoid is disabled, carriage is considered parked
|
||||
break;
|
||||
#endif
|
||||
#if HAS_SOLENOID(2)
|
||||
|
Reference in New Issue
Block a user