|
|
|
@ -202,10 +202,6 @@
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
float homing_feedrate[] = HOMING_FEEDRATE;
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
int xy_travel_speed = XY_TRAVEL_SPEED;
|
|
|
|
|
float zprobe_zoffset = -Z_PROBE_OFFSET_FROM_EXTRUDER;
|
|
|
|
|
#endif
|
|
|
|
|
int homing_bump_divisor[] = HOMING_BUMP_DIVISOR;
|
|
|
|
|
bool axis_relative_modes[] = AXIS_RELATIVE_MODES;
|
|
|
|
|
int feedmultiply = 100; //100->1 200->2
|
|
|
|
@ -216,15 +212,49 @@ float filament_size[EXTRUDERS] = ARRAY_BY_EXTRUDERS(DEFAULT_NOMINAL_FILAMENT_DIA
|
|
|
|
|
float volumetric_multiplier[EXTRUDERS] = ARRAY_BY_EXTRUDERS(1.0, 1.0, 1.0, 1.0);
|
|
|
|
|
float current_position[NUM_AXIS] = { 0.0 };
|
|
|
|
|
float home_offset[3] = { 0 };
|
|
|
|
|
#ifdef DELTA
|
|
|
|
|
float endstop_adj[3] = { 0 };
|
|
|
|
|
#elif defined(Z_DUAL_ENDSTOPS)
|
|
|
|
|
float z_endstop_adj = 0;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
float min_pos[3] = { X_MIN_POS, Y_MIN_POS, Z_MIN_POS };
|
|
|
|
|
float max_pos[3] = { X_MAX_POS, Y_MAX_POS, Z_MAX_POS };
|
|
|
|
|
bool axis_known_position[3] = { false };
|
|
|
|
|
uint8_t active_extruder = 0;
|
|
|
|
|
int fanSpeed = 0;
|
|
|
|
|
bool cancel_heatup = false;
|
|
|
|
|
const char errormagic[] PROGMEM = "Error:";
|
|
|
|
|
const char echomagic[] PROGMEM = "echo:";
|
|
|
|
|
const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
|
|
|
|
|
static float destination[NUM_AXIS] = { 0 };
|
|
|
|
|
static float offset[3] = { 0 };
|
|
|
|
|
static float feedrate = 1500.0, next_feedrate, saved_feedrate;
|
|
|
|
|
static long gcode_N, gcode_LastN, Stopped_gcode_LastN = 0;
|
|
|
|
|
static bool relative_mode = false; //Determines Absolute or Relative Coordinates
|
|
|
|
|
static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE];
|
|
|
|
|
static int bufindr = 0;
|
|
|
|
|
static int bufindw = 0;
|
|
|
|
|
static int buflen = 0;
|
|
|
|
|
static char serial_char;
|
|
|
|
|
static int serial_count = 0;
|
|
|
|
|
static boolean comment_mode = false;
|
|
|
|
|
static char *strchr_pointer; ///< A pointer to find chars in the command string (X, Y, Z, E, etc.)
|
|
|
|
|
const char* queued_commands_P= NULL; /* pointer to the current line in the active sequence of commands, or NULL when none */
|
|
|
|
|
const int sensitive_pins[] = SENSITIVE_PINS; ///< Sensitive pin list for M42
|
|
|
|
|
// Inactivity shutdown
|
|
|
|
|
static unsigned long previous_millis_cmd = 0;
|
|
|
|
|
static unsigned long max_inactive_time = 0;
|
|
|
|
|
static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000l;
|
|
|
|
|
unsigned long starttime = 0; ///< Print job start time
|
|
|
|
|
unsigned long stoptime = 0; ///< Print job stop time
|
|
|
|
|
static uint8_t tmp_extruder;
|
|
|
|
|
bool Stopped = false;
|
|
|
|
|
bool CooldownNoWait = true;
|
|
|
|
|
bool target_direction;
|
|
|
|
|
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
int xy_travel_speed = XY_TRAVEL_SPEED;
|
|
|
|
|
float zprobe_zoffset = -Z_PROBE_OFFSET_FROM_EXTRUDER;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if defined(Z_DUAL_ENDSTOPS) && !defined(DELTA)
|
|
|
|
|
float z_endstop_adj = 0;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// Extruder offsets
|
|
|
|
|
#if EXTRUDERS > 1
|
|
|
|
@ -243,9 +273,6 @@ bool axis_known_position[3] = { false };
|
|
|
|
|
};
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
uint8_t active_extruder = 0;
|
|
|
|
|
int fanSpeed = 0;
|
|
|
|
|
|
|
|
|
|
#ifdef SERVO_ENDSTOPS
|
|
|
|
|
int servo_endstops[] = SERVO_ENDSTOPS;
|
|
|
|
|
int servo_endstop_angles[] = SERVO_ENDSTOP_ANGLES;
|
|
|
|
@ -282,33 +309,36 @@ int fanSpeed = 0;
|
|
|
|
|
;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef DELTA
|
|
|
|
|
float delta[3] = { 0, 0, 0 };
|
|
|
|
|
#define SIN_60 0.8660254037844386
|
|
|
|
|
#define COS_60 0.5
|
|
|
|
|
// these are the default values, can be overriden with M665
|
|
|
|
|
float delta_radius = DELTA_RADIUS;
|
|
|
|
|
float delta_tower1_x = -SIN_60 * delta_radius; // front left tower
|
|
|
|
|
float delta_tower1_y = -COS_60 * delta_radius;
|
|
|
|
|
float delta_tower2_x = SIN_60 * delta_radius; // front right tower
|
|
|
|
|
float delta_tower2_y = -COS_60 * delta_radius;
|
|
|
|
|
float delta_tower3_x = 0; // back middle tower
|
|
|
|
|
float delta_tower3_y = delta_radius;
|
|
|
|
|
float delta_diagonal_rod = DELTA_DIAGONAL_ROD;
|
|
|
|
|
float delta_diagonal_rod_2 = sq(delta_diagonal_rod);
|
|
|
|
|
float delta_segments_per_second = DELTA_SEGMENTS_PER_SECOND;
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
int delta_grid_spacing[2] = { 0, 0 };
|
|
|
|
|
float bed_level[AUTO_BED_LEVELING_GRID_POINTS][AUTO_BED_LEVELING_GRID_POINTS];
|
|
|
|
|
#if defined(DELTA) || defined(SCARA)
|
|
|
|
|
static float delta[3] = { 0, 0, 0 };
|
|
|
|
|
#ifdef DELTA
|
|
|
|
|
#define SIN_60 0.8660254037844386
|
|
|
|
|
#define COS_60 0.5
|
|
|
|
|
float endstop_adj[3] = { 0 };
|
|
|
|
|
// these are the default values, can be overriden with M665
|
|
|
|
|
float delta_radius = DELTA_RADIUS;
|
|
|
|
|
float delta_tower1_x = -SIN_60 * delta_radius; // front left tower
|
|
|
|
|
float delta_tower1_y = -COS_60 * delta_radius;
|
|
|
|
|
float delta_tower2_x = SIN_60 * delta_radius; // front right tower
|
|
|
|
|
float delta_tower2_y = -COS_60 * delta_radius;
|
|
|
|
|
float delta_tower3_x = 0; // back middle tower
|
|
|
|
|
float delta_tower3_y = delta_radius;
|
|
|
|
|
float delta_diagonal_rod = DELTA_DIAGONAL_ROD;
|
|
|
|
|
float delta_diagonal_rod_2 = sq(delta_diagonal_rod);
|
|
|
|
|
float delta_segments_per_second = DELTA_SEGMENTS_PER_SECOND;
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
int delta_grid_spacing[2] = { 0, 0 };
|
|
|
|
|
float bed_level[AUTO_BED_LEVELING_GRID_POINTS][AUTO_BED_LEVELING_GRID_POINTS];
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef SCARA
|
|
|
|
|
float axis_scaling[3] = { 1, 1, 1 }; // Build size scaling, default to 1
|
|
|
|
|
static float delta[3] = { 0, 0, 0 };
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef SCARA
|
|
|
|
|
float axis_scaling[3] = { 1, 1, 1 }; // Build size scaling, default to 1
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
bool cancel_heatup = false;
|
|
|
|
|
#elif !defined(DELTA)
|
|
|
|
|
static bool home_all_axis = true;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef FILAMENT_SENSOR
|
|
|
|
|
//Variables for Filament Sensor input
|
|
|
|
@ -326,67 +356,21 @@ bool cancel_heatup = false;
|
|
|
|
|
static bool filrunoutEnqued = false;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
const char errormagic[] PROGMEM = "Error:";
|
|
|
|
|
const char echomagic[] PROGMEM = "echo:";
|
|
|
|
|
|
|
|
|
|
const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
|
|
|
|
|
static float destination[NUM_AXIS] = { 0 };
|
|
|
|
|
|
|
|
|
|
static float offset[3] = { 0 };
|
|
|
|
|
|
|
|
|
|
#ifndef DELTA
|
|
|
|
|
static bool home_all_axis = true;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static float feedrate = 1500.0, next_feedrate, saved_feedrate;
|
|
|
|
|
static long gcode_N, gcode_LastN, Stopped_gcode_LastN = 0;
|
|
|
|
|
|
|
|
|
|
static bool relative_mode = false; //Determines Absolute or Relative Coordinates
|
|
|
|
|
|
|
|
|
|
static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE];
|
|
|
|
|
#ifdef SDSUPPORT
|
|
|
|
|
static bool fromsd[BUFSIZE];
|
|
|
|
|
#endif
|
|
|
|
|
static int bufindr = 0;
|
|
|
|
|
static int bufindw = 0;
|
|
|
|
|
static int buflen = 0;
|
|
|
|
|
|
|
|
|
|
static char serial_char;
|
|
|
|
|
static int serial_count = 0;
|
|
|
|
|
static boolean comment_mode = false;
|
|
|
|
|
static char *strchr_pointer; ///< A pointer to find chars in the command string (X, Y, Z, E, etc.)
|
|
|
|
|
|
|
|
|
|
const char* queued_commands_P= NULL; /* pointer to the current line in the active sequence of commands, or NULL when none */
|
|
|
|
|
|
|
|
|
|
const int sensitive_pins[] = SENSITIVE_PINS; ///< Sensitive pin list for M42
|
|
|
|
|
|
|
|
|
|
// Inactivity shutdown
|
|
|
|
|
static unsigned long previous_millis_cmd = 0;
|
|
|
|
|
static unsigned long max_inactive_time = 0;
|
|
|
|
|
static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000l;
|
|
|
|
|
|
|
|
|
|
unsigned long starttime = 0; ///< Print job start time
|
|
|
|
|
unsigned long stoptime = 0; ///< Print job stop time
|
|
|
|
|
|
|
|
|
|
static uint8_t tmp_extruder;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool Stopped = false;
|
|
|
|
|
|
|
|
|
|
#if NUM_SERVOS > 0
|
|
|
|
|
Servo servos[NUM_SERVOS];
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
bool CooldownNoWait = true;
|
|
|
|
|
bool target_direction;
|
|
|
|
|
|
|
|
|
|
#ifdef CHDK
|
|
|
|
|
unsigned long chdkHigh = 0;
|
|
|
|
|
boolean chdkActive = false;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
|
//=============================Routines======================================
|
|
|
|
|
//================================ Functions ================================
|
|
|
|
|
//===========================================================================
|
|
|
|
|
|
|
|
|
|
void get_arc_coordinates();
|
|
|
|
@ -5707,21 +5691,11 @@ void disable_all_axes() {
|
|
|
|
|
*/
|
|
|
|
|
void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
|
|
|
|
|
|
|
|
|
|
#if HAS_KILL
|
|
|
|
|
static int killCount = 0; // make the inactivity button a bit less responsive
|
|
|
|
|
const int KILL_DELAY = 750;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if HAS_FILRUNOUT
|
|
|
|
|
if (card.sdprinting && !(READ(FILRUNOUT_PIN) ^ FIL_RUNOUT_INVERTING))
|
|
|
|
|
filrunout();
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if HAS_HOME
|
|
|
|
|
static int homeDebounceCount = 0; // poor man's debouncing count
|
|
|
|
|
const int HOME_DEBOUNCE_DELAY = 750;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (buflen < BUFSIZE - 1) get_command();
|
|
|
|
|
|
|
|
|
|
unsigned long ms = millis();
|
|
|
|
@ -5744,6 +5718,8 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
|
|
|
|
|
// Check if the kill button was pressed and wait just in case it was an accidental
|
|
|
|
|
// key kill key press
|
|
|
|
|
// -------------------------------------------------------------------------------
|
|
|
|
|
static int killCount = 0; // make the inactivity button a bit less responsive
|
|
|
|
|
const int KILL_DELAY = 750;
|
|
|
|
|
if (!READ(KILL_PIN))
|
|
|
|
|
killCount++;
|
|
|
|
|
else if (killCount > 0)
|
|
|
|
@ -5758,6 +5734,8 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
|
|
|
|
|
#if HAS_HOME
|
|
|
|
|
// Check to see if we have to home, use poor man's debouncer
|
|
|
|
|
// ---------------------------------------------------------
|
|
|
|
|
static int homeDebounceCount = 0; // poor man's debouncing count
|
|
|
|
|
const int HOME_DEBOUNCE_DELAY = 750;
|
|
|
|
|
if (!READ(HOME_PIN)) {
|
|
|
|
|
if (!homeDebounceCount) {
|
|
|
|
|
enquecommands_P(PSTR("G28"));
|
|
|
|
@ -5797,7 +5775,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
|
|
|
|
|
if (delayed_move_time && ms > delayed_move_time + 1000 && !Stopped) {
|
|
|
|
|
// travel moves have been received so enact them
|
|
|
|
|
delayed_move_time = 0xFFFFFFFFUL; // force moves to be done
|
|
|
|
|
memcpy(destination,current_position, sizeof(destination));
|
|
|
|
|
memcpy(destination, current_position, sizeof(destination));
|
|
|
|
|
prepare_move();
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
@ -5814,13 +5792,7 @@ void kill()
|
|
|
|
|
cli(); // Stop interrupts
|
|
|
|
|
disable_heater();
|
|
|
|
|
|
|
|
|
|
disable_x();
|
|
|
|
|
disable_y();
|
|
|
|
|
disable_z();
|
|
|
|
|
disable_e0();
|
|
|
|
|
disable_e1();
|
|
|
|
|
disable_e2();
|
|
|
|
|
disable_e3();
|
|
|
|
|
disable_all_axes();
|
|
|
|
|
|
|
|
|
|
#if HAS_POWER_SWITCH
|
|
|
|
|
pinMode(PS_ON_PIN, INPUT);
|
|
|
|
|