diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 76bab525f..5a03a18cb 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -346,13 +346,15 @@ int Temperature::getHeaterPower(int heater) { if (current_temperature[f] > EXTRUDER_AUTO_FAN_TEMPERATURE) SBI(fanState, fanBit[f]); } + uint8_t fanDone = 0; for (int f = 0; f <= 3; f++) { int8_t pin = fanPin[f]; - if (pin >= 0) { - unsigned char newFanSpeed = TEST(fanState, f) ? EXTRUDER_AUTO_FAN_SPEED : 0; + if (pin >= 0 && !TEST(fanDone, fanBit[f])) { + unsigned char newFanSpeed = TEST(fanState, fanBit[f]) ? EXTRUDER_AUTO_FAN_SPEED : 0; // this idiom allows both digital and PWM fan outputs (see M42 handling). digitalWrite(pin, newFanSpeed); analogWrite(pin, newFanSpeed); + SBI(fanDone, fanBit[f]); } } }