Support individual solenoid disable with M381 (#13008)

This commit is contained in:
Mark Zachmann 2019-02-06 07:34:53 -05:00 committed by Scott Lahteine
parent d81342254a
commit 19cf72e057
4 changed files with 60 additions and 42 deletions

View file

@ -28,34 +28,42 @@
#include "../module/motion.h" // for active_extruder #include "../module/motion.h" // for active_extruder
void enable_solenoid(const uint8_t num) { #if ENABLED(MANUAL_SOLENOID_CONTROL)
#define HAS_SOLENOID(N) HAS_SOLENOID_##N
#else
#define HAS_SOLENOID(N) (HAS_SOLENOID_##N && EXTRUDERS > N)
#endif
// Used primarily with MANUAL_SOLENOID_CONTROL
static void set_solenoid(const uint8_t num, const bool active) {
const uint8_t value = active ? HIGH : LOW;
switch (num) { switch (num) {
case 0: case 0:
OUT_WRITE(SOL0_PIN, HIGH); OUT_WRITE(SOL0_PIN, value);
break; break;
#if HAS_SOLENOID_1 && EXTRUDERS > 1 #if HAS_SOLENOID(1)
case 1: case 1:
OUT_WRITE(SOL1_PIN, HIGH); OUT_WRITE(SOL1_PIN, value);
break; break;
#endif #endif
#if HAS_SOLENOID_2 && EXTRUDERS > 2 #if HAS_SOLENOID(2)
case 2: case 2:
OUT_WRITE(SOL2_PIN, HIGH); OUT_WRITE(SOL2_PIN, value);
break; break;
#endif #endif
#if HAS_SOLENOID_3 && EXTRUDERS > 3 #if HAS_SOLENOID(3)
case 3: case 3:
OUT_WRITE(SOL3_PIN, HIGH); OUT_WRITE(SOL3_PIN, value);
break; break;
#endif #endif
#if HAS_SOLENOID_4 && EXTRUDERS > 4 #if HAS_SOLENOID(4)
case 4: case 4:
OUT_WRITE(SOL4_PIN, HIGH); OUT_WRITE(SOL4_PIN, value);
break; break;
#endif #endif
#if HAS_SOLENOID_5 && EXTRUDERS > 5 #if HAS_SOLENOID(5)
case 5: case 5:
OUT_WRITE(SOL5_PIN, HIGH); OUT_WRITE(SOL5_PIN, value);
break; break;
#endif #endif
default: default:
@ -64,24 +72,26 @@ void enable_solenoid(const uint8_t num) {
} }
} }
void enable_solenoid(const uint8_t num) { set_solenoid(num, true); }
void disable_solenoid(const uint8_t num) { set_solenoid(num, false); }
void enable_solenoid_on_active_extruder() { enable_solenoid(active_extruder); } void enable_solenoid_on_active_extruder() { enable_solenoid(active_extruder); }
void disable_all_solenoids() { void disable_all_solenoids() {
OUT_WRITE(SOL0_PIN, LOW); disable_solenoid(0);
#if HAS_SOLENOID_1 && EXTRUDERS > 1 #if HAS_SOLENOID(1)
OUT_WRITE(SOL1_PIN, LOW); disable_solenoid(1);
#endif #endif
#if HAS_SOLENOID_2 && EXTRUDERS > 2 #if HAS_SOLENOID(2)
OUT_WRITE(SOL2_PIN, LOW); disable_solenoid(2);
#endif #endif
#if HAS_SOLENOID_3 && EXTRUDERS > 3 #if HAS_SOLENOID(3)
OUT_WRITE(SOL3_PIN, LOW); disable_solenoid(3);
#endif #endif
#if HAS_SOLENOID_4 && EXTRUDERS > 4 #if HAS_SOLENOID(4)
OUT_WRITE(SOL4_PIN, LOW); disable_solenoid(4);
#endif #endif
#if HAS_SOLENOID_5 && EXTRUDERS > 5 #if HAS_SOLENOID(5)
OUT_WRITE(SOL5_PIN, LOW); disable_solenoid(5);
#endif #endif
} }

View file

@ -24,3 +24,4 @@
void enable_solenoid_on_active_extruder(); void enable_solenoid_on_active_extruder();
void disable_all_solenoids(); void disable_all_solenoids();
void enable_solenoid(const uint8_t num); void enable_solenoid(const uint8_t num);
void disable_solenoid(const uint8_t num);

View file

@ -35,15 +35,22 @@
*/ */
void GcodeSuite::M380() { void GcodeSuite::M380() {
#if ENABLED(MANUAL_SOLENOID_CONTROL) #if ENABLED(MANUAL_SOLENOID_CONTROL)
enable_solenoid(parser.seenval('S') ? parser.value_int() : active_extruder); enable_solenoid(parser.intval('S', active_extruder));
#else #else
enable_solenoid_on_active_extruder(); enable_solenoid_on_active_extruder();
#endif #endif
} }
/** /**
* M381: Disable all solenoids * M381: Disable all solenoids if EXT_SOLENOID
* Disable selected/active solenoid if MANUAL_SOLENOID_CONTROL
*/ */
void GcodeSuite::M381() { disable_all_solenoids(); } void GcodeSuite::M381() {
#if ENABLED(MANUAL_SOLENOID_CONTROL)
disable_solenoid(parser.intval('S', active_extruder));
#else
disable_all_solenoids();
#endif
}
#endif // EXT_SOLENOID || MANUAL_SOLENOID_CONTROL #endif // EXT_SOLENOID || MANUAL_SOLENOID_CONTROL

View file

@ -547,7 +547,7 @@ void GcodeSuite::process_parsed_command(
#if ENABLED(EXT_SOLENOID) || ENABLED(MANUAL_SOLENOID_CONTROL) #if ENABLED(EXT_SOLENOID) || ENABLED(MANUAL_SOLENOID_CONTROL)
case 380: M380(); break; // M380: Activate solenoid on active (or specified) extruder case 380: M380(); break; // M380: Activate solenoid on active (or specified) extruder
case 381: M381(); break; // M381: Disable all solenoids case 381: M381(); break; // M381: Disable all solenoids or, if MANUAL_SOLENOID_CONTROL, active (or specified) solenoid
#endif #endif
case 400: M400(); break; // M400: Finish all moves case 400: M400(); break; // M400: Finish all moves