From 0fae7ebb09c9f0cf6090898845b9509393b1e1a3 Mon Sep 17 00:00:00 2001 From: Knutwurst <36196269+knutwurst@users.noreply.github.com> Date: Wed, 3 Nov 2021 19:25:31 +0100 Subject: [PATCH] Add auto-power-down feature to 4MAX Pro. --- Marlin/src/lcd/anycubic_touchscreen.cpp | 40 ++++++++++++++++++++-- Marlin/src/lcd/anycubic_touchscreen.h | 2 ++ Marlin/src/pins/ramps/pins_TRIGORILLA_14.h | 1 + 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Marlin/src/lcd/anycubic_touchscreen.cpp b/Marlin/src/lcd/anycubic_touchscreen.cpp index 2e35759a..a2dd4d2a 100755 --- a/Marlin/src/lcd/anycubic_touchscreen.cpp +++ b/Marlin/src/lcd/anycubic_touchscreen.cpp @@ -1273,6 +1273,7 @@ void AnycubicTouchscreenClass::StateHandler() { TFTstate = ANYCUBIC_TFT_STATE_IDLE; HARDWARE_SERIAL_PROTOCOLPGM("J14"); // J14 print done HARDWARE_SERIAL_ENTER(); + powerOFFflag = 1; #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("TFT Serial Debug: SD print done... J14"); #endif @@ -1688,6 +1689,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() { #ifdef SDSUPPORT if ((!planner.movesplanned()) && (TFTstate != ANYCUBIC_TFT_STATE_SDPAUSE) && (TFTstate != ANYCUBIC_TFT_STATE_SDOUTAGE) && (card.isFileOpen())) { ai3m_pause_state = 0; + powerOFFflag = 0; #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state); SERIAL_EOL(); @@ -2100,9 +2102,25 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() { #endif #if EITHER(KNUTWURST_4MAX, KNUTWURST_4MAXP2) + case 41: + if(CodeSeen('O')) { + PrintdoneAndPowerOFF = true; + break; + } else if(CodeSeen('C')) { + PrintdoneAndPowerOFF = false; + break; + } + if(CodeSeen('S')) { + if(PrintdoneAndPowerOFF) { + HARDWARE_SERIAL_PROTOCOLPGM("J35 "); + HARDWARE_SERIAL_ENTER(); + } else { + HARDWARE_SERIAL_PROTOCOLPGM("J34 "); + HARDWARE_SERIAL_ENTER(); + } + } case 42: - if(CaseLight == true) - { + if(CaseLight == true) { SERIAL_ECHOLNPGM("Case Light OFF"); queue.inject_P(PSTR("M355 S1 P0")); CaseLight = false; @@ -2284,11 +2302,29 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() { } #endif +void PowerDown() +{ + for(unsigned char i=0; i<3 ; i++) + { + WRITE(POWER_OFF_PIN,LOW); + delay(10); + WRITE(POWER_OFF_PIN,HIGH); + delay(10); + } +} + void AnycubicTouchscreenClass::CommandScan(){ CheckHeaterError(); CheckSDCardChange(); StateHandler(); + #if ANY(KNUTWURST_4MAX, KNUTWURST_4MAXP2) + if(PrintdoneAndPowerOFF && powerOFFflag && (thermalManager.degHotend(0) < 50 )) { + powerOFFflag = 0; + PowerDown(); + } + #endif + if (TFTbuflen < (TFTBUFSIZE - 1)) { GetCommandFromTFT(); } diff --git a/Marlin/src/lcd/anycubic_touchscreen.h b/Marlin/src/lcd/anycubic_touchscreen.h index 6a670446..5107601e 100755 --- a/Marlin/src/lcd/anycubic_touchscreen.h +++ b/Marlin/src/lcd/anycubic_touchscreen.h @@ -286,6 +286,8 @@ class AnycubicTouchscreenClass { uint16_t HeaterCheckCount = 0; bool IsParked = false; int currentFlowRate = 0; + bool PrintdoneAndPowerOFF = true; + bool powerOFFflag = 0; #if defined(POWER_OUTAGE_TEST) struct OutageDataStruct { diff --git a/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h b/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h index ac3b2172..70773b29 100755 --- a/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h +++ b/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h @@ -60,6 +60,7 @@ #define SDSS 53 #define LED_PIN 13 #define SD_DETECT_PIN 49 +#define POWER_OFF_PIN 21 // Remap MOSFET pins to common usages: #define RAMPS_D10_PIN TG_HEATER_0_PIN // HEATER_0_PIN is always RAMPS_D10_PIN in pins_RAMPS.h