diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index 8d92c936f..5b01604d9 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -4590,14 +4590,20 @@ void lcd_update() { #if ENABLED(ULTIPANEL) static millis_t return_to_status_ms = 0; + + // Handle any queued Move Axis motion manage_manual_move(); + // Update button states for LCD_CLICKED, etc. + // After state changes the next button update + // may be delayed 300-500ms. lcd_buttons_update(); #if ENABLED(AUTO_BED_LEVELING_UBL) - const bool UBL_CONDITION = !ubl.has_control_of_lcd_panel; + // Don't run the debouncer if UBL owns the display + #define UBL_CONDITION !ubl.has_control_of_lcd_panel #else - constexpr bool UBL_CONDITION = true; + #define UBL_CONDITION true #endif // If the action button is pressed... @@ -4944,7 +4950,7 @@ void lcd_reset_alert_level() { lcd_status_message_level = 0; } */ void lcd_buttons_update() { static uint8_t lastEncoderBits; - millis_t now = millis(); + const millis_t now = millis(); if (ELAPSED(now, next_button_update_ms)) { #if ENABLED(NEWPANEL) @@ -4962,9 +4968,16 @@ void lcd_reset_alert_level() { lcd_status_message_level = 0; } if (BUTTON_PRESSED(ENC)) newbutton |= EN_C; #endif + buttons = newbutton; + #if ENABLED(LCD_HAS_SLOW_BUTTONS) + buttons |= slow_buttons; + #endif + + // + // Directional buttons + // #if LCD_HAS_DIRECTIONAL_BUTTONS - // Manage directional buttons #if ENABLED(REVERSE_MENU_DIRECTION) #define _ENCODER_UD_STEPS (ENCODER_STEPS_PER_MENU_ITEM * encoderDirection) #else @@ -5008,11 +5021,6 @@ void lcd_reset_alert_level() { lcd_status_message_level = 0; } #endif // LCD_HAS_DIRECTIONAL_BUTTONS - buttons = newbutton; - #if ENABLED(LCD_HAS_SLOW_BUTTONS) - buttons |= slow_buttons; - #endif - #if ENABLED(ADC_KEYPAD) uint8_t newbutton_reprapworld_keypad = 0; diff --git a/Marlin/src/lcd/ultralcd_impl_HD44780.h b/Marlin/src/lcd/ultralcd_impl_HD44780.h index fb7dfa2d3..cab931443 100644 --- a/Marlin/src/lcd/ultralcd_impl_HD44780.h +++ b/Marlin/src/lcd/ultralcd_impl_HD44780.h @@ -78,12 +78,12 @@ extern volatile uint8_t buttons; //an extended version of the last checked butt #if BUTTON_EXISTS(ENC) // the pause/stop/restart button is connected to BTN_ENC when used - #define B_ST (EN_C) // Map the pause/stop/resume button into its normalized functional name + #define B_ST (EN_C) // Map the pause/stop/resume button into its normalized functional name #undef LCD_CLICKED - #define LCD_CLICKED (buttons&(B_MI|B_RI|B_ST)) // pause/stop button also acts as click until we implement proper pause/stop. + #define LCD_CLICKED (buttons & (B_MI|B_RI|B_ST)) // pause/stop button also acts as click until we implement proper pause/stop. #else #undef LCD_CLICKED - #define LCD_CLICKED (buttons&(B_MI|B_RI)) + #define LCD_CLICKED (buttons & (B_MI|B_RI)) #endif // I2C buttons take too long to read inside an interrupt context and so we read them during lcd_update @@ -119,7 +119,7 @@ extern volatile uint8_t buttons; //an extended version of the last checked butt #define B_DW (_BV(BL_DW)) #define B_RI (_BV(BL_RI)) #define B_ST (_BV(BL_ST)) - #define LCD_CLICKED ((buttons & B_MI) || (buttons & B_ST)) + #define LCD_CLICKED (buttons & (B_MI|B_ST)) #endif #endif // ULTIPANEL