diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index cdb1feda75..7ab8ac0fe9 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -853,14 +853,14 @@ //#define BLTOUCH_FORCE_MODE_SET /** - * Use "HIGH SPEED" mode for probing. + * Enable "HIGH SPEED" option for probing. * Danger: Disable if your probe sometimes fails. Only suitable for stable well-adjusted systems. * This feature was designed for Deltabots with very fast Z moves; however, higher speed Cartesians * might be able to use it. If the machine can't raise Z fast enough the BLTouch may go into ALARM. * - * This only sets the default state. Changed with 'M401 S' or UI, saved with M500. + * Set the default state here, change with 'M401 S' or UI, use M500 to save, M502 to reset. */ - //#define BLTOUCH_HS_MODE + //#define BLTOUCH_HS_MODE true // Safety: Enable voltage mode settings in the LCD menu. //#define BLTOUCH_LCD_VOLTAGE_MENU diff --git a/Marlin/src/feature/bltouch.cpp b/Marlin/src/feature/bltouch.cpp index 9bb71669c7..d3348e79f0 100644 --- a/Marlin/src/feature/bltouch.cpp +++ b/Marlin/src/feature/bltouch.cpp @@ -28,8 +28,12 @@ BLTouch bltouch; -bool BLTouch::od_5v_mode, // Initialized by settings.load, 0 = Open Drain; 1 = 5V Drain - BLTouch::high_speed_mode; // Initialized by settings.load, 0 = Low Speed; 1 = High Speed +bool BLTouch::od_5v_mode; // Initialized by settings.load, 0 = Open Drain; 1 = 5V Drain +#ifdef BLTOUCH_HS_MODE + bool BLTouch::high_speed_mode; // Initialized by settings.load, 0 = Low Speed; 1 = High Speed +#else + constexpr bool BLTouch::high_speed_mode; +#endif #include "../module/servo.h" #include "../module/probe.h" diff --git a/Marlin/src/feature/bltouch.h b/Marlin/src/feature/bltouch.h index fbb8267296..ae3ab66300 100644 --- a/Marlin/src/feature/bltouch.h +++ b/Marlin/src/feature/bltouch.h @@ -68,10 +68,15 @@ class BLTouch { public: static void init(const bool set_voltage=false); - static bool od_5v_mode, // Initialized by settings.load, 0 = Open Drain; 1 = 5V Drain - high_speed_mode; // Initialized by settings.load, 0 = Low Speed; 1 = High Speed + static bool od_5v_mode; // Initialized by settings.load, 0 = Open Drain; 1 = 5V Drain - const float z_extra_clearance() { return high_speed_mode ? 7 : 0; } + #ifdef BLTOUCH_HS_MODE + static bool high_speed_mode; // Initialized by settings.load, 0 = Low Speed; 1 = High Speed + #else + static constexpr bool high_speed_mode = false; + #endif + + static inline float z_extra_clearance() { return high_speed_mode ? 7 : 0; } // DEPLOY and STOW are wrapped for error handling - these are used by homing and by probing static bool deploy() { return deploy_proc(); } diff --git a/Marlin/src/gcode/probe/M401_M402.cpp b/Marlin/src/gcode/probe/M401_M402.cpp index 4854f33783..940cffe984 100644 --- a/Marlin/src/gcode/probe/M401_M402.cpp +++ b/Marlin/src/gcode/probe/M401_M402.cpp @@ -27,22 +27,20 @@ #include "../gcode.h" #include "../../module/motion.h" #include "../../module/probe.h" -#if ENABLED(BLTOUCH) + +#ifdef BLTOUCH_HS_MODE #include "../../feature/bltouch.h" #endif /** * M401: Deploy and activate the Z probe * - * With BLTOUCH: + * With BLTOUCH_HS_MODE: * S Set High Speed (HS) Mode and exit without deploy */ void GcodeSuite::M401() { - #if ENABLED(BLTOUCH) - if (parser.seen('S')) { - bltouch.high_speed_mode = parser.value_bool(); - return; - } + #ifdef BLTOUCH_HS_MODE + if (parser.seen('S')) { bltouch.high_speed_mode = parser.value_bool(); return; } #endif probe.deploy(); TERN_(PROBE_TARE, probe.tare()); diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 4519990a3b..28de15b12b 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -238,7 +238,9 @@ void menu_advanced_settings(); ACTION_ITEM(MSG_BLTOUCH_DEPLOY, bltouch._deploy); ACTION_ITEM(MSG_BLTOUCH_STOW, bltouch._stow); ACTION_ITEM(MSG_BLTOUCH_SW_MODE, bltouch._set_SW_mode); - EDIT_ITEM(bool, MSG_BLTOUCH_SPEED_MODE, &bltouch.high_speed_mode); + #ifdef BLTOUCH_HS_MODE + EDIT_ITEM(bool, MSG_BLTOUCH_SPEED_MODE, &bltouch.high_speed_mode); + #endif #if ENABLED(BLTOUCH_LCD_VOLTAGE_MENU) CONFIRM_ITEM(MSG_BLTOUCH_5V_MODE, MSG_BLTOUCH_5V_MODE, MSG_BUTTON_CANCEL, bltouch._set_5V_mode, nullptr, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE)); CONFIRM_ITEM(MSG_BLTOUCH_OD_MODE, MSG_BLTOUCH_OD_MODE, MSG_BUTTON_CANCEL, bltouch._set_OD_mode, nullptr, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE)); diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 02903419aa..930a99585c 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -530,10 +530,12 @@ bool Probe::probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s) { if (probe.test_sensitivity.z) tmc_disable_stallguard(stepperZ, stealth_states.z); set_homing_current(false); #endif + #if ENABLED(BLTOUCH) - if (!bltouch.high_speed_mode && probe_triggered && bltouch.stow()) + if (probe_triggered && !bltouch.high_speed_mode && bltouch.stow()) return true; // Stow in LOW SPEED MODE on every trigger #endif + // Clear endstop flags endstops.hit_on_purpose(); @@ -762,9 +764,7 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai DEBUG_POS("", current_position); } - #if ENABLED(BLTOUCH) - if (bltouch.triggered() && bltouch.high_speed_mode) bltouch._reset(); - #endif + TERN_(BLTOUCH, if (bltouch.high_speed_mode && bltouch.triggered()) bltouch._reset()); // On delta keep Z below clip height or do_blocking_move_to will abort xyz_pos_t npos = { rx, ry, TERN(DELTA, _MIN(delta_clip_start_height, current_position.z), current_position.z) }; diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 337a376ce8..d945ba5b4f 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -277,7 +277,9 @@ typedef struct SettingsDataStruct { // BLTOUCH // bool bltouch_od_5v_mode; - bool bltouch_high_speed_mode; // M401 S + #ifdef BLTOUCH_HS_MODE + bool bltouch_high_speed_mode; // M401 S + #endif // // Kinematic Settings @@ -863,9 +865,11 @@ void MarlinSettings::postprocess() { const bool bltouch_od_5v_mode = TERN0(BLTOUCH, bltouch.od_5v_mode); EEPROM_WRITE(bltouch_od_5v_mode); - _FIELD_TEST(bltouch_high_speed_mode); - const bool bltouch_high_speed_mode = TERN0(BLTOUCH, bltouch.high_speed_mode); - EEPROM_WRITE(bltouch_high_speed_mode); + #ifdef BLTOUCH_HS_MODE + _FIELD_TEST(bltouch_high_speed_mode); + const bool bltouch_high_speed_mode = TERN0(BLTOUCH, bltouch.high_speed_mode); + EEPROM_WRITE(bltouch_high_speed_mode); + #endif } // @@ -1738,13 +1742,15 @@ void MarlinSettings::postprocess() { #endif EEPROM_READ(bltouch_od_5v_mode); - _FIELD_TEST(bltouch_high_speed_mode); - #if ENABLED(BLTOUCH) - const bool &bltouch_high_speed_mode = bltouch.high_speed_mode; - #else - bool bltouch_high_speed_mode; + #ifdef BLTOUCH_HS_MODE + _FIELD_TEST(bltouch_high_speed_mode); + #if ENABLED(BLTOUCH) + const bool &bltouch_high_speed_mode = bltouch.high_speed_mode; + #else + bool bltouch_high_speed_mode; + #endif + EEPROM_READ(bltouch_high_speed_mode); #endif - EEPROM_READ(bltouch_high_speed_mode); } // @@ -2744,7 +2750,9 @@ void MarlinSettings::reset() { // // BLTouch // - TERN_(BLTOUCH, bltouch.high_speed_mode = ENABLED(BLTOUCH_HS_MODE)); + #ifdef BLTOUCH_HS_MODE + bltouch.high_speed_mode = ENABLED(BLTOUCH_HS_MODE); + #endif // // Kinematic settings