Fix PARKING_EXTRUDER homing with solenoid (#20473)

This commit is contained in:
zeleps
2021-01-01 22:54:44 +02:00
committed by GitHub
parent c840bbc970
commit 815c636449
5 changed files with 71 additions and 35 deletions

View File

@ -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)