From 4d6bb52b2654680de3f6e688e9c8f17173abe089 Mon Sep 17 00:00:00 2001
From: Scott Lahteine <sourcetree@thinkyhead.com>
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 19e66c6742..76bab525f9 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);
+      }
     }
   }