From 97ead2eccb98fa00a67b9b3975956e36eed4e3cc Mon Sep 17 00:00:00 2001
From: Cameron Lai <cameron.lai@makible.com>
Date: Fri, 25 Apr 2014 12:57:11 +0800
Subject: [PATCH] Fix for microstepping pin mapping, not using Teensy pin
 mapping, but Arduino's default pin mapping so Arduino library can be used

---
 Marlin/pins.h      | 18 ++++++++++--------
 Marlin/stepper.cpp | 23 +++++++++++++++++++----
 2 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/Marlin/pins.h b/Marlin/pins.h
index 3e5fa79c64..02a568a620 100644
--- a/Marlin/pins.h
+++ b/Marlin/pins.h
@@ -79,14 +79,16 @@
 #endif
 
 // Microstepping pins
-#define X_MS1_PIN 13
-#define X_MS2_PIN 14
-#define Y_MS1_PIN 33
-#define Y_MS2_PIN 32
-#define Z_MS1_PIN 31
-#define Z_MS2_PIN 30
-#define E0_MS1_PIN 29
-#define E0_MS2_PIN 28
+// Note that the pin mapping is not from fastio.h
+// See Sd2PinMap.h for the pin configurations
+#define X_MS1_PIN 25
+#define X_MS2_PIN 26
+#define Y_MS1_PIN 9
+#define Y_MS2_PIN 8
+#define Z_MS1_PIN 7
+#define Z_MS2_PIN 6
+#define E0_MS1_PIN 5
+#define E0_MS2_PIN 4
 
 #endif /* 88 */
 
diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp
index eaba4362dc..20bedcade8 100644
--- a/Marlin/stepper.cpp
+++ b/Marlin/stepper.cpp
@@ -1228,13 +1228,22 @@ void digipot_current(uint8_t driver, int current)
 
 void microstep_init()
 {
-  #if defined(X_MS1_PIN) && X_MS1_PIN > -1
   const uint8_t microstep_modes[] = MICROSTEP_MODES;
-  pinMode(X_MS2_PIN,OUTPUT);
+
+  #if defined(E1_MS1_PIN) && E1_MS1_PIN > -1
+  pinMode(E1_MS1_PIN,OUTPUT);
+  pinMode(E1_MS2_PIN,OUTPUT); 
+  #endif
+
+  #if defined(X_MS1_PIN) && X_MS1_PIN > -1
+  pinMode(X_MS1_PIN,OUTPUT);
+  pinMode(X_MS2_PIN,OUTPUT);  
+  pinMode(Y_MS1_PIN,OUTPUT);
   pinMode(Y_MS2_PIN,OUTPUT);
-  pinMode(Z_MS2_PIN,OUTPUT);
+  pinMode(Z_MS1_PIN,OUTPUT);
+  pinMode(Z_MS2_PIN,OUTPUT);  
+  pinMode(E0_MS1_PIN,OUTPUT);
   pinMode(E0_MS2_PIN,OUTPUT);
-  pinMode(E1_MS2_PIN,OUTPUT);
   for(int i=0;i<=4;i++) microstep_mode(i,microstep_modes[i]);
   #endif
 }
@@ -1247,7 +1256,9 @@ void microstep_ms(uint8_t driver, int8_t ms1, int8_t ms2)
     case 1: digitalWrite( Y_MS1_PIN,ms1); break;
     case 2: digitalWrite( Z_MS1_PIN,ms1); break;
     case 3: digitalWrite(E0_MS1_PIN,ms1); break;
+    #if defined(E1_MS1_PIN) && E1_MS1_PIN > -1
     case 4: digitalWrite(E1_MS1_PIN,ms1); break;
+    #endif
   }
   if(ms2 > -1) switch(driver)
   {
@@ -1255,7 +1266,9 @@ void microstep_ms(uint8_t driver, int8_t ms1, int8_t ms2)
     case 1: digitalWrite( Y_MS2_PIN,ms2); break;
     case 2: digitalWrite( Z_MS2_PIN,ms2); break;
     case 3: digitalWrite(E0_MS2_PIN,ms2); break;
+    #if defined(E1_MS2_PIN) && E1_MS2_PIN > -1
     case 4: digitalWrite(E1_MS2_PIN,ms2); break;
+    #endif
   }
 }
 
@@ -1286,8 +1299,10 @@ void microstep_readings()
       SERIAL_PROTOCOLPGM("E0: ");
       SERIAL_PROTOCOL(   digitalRead(E0_MS1_PIN));
       SERIAL_PROTOCOLLN( digitalRead(E0_MS2_PIN));
+      #if defined(E1_MS1_PIN) && E1_MS1_PIN > -1
       SERIAL_PROTOCOLPGM("E1: ");
       SERIAL_PROTOCOL(   digitalRead(E1_MS1_PIN));
       SERIAL_PROTOCOLLN( digitalRead(E1_MS2_PIN));
+      #endif
 }