/// find X MIN endstop void home_x_negative() { #if defined X_MIN_PIN TARGET t = startpoint; t.X = -1000000; #ifdef SLOW_HOMING // hit home soft t.F = SEARCH_FEEDRATE_X; #else // hit home hard t.F = MAXIMUM_FEEDRATE_X; #endif enqueue_home(&t, 0x1, 1); #ifndef SLOW_HOMING // back off slowly t.X = +1000000; t.F = SEARCH_FEEDRATE_X; enqueue_home(&t, 0x1, 0); #endif // set X home queue_wait(); // we have to wait here, see G92 #ifdef X_MIN startpoint.X = next_target.target.X = (int32_t)(X_MIN * 1000.0); #else startpoint.X = next_target.target.X = 0; #endif dda_new_startpoint(); #endif }
/// find X_MAX endstop void home_x_positive() { #if defined X_MAX_PIN && ! defined X_MAX #warning X_MAX_PIN defined, but not X_MAX. home_x_positive() disabled. #endif #if defined X_MAX_PIN && defined X_MAX TARGET t = startpoint; t.X = +1000000; #ifdef SLOW_HOMING // hit home soft t.F = SEARCH_FEEDRATE_X; #else // hit home hard t.F = MAXIMUM_FEEDRATE_X; #endif enqueue_home(&t, 0x1, 1); #ifndef SLOW_HOMING // back off slowly t.X = -1000000; t.F = SEARCH_FEEDRATE_X; enqueue_home(&t, 0x1, 0); #endif // set X home queue_wait(); // set position to MAX startpoint.X = next_target.target.X = (int32_t)(X_MAX * 1000.); dda_new_startpoint(); // go to zero t.X = 0; t.F = MAXIMUM_FEEDRATE_X; enqueue(&t); #endif }
/// fund Y MIN endstop void home_y_negative() { #if defined Y_MIN_PIN TARGET t = startpoint; t.Y = -1000000; #ifdef SLOW_HOMING // hit home soft t.F = SEARCH_FEEDRATE_Y; #else // hit home hard t.F = MAXIMUM_FEEDRATE_Y; #endif enqueue_home(&t, 0x2, 1); #ifndef SLOW_HOMING // back off slowly t.Y = +1000000; t.F = SEARCH_FEEDRATE_Y; enqueue_home(&t, 0x2, 0); #endif // set Y home queue_wait(); #ifdef Y_MIN startpoint.Y = next_target.target.Y = (int32_t)(Y_MIN * 1000.); #else startpoint.Y = next_target.target.Y = 0; #endif dda_new_startpoint(); #endif }
/// find Z MIN endstop void home_z_negative() { #if defined Z_MIN_PIN TARGET t = startpoint; t.Z = -1000000; #ifdef SLOW_HOMING // hit home soft t.F = SEARCH_FEEDRATE_Z; #else // hit home hard t.F = MAXIMUM_FEEDRATE_Z; #endif enqueue_home(&t, 0x4, 1); #ifndef SLOW_HOMING // back off slowly t.Z = +1000000; t.F = SEARCH_FEEDRATE_Z; enqueue_home(&t, 0x4, 0); #endif // set Z home queue_wait(); #ifdef Z_MIN startpoint.Z = next_target.target.Z = (int32_t)(Z_MIN * 1000.); #else startpoint.Z = next_target.target.Z = 0; #endif dda_new_startpoint(); z_disable(); #endif }
/// find X MIN endstop void home_x_negative() { #if defined X_MIN_PIN TARGET t = startpoint; t.X = -1000000; if (SEARCH_FAST_X > SEARCH_FEEDRATE_X) // Preprocessor can't check this :-/ t.F = SEARCH_FAST_X; else t.F = SEARCH_FEEDRATE_X; enqueue_home(&t, 0x1, 1); if (SEARCH_FAST_X > SEARCH_FEEDRATE_X) { // back off slowly t.X = +1000000; t.F = SEARCH_FEEDRATE_X; enqueue_home(&t, 0x1, 0); } // set X home queue_wait(); // we have to wait here, see G92 #ifdef X_MIN startpoint.X = next_target.target.X = (int32_t)(X_MIN * 1000.0); #else startpoint.X = next_target.target.X = 0; #endif dda_new_startpoint(); #endif }
/// find Z MIN endstop void home_z_negative() { TARGET t = startpoint; t.Z = -1000000; // hit home hard t.F = SEARCH_FEEDRATE_Z; enqueue_home(&t, 0x4, 1); // back off slowly t.Z = +1000000; t.F = SEARCH_FEEDRATE_Z; enqueue_home(&t, 0x4, 0); // set Z home queue_wait(); startpoint.Z = next_target.target.Z = 0; dda_new_startpoint(); z_disable(); }
/// find X MIN endstop void home_x_negative() { TARGET t = startpoint; t.X = -1000000; // hit home hard t.F = SEARCH_FEEDRATE_X; enqueue_home(&t, 0x1, 1); // back off slowly t.X = +1000000; t.F = SEARCH_FEEDRATE_X; enqueue_home(&t, 0x1, 0); // set X home queue_wait(); // we have to wait here, see G92 startpoint.X = next_target.target.X = 0; dda_new_startpoint(); }
/// find Z MAX endstop void home_z_positive() { #if defined Z_MAX_PIN && ! defined Z_MAX #warning Z_MAX_PIN defined, but not Z_MAX. home_z_positive() disabled. #endif #if defined Z_MAX_PIN && defined Z_MAX TARGET t = startpoint; t.Z = +1000000; if (SEARCH_FAST_Z > SEARCH_FEEDRATE_Z) t.F = SEARCH_FAST_Z; else t.F = SEARCH_FEEDRATE_Z; enqueue_home(&t, 0x4, 1); if (SEARCH_FAST_Z > SEARCH_FEEDRATE_Z) { t.Z = -1000000; t.F = SEARCH_FEEDRATE_Z; enqueue_home(&t, 0x4, 0); } // set Z home queue_wait(); // set position to MAX startpoint.Z = next_target.target.Z = (int32_t)(Z_MAX * 1000.); dda_new_startpoint(); // go to zero t.Z = 0; t.F = MAXIMUM_FEEDRATE_Z; enqueue(&t); #endif }
/// find Z MIN endstop void home_z_negative() { #if defined Z_MIN_PIN TARGET t = startpoint; t.Z = -1000000; if (SEARCH_FAST_Z > SEARCH_FEEDRATE_Z) t.F = SEARCH_FAST_Z; else t.F = SEARCH_FEEDRATE_Z; enqueue_home(&t, 0x4, 1); if (SEARCH_FAST_Z > SEARCH_FEEDRATE_Z) { t.Z = +1000000; t.F = SEARCH_FEEDRATE_Z; enqueue_home(&t, 0x4, 0); } // set Z home queue_wait(); #ifdef Z_MIN startpoint.Z = next_target.target.Z = (int32_t)(Z_MIN * 1000.); #else startpoint.Z = next_target.target.Z = 0; #endif dda_new_startpoint(); z_disable(); #endif }
/// find Y MAX endstop void home_y_positive() { #if defined Y_MAX_PIN && ! defined Y_MAX #warning Y_MAX_PIN defined, but not Y_MAX. home_y_positive() disabled. #endif #if defined Y_MAX_PIN && defined Y_MAX TARGET t = startpoint; t.Y = +1000000; if (SEARCH_FAST_Y > SEARCH_FEEDRATE_Y) t.F = SEARCH_FAST_Y; else t.F = SEARCH_FEEDRATE_Y; enqueue_home(&t, 0x2, 1); if (SEARCH_FAST_Y > SEARCH_FEEDRATE_Y) { t.Y = -1000000; t.F = SEARCH_FEEDRATE_Y; enqueue_home(&t, 0x2, 0); } // set Y home queue_wait(); // set position to MAX startpoint.Y = next_target.target.Y = (int32_t)(Y_MAX * 1000.); dda_new_startpoint(); // go to zero t.Y = 0; t.F = MAXIMUM_FEEDRATE_Y; enqueue(&t); #endif }
/// fund Y MIN endstop void home_y_negative() { #if defined Y_MIN_PIN TARGET t = startpoint; t.Y = -1000000; if (SEARCH_FAST_Y > SEARCH_FEEDRATE_Y) t.F = SEARCH_FAST_Y; else t.F = SEARCH_FEEDRATE_Y; enqueue_home(&t, 0x2, 1); if (SEARCH_FAST_Y > SEARCH_FEEDRATE_Y) { t.Y = +1000000; t.F = SEARCH_FEEDRATE_Y; enqueue_home(&t, 0x2, 0); } // set Y home queue_wait(); #ifdef Y_MIN startpoint.Y = next_target.target.Y = (int32_t)(Y_MIN * 1000.); #else startpoint.Y = next_target.target.Y = 0; #endif dda_new_startpoint(); #endif }
/// find X_MAX endstop void home_x_positive() { #if defined X_MAX_PIN && ! defined X_MAX #warning X_MAX_PIN defined, but not X_MAX. home_x_positive() disabled. #endif #if defined X_MAX_PIN && defined X_MAX TARGET t = startpoint; t.X = +1000000; if (SEARCH_FAST_X > SEARCH_FEEDRATE_X) t.F = SEARCH_FAST_X; else t.F = SEARCH_FEEDRATE_X; enqueue_home(&t, 0x1, 1); if (SEARCH_FAST_X > SEARCH_FEEDRATE_X) { t.X = -1000000; t.F = SEARCH_FEEDRATE_X; enqueue_home(&t, 0x1, 0); } // set X home queue_wait(); // set position to MAX startpoint.X = next_target.target.X = (int32_t)(X_MAX * 1000.); dda_new_startpoint(); // go to zero t.X = 0; t.F = MAXIMUM_FEEDRATE_X; enqueue(&t); #endif }
/// fund Y MIN endstop void home_y_negative() { TARGET t = startpoint; t.Y = -1000000; // hit home hard t.F = SEARCH_FEEDRATE_Y; enqueue_home(&t, 0x2, 1); // back off slowly t.Y = +1000000; t.F = SEARCH_FEEDRATE_Y; enqueue_home(&t, 0x2, 0); // set Y home queue_wait(); startpoint.Y = next_target.target.Y = 0; dda_new_startpoint(); }
/// add a move to the movebuffer /// \note this function waits for space to be available if necessary, check queue_full() first if waiting is a problem /// This is the only function that modifies mb_head and it always called from outside an interrupt. void enqueue(TARGET *t) { enqueue_home(t, 0, 0); }