From 4d6bb52b2654680de3f6e688e9c8f17173abe089 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 14 May 2016 14:46:14 -0700 Subject: [PATCH] Don't try to enable unused auto fans Addressing #3743 --- Marlin/temperature.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 19e66c674..76bab525f 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -332,7 +332,7 @@ int Temperature::getHeaterPower(int heater) { #if HAS_AUTO_FAN void Temperature::checkExtruderAutoFans() { - const uint8_t fanPin[] = { EXTRUDER_0_AUTO_FAN_PIN, EXTRUDER_1_AUTO_FAN_PIN, EXTRUDER_2_AUTO_FAN_PIN, EXTRUDER_3_AUTO_FAN_PIN }; + const int8_t fanPin[] = { EXTRUDER_0_AUTO_FAN_PIN, EXTRUDER_1_AUTO_FAN_PIN, EXTRUDER_2_AUTO_FAN_PIN, EXTRUDER_3_AUTO_FAN_PIN }; const int fanBit[] = { 0, EXTRUDER_1_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN ? 0 : 1, EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN ? 0 : @@ -347,10 +347,13 @@ int Temperature::getHeaterPower(int heater) { SBI(fanState, fanBit[f]); } for (int f = 0; f <= 3; f++) { - unsigned char newFanSpeed = TEST(fanState, f) ? EXTRUDER_AUTO_FAN_SPEED : 0; - // this idiom allows both digital and PWM fan outputs (see M42 handling). - digitalWrite(fanPin[f], newFanSpeed); - analogWrite(fanPin[f], newFanSpeed); + int8_t pin = fanPin[f]; + if (pin >= 0) { + unsigned char newFanSpeed = TEST(fanState, f) ? EXTRUDER_AUTO_FAN_SPEED : 0; + // this idiom allows both digital and PWM fan outputs (see M42 handling). + digitalWrite(pin, newFanSpeed); + analogWrite(pin, newFanSpeed); + } } }