From 9019ea0fce853e02c6ef860e18ca944b8b1084ae Mon Sep 17 00:00:00 2001 From: Kevin Date: Fri, 16 Feb 2018 16:59:44 +0100 Subject: [PATCH] Option to force X or Y to home first when homing the other axis --- .travis.yml | 8 ++++---- Marlin/Configuration_adv.h | 3 +++ Marlin/src/gcode/calibrate/G28.cpp | 16 ++++++++++++---- Marlin/src/inc/SanityCheck.h | 10 +++++++++- 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7d73787e3e..fd0a767e3a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -67,7 +67,7 @@ script: - opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS - opt_enable BLINKM PCA9632 RGB_LED NEOPIXEL_LED AUTO_POWER_CONTROL - opt_enable AUTO_BED_LEVELING_LINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE - - opt_enable_adv FWRETRACT MAX7219_DEBUG LED_CONTROL_MENU CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL + - opt_enable_adv FWRETRACT MAX7219_DEBUG LED_CONTROL_MENU CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CODEPENDENT_XY_HOMING - opt_set ABL_GRID_POINTS_X 16 - opt_set ABL_GRID_POINTS_Y 16 - opt_set_adv FANMUX0_PIN 53 @@ -84,13 +84,13 @@ script: - opt_set TEMP_SENSOR_4 999 - opt_set TEMP_SENSOR_BED 1 - opt_enable AUTO_BED_LEVELING_UBL DEBUG_LEVELING_FEATURE G26_MESH_EDITING ENABLE_LEVELING_FADE_HEIGHT EEPROM_SETTINGS EEPROM_CHITCHAT G3D_PANEL SKEW_CORRECTION - - opt_enable_adv CUSTOM_USER_MENUS I2C_POSITION_ENCODERS BABYSTEPPING BABYSTEP_XY LIN_ADVANCE NANODLP_Z_SYNC + - opt_enable_adv CUSTOM_USER_MENUS I2C_POSITION_ENCODERS BABYSTEPPING BABYSTEP_XY LIN_ADVANCE NANODLP_Z_SYNC QUICK_HOME - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM} # - # Add a Sled Z Probe, do non-segmented moves, use Japanese language + # Add a Sled Z Probe, use UBL Cartesian moves, use Japanese language # - opt_set LANGUAGE kana_utf8 - - opt_enable Z_PROBE_SLED + - opt_enable Z_PROBE_SLED SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE - opt_disable SEGMENT_LEVELED_MOVES - opt_enable_adv BABYSTEP_ZPROBE_OFFSET DOUBLECLICK_FOR_Z_BABYSTEPPING - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM} diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index f7fc3d4061..243ad32974 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -362,6 +362,9 @@ // When G28 is called, this option will make Y home before X //#define HOME_Y_BEFORE_X +// Enable this if X or Y can't home without homing the other axis first. +//#define CODEPENDENT_XY_HOMING + // @section machine #define AXIS_RELATIVE_MODES {false, false, false, false} diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 7368314942..5f3e7bfd8b 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -227,10 +227,14 @@ void GcodeSuite::G28(const bool always_home_all) { #endif + // Home Y (before X) #if ENABLED(HOME_Y_BEFORE_X) - // Home Y - if (home_all || homeY) { + if (home_all || homeY + #if ENABLED(CODEPENDENT_XY_HOMING) + || homeX + #endif + ) { HOMEAXIS(Y); #if ENABLED(DEBUG_LEVELING_FEATURE) if (DEBUGGING(LEVELING)) DEBUG_POS("> homeY", current_position); @@ -240,7 +244,11 @@ void GcodeSuite::G28(const bool always_home_all) { #endif // Home X - if (home_all || homeX) { + if (home_all || homeX + #if ENABLED(CODEPENDENT_XY_HOMING) && DISABLED(HOME_Y_BEFORE_X) + || homeY + #endif + ) { #if ENABLED(DUAL_X_CARRIAGE) @@ -271,8 +279,8 @@ void GcodeSuite::G28(const bool always_home_all) { #endif } + // Home Y (after X) #if DISABLED(HOME_Y_BEFORE_X) - // Home Y if (home_all || homeY) { HOMEAXIS(Y); #if ENABLED(DEBUG_LEVELING_FEATURE) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index af1762dc32..03ace21c3c 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -886,12 +886,20 @@ static_assert(1 >= 0 #endif /** - * Homing Bump + * Homing */ #if X_HOME_BUMP_MM < 0 || Y_HOME_BUMP_MM < 0 || Z_HOME_BUMP_MM < 0 #error "[XYZ]_HOME_BUMP_MM must be greater than or equal to 0." #endif +#if ENABLED(CODEPENDENT_XY_HOMING) + #if ENABLED(QUICK_HOME) + #error "QUICK_HOME is incompatible with CODEPENDENT_XY_HOMING." + #elif IS_KINEMATIC + #error "CODEPENDENT_XY_HOMING requires a Cartesian setup." + #endif +#endif + /** * Make sure Z_SAFE_HOMING point is reachable */