diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 4d4f1ce65d..13f2116237 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -77,6 +77,7 @@ static void menu_action_setting_edit_callback_float52(const char* pstr, float* p static void menu_action_setting_edit_callback_long5(const char* pstr, unsigned long* ptr, unsigned long minValue, unsigned long maxValue, menuFunc_t callbackFunc); #define ENCODER_STEPS_PER_MENU_ITEM 5 +#define ENCODER_FEEDRATE_DEADZONE 10 /* Helper macros for menus */ #define START_MENU() do { \ @@ -158,10 +159,34 @@ static void lcd_status_screen() if (LCD_CLICKED) { currentMenu = lcd_main_menu; + encoderPosition = 0; lcd_quick_feedback(); } - feedmultiply += int(encoderPosition); - encoderPosition = 0; + + // Dead zone at 100% feedrate + if (feedmultiply < 100 && (feedmultiply + int(encoderPosition)) > 100 || + feedmultiply > 100 && (feedmultiply + int(encoderPosition)) < 100) + { + encoderPosition = 0; + feedmultiply = 100; + } + + if (feedmultiply == 100 && int(encoderPosition) > ENCODER_FEEDRATE_DEADZONE) + { + feedmultiply += int(encoderPosition) - ENCODER_FEEDRATE_DEADZONE; + encoderPosition = 0; + } + else if (feedmultiply == 100 && int(encoderPosition) < -ENCODER_FEEDRATE_DEADZONE) + { + feedmultiply += int(encoderPosition) + ENCODER_FEEDRATE_DEADZONE; + encoderPosition = 0; + } + else if (feedmultiply != 100) + { + feedmultiply += int(encoderPosition); + encoderPosition = 0; + } + if (feedmultiply < 10) feedmultiply = 10; if (feedmultiply > 999)