diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 023d4964c..e8786f241 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -14757,6 +14757,6 @@ void loop() { if (++cmd_queue_index_r >= BUFSIZE) cmd_queue_index_r = 0; } } - endstops.report_state(); + endstops.event_handler(); idle(); } diff --git a/Marlin/endstops.cpp b/Marlin/endstops.cpp index 3cffff183..f345e8f45 100644 --- a/Marlin/endstops.cpp +++ b/Marlin/endstops.cpp @@ -189,7 +189,7 @@ void Endstops::init() { } // Endstops::init -// Called from ISR: Poll endstop state if required +// Called at ~1KHz from Temperature ISR: Poll endstop state if required void Endstops::poll() { #if ENABLED(PINS_DEBUGGING) @@ -231,8 +231,8 @@ void Endstops::not_homing() { // If the last move failed to trigger an endstop, call kill void Endstops::validate_homing_move() { - if (!trigger_state()) kill(PSTR(MSG_ERR_HOMING_FAILED)); - hit_on_purpose(); + if (trigger_state()) hit_on_purpose(); + else kill(PSTR(MSG_ERR_HOMING_FAILED)); } // Enable / disable endstop z-probe checking @@ -256,8 +256,9 @@ void Endstops::validate_homing_move() { } #endif -void Endstops::report_state() { - if (hit_state) { +void Endstops::event_handler() { + static uint8_t prev_hit_state; // = 0 + if (hit_state && hit_state != prev_hit_state) { #if ENABLED(ULTRA_LCD) char chrX = ' ', chrY = ' ', chrZ = ' ', chrP = ' '; #define _SET_STOP_CHAR(A,C) (chr## A = C) @@ -293,8 +294,6 @@ void Endstops::report_state() { lcd_status_printf_P(0, PSTR(MSG_LCD_ENDSTOPS " %c %c %c %c"), chrX, chrY, chrZ, chrP); #endif - hit_on_purpose(); - #if ENABLED(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) && ENABLED(SDSUPPORT) if (planner.abort_on_endstop_hit) { card.sdprinting = false; @@ -304,6 +303,7 @@ void Endstops::report_state() { } #endif } + prev_hit_state = hit_state; } // Endstops::report_state void Endstops::M119() { @@ -365,7 +365,7 @@ void Endstops::M119() { #define _ENDSTOP_PIN(AXIS, MINMAX) AXIS ##_## MINMAX ##_PIN #define _ENDSTOP_INVERTING(AXIS, MINMAX) AXIS ##_## MINMAX ##_ENDSTOP_INVERTING -// Check endstops - Could be called from ISR! +// Check endstops - Could be called from Temperature ISR! void Endstops::update() { #if DISABLED(ENDSTOP_NOISE_FILTER) @@ -540,7 +540,7 @@ void Endstops::update() { if (dual_hit) { \ _ENDSTOP_HIT(AXIS1, MINMAX); \ /* if not performing home or if both endstops were trigged during homing... */ \ - if (!stepper.homing_dual_axis || dual_hit == 0x3) \ + if (!stepper.homing_dual_axis || dual_hit == 0b11) \ planner.endstop_triggered(_AXIS(AXIS1)); \ } \ }while(0) diff --git a/Marlin/endstops.h b/Marlin/endstops.h index a6ea580d3..97dd62443 100644 --- a/Marlin/endstops.h +++ b/Marlin/endstops.h @@ -127,7 +127,7 @@ class Endstops { /** * Report endstop hits to serial. Called from loop(). */ - static void report_state(); + static void event_handler(); /** * Report endstop positions in response to M119