From ce9508538988029c89f8d5a601263701f3a9a9ec Mon Sep 17 00:00:00 2001 From: thisiskeithb <13375512+thisiskeithb@users.noreply.github.com> Date: Fri, 22 Oct 2021 17:17:35 -0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8Sheet=20Profile=20Testing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Automatically adjust Z Probe Offset with M851 based on selected Sheet Profile. *** Beta feature! *** Use at your own risk! --- Marlin/Configuration_adv.h | 41 +++++++ Marlin/src/lcd/language/language_en.h | 1 + Marlin/src/lcd/menu/menu_configuration.cpp | 130 +++++++++++++++++++++ 3 files changed, 172 insertions(+) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index a020c8cc1f9ce..2fce70b1eb3d5 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -3805,6 +3805,47 @@ //#define CONFIG_MENU_ITEM_5_CONFIRM #endif +/** + * Sheet Profiles + * *** Beta feature! *** + * + * Automatically adjust Z Probe Offset with M851 based on selected Sheet Profile. + * + * BABYSTEP_ZPROBE_OFFSET is currently required as it provides a simplified Z probe offset experience. + */ +#define SHEET_PROFILES_MENU +#if BOTH(SHEET_PROFILES_MENU, BABYSTEP_ZPROBE_OFFSET) + //#define SHEET_PROFILES_TITLE "Sheet Profiles" + //#define SHEET_PROFILES_SCRIPT_DONE "M117 New Sheet Selected" + //#define SHEET_PROFILES_SCRIPT_AUDIBLE_FEEDBACK + #define SHEET_PROFILES_SCRIPT_RETURN // Return to status screen after sheet is selected + #define SHEET_PROFILES_ONLY_IDLE // Only show sheet profile menu when the machine is idle + #define SHEET_PROFILES_AUTO_SAVE // Send M500 after after sheet is selected + + // + // Sheet Profiles - Up to 25 are supported without changes + // + #define SHEET_1_DESC "Satin" // Prusa Powder-coated Satin Spring Steel Sheet + #define SHEET_1_OFFSET -1.21 + #define SHEET_1_CONFIRM // Show a confirmation dialog before this action + + #define SHEET_2_DESC "Ultistik" // ULTISTIK Premium Powder Coated Ultem (PEI) Build Plate + #define SHEET_2_OFFSET -1.15 + #define SHEET_2_CONFIRM + + #define SHEET_3_DESC "Smooth" // Prusa Smooth PEI Spring Steel Sheet + #define SHEET_3_OFFSET -0.08 + #define SHEET_3_CONFIRM + + #define SHEET_4_DESC "Textured" // Prusa Textured PEI Spring Steel Sheet + #define SHEET_4_OFFSET -1.0 + #define SHEET_4_CONFIRM + + #define SHEET_5_DESC "Garolite" // Garolite/Phenolic LE attached to a generic spring steel sheet + #define SHEET_5_OFFSET -1.2 + #define SHEET_5_CONFIRM +#endif + /** * User-defined buttons to run custom G-code. * Up to 25 may be defined. diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 9a92a7e268fb3..b5658c829b7ac 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -161,6 +161,7 @@ namespace Language_en { LSTR MSG_MESH_Y = _UxGT("Index Y"); LSTR MSG_MESH_EDIT_Z = _UxGT("Z Value"); LSTR MSG_CUSTOM_COMMANDS = _UxGT("Custom Commands"); + LSTR MSG_SHEET_PROFILES = _UxGT("Sheet Profiles"); LSTR MSG_M48_TEST = _UxGT("M48 Probe Test"); LSTR MSG_M48_POINT = _UxGT("M48 Point"); LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Probe out of bounds"); diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 6d6b0228fb406..ba7dc853918e2 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -453,6 +453,126 @@ void menu_advanced_settings(); #endif // CUSTOM_MENU_CONFIG +#if ENABLED(SHEET_PROFILES_MENU) + + void _lcd_sheet_menu_configuration_gcode(PGM_P const cmd) { + queue.inject_P(cmd); + TERN_(SHEET_PROFILES_SCRIPT_AUDIBLE_FEEDBACK, ui.completion_feedback()); + TERN_(SHEET_PROFILES_SCRIPT_RETURN, ui.return_to_status()); + } + + void sheet_menu_configuration() { + START_MENU(); + BACK_ITEM(MSG_MAIN); + + #define HAS_SHEET_CONF(N) (defined(SHEET_##N##_DESC) && defined(SHEET_##N##_OFFSET)) + + #ifdef SHEET_PROFILES_SCRIPT_DONE + #define _DONE_SCRIPT "\n" SHEET_PROFILES_SCRIPT_DONE + #else + #define _DONE_SCRIPT "" + #endif + + #if ENABLED(SHEET_PROFILES_AUTO_SAVE) + #define _SAVE_SCRIPT "\nM500" + #else + #define _SAVE_SCRIPT "" + #endif + + #define SHEET_GCODE_LAMBDA_CONF(N) []{ _lcd_sheet_menu_configuration_gcode(PSTR("M851 Z" STRINGIFY(SHEET_##N##_OFFSET) _SAVE_SCRIPT "\nM117 " SHEET_##N##_DESC " Sheet: " STRINGIFY(SHEET_##N##_OFFSET) _DONE_SCRIPT)); } + //#define _SHEET_CONF(N) ACTION_ITEM_P(PSTR(SHEET_##N##_DESC " Sheet: " STRINGIFY(SHEET_##N##_OFFSET)), SHEET_GCODE_LAMBDA_CONF(N)); + #define _SHEET_CONF(N) ACTION_ITEM_P(PSTR(SHEET_##N##_DESC " Loaded"), SHEET_GCODE_LAMBDA_CONF(N)); + #define _SHEET_CONF_CONFIRM(N) \ + SUBMENU_P(PSTR(SHEET_##N##_DESC ": " STRINGIFY(SHEET_##N##_OFFSET)), []{ \ + MenuItem_confirm::confirm_screen( \ + SHEET_GCODE_LAMBDA_CONF(N), \ + ui.goto_previous_screen, \ + PSTR("Load " SHEET_##N##_DESC " Sheet?") \ + ); \ + }) + + #define SHEET_CONF(N) do{ if (ENABLED(SHEET_##N##_CONFIRM)) _SHEET_CONF_CONFIRM(N); else _SHEET_CONF(N); }while(0) + + #if HAS_SHEET_CONF(1) + SHEET_CONF(1); + #endif + #if HAS_SHEET_CONF(2) + SHEET_CONF(2); + #endif + #if HAS_SHEET_CONF(3) + SHEET_CONF(3); + #endif + #if HAS_SHEET_CONF(4) + SHEET_CONF(4); + #endif + #if HAS_SHEET_CONF(5) + SHEET_CONF(5); + #endif + #if HAS_SHEET_CONF(6) + SHEET_CONF(6); + #endif + #if HAS_SHEET_CONF(7) + SHEET_CONF(7); + #endif + #if HAS_SHEET_CONF(8) + SHEET_CONF(8); + #endif + #if HAS_SHEET_CONF(9) + SHEET_CONF(9); + #endif + #if HAS_SHEET_CONF(10) + SHEET_CONF(10); + #endif + #if HAS_SHEET_CONF(11) + SHEET_CONF(11); + #endif + #if HAS_SHEET_CONF(12) + SHEET_CONF(12); + #endif + #if HAS_SHEET_CONF(13) + SHEET_CONF(13); + #endif + #if HAS_SHEET_CONF(14) + SHEET_CONF(14); + #endif + #if HAS_SHEET_CONF(15) + SHEET_CONF(15); + #endif + #if HAS_SHEET_CONF(16) + SHEET_CONF(16); + #endif + #if HAS_SHEET_CONF(17) + SHEET_CONF(17); + #endif + #if HAS_SHEET_CONF(18) + SHEET_CONF(18); + #endif + #if HAS_SHEET_CONF(19) + SHEET_CONF(19); + #endif + #if HAS_SHEET_CONF(20) + SHEET_CONF(20); + #endif + #if HAS_SHEET_CONF(21) + SHEET_CONF(21); + #endif + #if HAS_SHEET_CONF(22) + SHEET_CONF(22); + #endif + #if HAS_SHEET_CONF(23) + SHEET_CONF(23); + #endif + #if HAS_SHEET_CONF(24) + SHEET_CONF(24); + #endif + #if HAS_SHEET_CONF(25) + SHEET_CONF(25); + #endif + END_MENU(); + } + +#endif // SHEET_PROFILES_MENU + void menu_configuration() { const bool busy = printer_busy(); @@ -476,6 +596,16 @@ void menu_configuration() { } #endif + #if ENABLED(SHEET_PROFILES_MENU) + if (TERN1(SHEET_PROFILES_ONLY_IDLE, !busy)) { + #ifdef SHEET_PROFILES_TITLE + SUBMENU_P(PSTR(SHEET_PROFILES_TITLE), sheet_menu_configuration); + #else + SUBMENU(MSG_SHEET_PROFILES, sheet_menu_configuration); + #endif + } + #endif + SUBMENU(MSG_ADVANCED_SETTINGS, menu_advanced_settings); #if ENABLED(BABYSTEP_ZPROBE_OFFSET)