From 99b0c1fe56934e2deeb9a64ae192258a6e34807a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 15 Nov 2016 15:50:54 -0600 Subject: [PATCH] Fix DIRECT_MIXING_IN_G1 to preserve the previous mix --- Marlin/Marlin_main.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 5473f5387..3c225b3ab 100755 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -2672,16 +2672,26 @@ static void homeaxis(AxisEnum axis) { #if ENABLED(DIRECT_MIXING_IN_G1) // Get mixing parameters from the GCode - // Factors that are left out are set to 0 // The total "must" be 1.0 (but it will be normalized) + // If no mix factors are given, the old mix is preserved void gcode_get_mix() { const char* mixing_codes = "ABCDHI"; - for (int i = 0; i < MIXING_STEPPERS; i++) { - float v = code_seen(mixing_codes[i]) ? code_value_float() : 0.0; - NOLESS(v, 0.0); - mixing_factor[i] = RECIPROCAL(v); + byte mix_bits = 0; + for (uint8_t i = 0; i < MIXING_STEPPERS; i++) { + if (code_seen(mixing_codes[i])) { + SBI(mix_bits, i); + float v = code_value_float(); + NOLESS(v, 0.0); + mixing_factor[i] = RECIPROCAL(v); + } + } + // If any mixing factors were included, clear the rest + // If none were included, preserve the last mix + if (mix_bits) { + for (uint8_t i = 0; i < MIXING_STEPPERS; i++) + if (!TEST(mix_bits, i)) mixing_factor[i] = 0.0; + normalize_mix(); } - normalize_mix(); } #endif