commit
45d64040fe
@ -195,6 +195,8 @@ void manage_inactivity(bool ignore_stepper_queue=false);
|
|||||||
*/
|
*/
|
||||||
enum AxisEnum {X_AXIS=0, Y_AXIS=1, A_AXIS=0, B_AXIS=1, Z_AXIS=2, E_AXIS=3, X_HEAD=4, Y_HEAD=5};
|
enum AxisEnum {X_AXIS=0, Y_AXIS=1, A_AXIS=0, B_AXIS=1, Z_AXIS=2, E_AXIS=3, X_HEAD=4, Y_HEAD=5};
|
||||||
|
|
||||||
|
enum EndstopEnum {X_MIN=0, Y_MIN=1, Z_MIN=2, Z_PROBE=3, X_MAX=4, Y_MAX=5, Z_MAX=6};
|
||||||
|
|
||||||
void enable_all_steppers();
|
void enable_all_steppers();
|
||||||
void disable_all_steppers();
|
void disable_all_steppers();
|
||||||
|
|
||||||
|
@ -73,10 +73,7 @@ static unsigned short step_loops_nominal;
|
|||||||
|
|
||||||
volatile long endstops_trigsteps[3] = { 0 };
|
volatile long endstops_trigsteps[3] = { 0 };
|
||||||
volatile long endstops_stepsTotal, endstops_stepsDone;
|
volatile long endstops_stepsTotal, endstops_stepsDone;
|
||||||
static volatile bool endstop_x_hit = false;
|
static volatile char endstop_hit_bits = 0; // use X_MIN, Y_MIN, Z_MIN and Z_PROBE as BIT value
|
||||||
static volatile bool endstop_y_hit = false;
|
|
||||||
static volatile bool endstop_z_hit = false;
|
|
||||||
static volatile bool endstop_z_probe_hit = false; // Leaving this in even if Z_PROBE_ENDSTOP isn't defined, keeps code below cleaner. #ifdef it and usage below to save space.
|
|
||||||
|
|
||||||
#ifdef ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
|
#ifdef ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
|
||||||
bool abort_on_endstop_hit = false;
|
bool abort_on_endstop_hit = false;
|
||||||
@ -264,27 +261,27 @@ volatile signed char count_direction[NUM_AXIS] = { 1, 1, 1, 1 };
|
|||||||
#define DISABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 &= ~BIT(OCIE1A)
|
#define DISABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 &= ~BIT(OCIE1A)
|
||||||
|
|
||||||
void endstops_hit_on_purpose() {
|
void endstops_hit_on_purpose() {
|
||||||
endstop_x_hit = endstop_y_hit = endstop_z_hit = endstop_z_probe_hit = false; // #ifdef endstop_z_probe_hit = to save space if needed.
|
endstop_hit_bits = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkHitEndstops() {
|
void checkHitEndstops() {
|
||||||
if (endstop_x_hit || endstop_y_hit || endstop_z_hit || endstop_z_probe_hit) { // #ifdef || endstop_z_probe_hit to save space if needed.
|
if (endstop_hit_bits) { // #ifdef || endstop_z_probe_hit to save space if needed.
|
||||||
SERIAL_ECHO_START;
|
SERIAL_ECHO_START;
|
||||||
SERIAL_ECHOPGM(MSG_ENDSTOPS_HIT);
|
SERIAL_ECHOPGM(MSG_ENDSTOPS_HIT);
|
||||||
if (endstop_x_hit) {
|
if (endstop_hit_bits & BIT(X_MIN)) {
|
||||||
SERIAL_ECHOPAIR(" X:", (float)endstops_trigsteps[X_AXIS] / axis_steps_per_unit[X_AXIS]);
|
SERIAL_ECHOPAIR(" X:", (float)endstops_trigsteps[X_AXIS] / axis_steps_per_unit[X_AXIS]);
|
||||||
LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "X");
|
LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "X");
|
||||||
}
|
}
|
||||||
if (endstop_y_hit) {
|
if (endstop_hit_bits & BIT(Y_MIN)) {
|
||||||
SERIAL_ECHOPAIR(" Y:", (float)endstops_trigsteps[Y_AXIS] / axis_steps_per_unit[Y_AXIS]);
|
SERIAL_ECHOPAIR(" Y:", (float)endstops_trigsteps[Y_AXIS] / axis_steps_per_unit[Y_AXIS]);
|
||||||
LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Y");
|
LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Y");
|
||||||
}
|
}
|
||||||
if (endstop_z_hit) {
|
if (endstop_hit_bits & BIT(Z_MIN)) {
|
||||||
SERIAL_ECHOPAIR(" Z:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
|
SERIAL_ECHOPAIR(" Z:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
|
||||||
LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Z");
|
LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Z");
|
||||||
}
|
}
|
||||||
#ifdef Z_PROBE_ENDSTOP
|
#ifdef Z_PROBE_ENDSTOP
|
||||||
if (endstop_z_probe_hit) {
|
if (endstop_hit_bits & BIT(Z_PROBE)) {
|
||||||
SERIAL_ECHOPAIR(" Z_PROBE:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
|
SERIAL_ECHOPAIR(" Z_PROBE:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
|
||||||
LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "ZP");
|
LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "ZP");
|
||||||
}
|
}
|
||||||
@ -468,13 +465,14 @@ ISR(TIMER1_COMPA_vect) {
|
|||||||
#define _ENDSTOP_INVERTING(AXIS, MINMAX) AXIS ##_## MINMAX ##_ENDSTOP_INVERTING
|
#define _ENDSTOP_INVERTING(AXIS, MINMAX) AXIS ##_## MINMAX ##_ENDSTOP_INVERTING
|
||||||
#define _OLD_ENDSTOP(axis, minmax) old_## axis ##_## minmax ##_endstop
|
#define _OLD_ENDSTOP(axis, minmax) old_## axis ##_## minmax ##_endstop
|
||||||
#define _AXIS(AXIS) AXIS ##_AXIS
|
#define _AXIS(AXIS) AXIS ##_AXIS
|
||||||
#define _ENDSTOP_HIT(axis) endstop_## axis ##_hit
|
#define _HIT_BIT(AXIS) AXIS ##_MIN
|
||||||
|
#define _ENDSTOP_HIT(AXIS) endstop_hit_bits |= BIT(_HIT_BIT(AXIS))
|
||||||
|
|
||||||
#define UPDATE_ENDSTOP(axis,AXIS,minmax,MINMAX) \
|
#define UPDATE_ENDSTOP(axis,AXIS,minmax,MINMAX) \
|
||||||
bool _ENDSTOP(axis, minmax) = (READ(_ENDSTOP_PIN(AXIS, MINMAX)) != _ENDSTOP_INVERTING(AXIS, MINMAX)); \
|
bool _ENDSTOP(axis, minmax) = (READ(_ENDSTOP_PIN(AXIS, MINMAX)) != _ENDSTOP_INVERTING(AXIS, MINMAX)); \
|
||||||
if (_ENDSTOP(axis, minmax) && _OLD_ENDSTOP(axis, minmax) && (current_block->steps[_AXIS(AXIS)] > 0)) { \
|
if (_ENDSTOP(axis, minmax) && _OLD_ENDSTOP(axis, minmax) && (current_block->steps[_AXIS(AXIS)] > 0)) { \
|
||||||
endstops_trigsteps[_AXIS(AXIS)] = count_position[_AXIS(AXIS)]; \
|
endstops_trigsteps[_AXIS(AXIS)] = count_position[_AXIS(AXIS)]; \
|
||||||
_ENDSTOP_HIT(axis) = true; \
|
_ENDSTOP_HIT(AXIS); \
|
||||||
step_events_completed = current_block->step_event_count; \
|
step_events_completed = current_block->step_event_count; \
|
||||||
} \
|
} \
|
||||||
_OLD_ENDSTOP(axis, minmax) = _ENDSTOP(axis, minmax);
|
_OLD_ENDSTOP(axis, minmax) = _ENDSTOP(axis, minmax);
|
||||||
|
Loading…
Reference in New Issue
Block a user