From cee5f9020ace7da75895c088a2f9bab3eb2f3a1e Mon Sep 17 00:00:00 2001
From: Bernhard <bkubicek@x201.(none)>
Date: Sun, 15 Jan 2012 17:06:10 +0100
Subject: [PATCH] added suicide pin for a power supply to the arduino that is
 only active if the arduino is holding high for an output.

---
 Marlin/Marlin.pde | 38 ++++++++++++++++++++++++++++++++++----
 Marlin/pins.h     |  1 +
 2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde
index b650909ad1..cabaee13df 100644
--- a/Marlin/Marlin.pde
+++ b/Marlin/Marlin.pde
@@ -161,7 +161,7 @@ static bool fromsd[BUFSIZE];
 static int bufindr = 0;
 static int bufindw = 0;
 static int buflen = 0;
-static int i = 0;
+//static int i = 0;
 static char serial_char;
 static int serial_count = 0;
 static boolean comment_mode = false;
@@ -233,8 +233,30 @@ void setup_photpin()
     #endif
   #endif 
 }
+
+void setup_powerhold()
+{
+ #ifdef SUICIDE_PIN
+    #if (SUICIDE_PIN> -1) 
+      SET_OUTPUT(SUICIDE_PIN);
+      WRITE(SUICIDE_PIN, HIGH);
+    #endif
+  #endif
+}
+
+void suicide()
+{
+ #ifdef SUICIDE_PIN
+    #if (SUICIDE_PIN> -1) 
+      SET_OUTPUT(SUICIDE_PIN);
+      WRITE(SUICIDE_PIN, LOW);
+    #endif
+  #endif
+}
+
 void setup()
 { 
+  setup_powerhold();
   MSerial.begin(BAUDRATE);
   SERIAL_ECHO_START;
   SERIAL_ECHOLNPGM(VERSION_STRING);
@@ -912,10 +934,17 @@ FORCE_INLINE void process_commands()
       case 80: // M80 - ATX Power On
         SET_OUTPUT(PS_ON_PIN); //GND
         break;
+      #endif
+      
       case 81: // M81 - ATX Power Off
-        SET_INPUT(PS_ON_PIN); //Floating
-        break;
-    #endif
+      #if (SUICIDE_PIN >-1)
+        suicide();
+      #else
+        #if (PS_ON_PIN > -1) 
+          SET_INPUT(PS_ON_PIN); //Floating
+        #endif
+      #endif
+        
     case 82:
       axis_relative_modes[3] = false;
       break;
@@ -1314,6 +1343,7 @@ void kill()
   SERIAL_ERROR_START;
   SERIAL_ERRORLNPGM("Printer halted. kill() called !!");
   LCD_MESSAGEPGM("KILLED. ");
+  suicide();
   while(1); // Wait for reset
 }
 
diff --git a/Marlin/pins.h b/Marlin/pins.h
index 6451d74250..28e349161a 100644
--- a/Marlin/pins.h
+++ b/Marlin/pins.h
@@ -582,6 +582,7 @@
 #define FAN_PIN            7
 #define PS_ON_PIN          12
 #define KILL_PIN           -1
+#define SUICIDE_PIN        54  //PIN that has to be turned on right after start, to keep power flowing.
 
 #ifdef ULTRA_LCD
 
-- 
GitLab