Merge pull request #676 from IVI053/Marlin_v1
Minor improvements for encoder configuration, LCD entry for PSU controll and thermistor pins on RAMPS
This commit is contained in:
commit
46d2443c7d
|
@ -8,9 +8,9 @@
|
|||
//===========================================================================
|
||||
//============================= DELTA Printer ===============================
|
||||
//===========================================================================
|
||||
// For a Delta printer rplace the configuration files wilth the files in the
|
||||
// For a Delta printer rplace the configuration files wilth the files in the
|
||||
// example_configurations/delta directory.
|
||||
//
|
||||
//
|
||||
|
||||
// User-specified version info of this build to display in [Pronterface, etc] terminal window during
|
||||
// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
|
||||
|
@ -37,7 +37,7 @@
|
|||
// 12 = Gen7 v1.3
|
||||
// 13 = Gen7 v1.4
|
||||
// 2 = Cheaptronic v1.0
|
||||
// 20 = Sethi 3D_1
|
||||
// 20 = Sethi 3D_1
|
||||
// 3 = MEGA/RAMPS up to 1.2 = 3
|
||||
// 33 = RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Bed)
|
||||
// 34 = RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Bed)
|
||||
|
@ -336,9 +336,9 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
|
|||
|
||||
#define Z_RAISE_BEFORE_HOMING 4 // (in mm) Raise Z before homing (G28) for Probe Clearance.
|
||||
// Be sure you have this distance over your Z_MAX_POS in case
|
||||
|
||||
|
||||
#define XY_TRAVEL_SPEED 8000 // X and Y axis travel speed between probes, in mm/min
|
||||
|
||||
|
||||
#define Z_RAISE_BEFORE_PROBING 15 //How much the extruder will be raised before traveling to the first probing point.
|
||||
#define Z_RAISE_BETWEEN_PROBINGS 5 //How much the extruder will be raised when traveling from between next probing points
|
||||
|
||||
|
@ -347,26 +347,26 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
|
|||
//The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it.
|
||||
// You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.
|
||||
|
||||
// #define PROBE_SERVO_DEACTIVATION_DELAY 300
|
||||
// #define PROBE_SERVO_DEACTIVATION_DELAY 300
|
||||
|
||||
|
||||
//If you have enabled the Bed Auto Levelling and are using the same Z Probe for Z Homing,
|
||||
//If you have enabled the Bed Auto Levelling and are using the same Z Probe for Z Homing,
|
||||
//it is highly recommended you let this Z_SAFE_HOMING enabled!!!
|
||||
|
||||
#define Z_SAFE_HOMING // This feature is meant to avoid Z homing with probe outside the bed area.
|
||||
#define Z_SAFE_HOMING // This feature is meant to avoid Z homing with probe outside the bed area.
|
||||
// When defined, it will:
|
||||
// - Allow Z homing only after X and Y homing AND stepper drivers still enabled
|
||||
// - If stepper drivers timeout, it will need X and Y homing again before Z homing
|
||||
// - Position the probe in a defined XY point before Z Homing when homing all axis (G28)
|
||||
// - Block Z homing only when the probe is outside bed area.
|
||||
|
||||
|
||||
#ifdef Z_SAFE_HOMING
|
||||
|
||||
|
||||
#define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2) // X point for Z homing when homing all axis (G28)
|
||||
#define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2) // Y point for Z homing when homing all axis (G28)
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -435,6 +435,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
|
|||
//#define SDSUPPORT // Enable SD Card Support in Hardware Console
|
||||
//#define SDSLOW // Use slower SD transfer mode (not normally needed - uncomment if you're getting volume init error)
|
||||
//#define ENCODER_PULSES_PER_STEP 1 // Increase if you have a high resolution encoder
|
||||
//#define ENCODER_STEPS_PER_MENU_ITEM 5 // Set according to ENCODER_PULSES_PER_STEP or your liking
|
||||
//#define ULTIMAKERCONTROLLER //as available from the ultimaker online store.
|
||||
//#define ULTIPANEL //the ultipanel as on thingiverse
|
||||
|
||||
|
@ -541,7 +542,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
|
|||
// Shift register panels
|
||||
// ---------------------
|
||||
// 2 wire Non-latching LCD SR from:
|
||||
// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
|
||||
// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
|
||||
//#define SR_LCD
|
||||
#ifdef SR_LCD
|
||||
#define SR_LCD_2W_NL // Non latching 2 wire shiftregister
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
#ifdef BLINKM
|
||||
#include "BlinkM.h"
|
||||
#include "Wire.h"
|
||||
#include "Wire.h"
|
||||
#endif
|
||||
|
||||
#if NUM_SERVOS > 0
|
||||
|
@ -96,7 +96,7 @@
|
|||
// M29 - Stop SD write
|
||||
// M30 - Delete file from SD (M30 filename.g)
|
||||
// M31 - Output time since last M109 or SD card start to serial
|
||||
// M32 - Select file and start SD print (Can be used _while_ printing from SD card files):
|
||||
// M32 - Select file and start SD print (Can be used _while_ printing from SD card files):
|
||||
// syntax "M32 /path/filename#", or "M32 S<startpos bytes> !filename#"
|
||||
// Call gcode file : "M32 P !filename#" and return to caller file after finishing (simiarl to #include).
|
||||
// The '#' is necessary when calling from within sd files, as it stops buffer prereading
|
||||
|
@ -226,7 +226,11 @@ int EtoPPressure=0;
|
|||
#endif
|
||||
|
||||
#ifdef ULTIPANEL
|
||||
bool powersupply = true;
|
||||
#ifdef PS_DEFAULT_OFF
|
||||
bool powersupply = false;
|
||||
#else
|
||||
bool powersupply = true;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef DELTA
|
||||
|
@ -415,7 +419,7 @@ void servo_init()
|
|||
|
||||
#if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0)
|
||||
delay(PROBE_SERVO_DEACTIVATION_DELAY);
|
||||
servos[servo_endstops[Z_AXIS]].detach();
|
||||
servos[servo_endstops[Z_AXIS]].detach();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -636,17 +640,17 @@ void get_command()
|
|||
if(!card.sdprinting || serial_count!=0){
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//'#' stops reading from sd to the buffer prematurely, so procedural macro calls are possible
|
||||
// if it occures, stop_buffering is triggered and the buffer is ran dry.
|
||||
// if it occures, stop_buffering is triggered and the buffer is ran dry.
|
||||
// this character _can_ occure in serial com, due to checksums. however, no checksums are used in sd printing
|
||||
|
||||
|
||||
static bool stop_buffering=false;
|
||||
if(buflen==0) stop_buffering=false;
|
||||
|
||||
while( !card.eof() && buflen < BUFSIZE && !stop_buffering) {
|
||||
|
||||
while( !card.eof() && buflen < BUFSIZE && !stop_buffering) {
|
||||
int16_t n=card.get();
|
||||
serial_char = (char)n;
|
||||
serial_char = (char)n;
|
||||
if(serial_char == '\n' ||
|
||||
serial_char == '\r' ||
|
||||
(serial_char == '#' && comment_mode == false) ||
|
||||
|
@ -671,7 +675,7 @@ void get_command()
|
|||
}
|
||||
if(serial_char=='#')
|
||||
stop_buffering=true;
|
||||
|
||||
|
||||
if(!serial_count)
|
||||
{
|
||||
comment_mode = false; //for new command
|
||||
|
@ -743,13 +747,13 @@ XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR);
|
|||
#endif
|
||||
#if X_HOME_DIR != -1 || X2_HOME_DIR != 1
|
||||
#error "Please use canonical x-carriage assignment" // the x-carriages are defined by their homing directions
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define DXC_FULL_CONTROL_MODE 0
|
||||
#define DXC_AUTO_PARK_MODE 1
|
||||
#define DXC_DUPLICATION_MODE 2
|
||||
static int dual_x_carriage_mode = DEFAULT_DUAL_X_CARRIAGE_MODE;
|
||||
|
||||
|
||||
static float x_home_pos(int extruder) {
|
||||
if (extruder == 0)
|
||||
return base_home_pos(X_AXIS) + add_homeing[X_AXIS];
|
||||
|
@ -767,12 +771,12 @@ static int x_home_dir(int extruder) {
|
|||
|
||||
static float inactive_extruder_x_pos = X2_MAX_POS; // used in mode 0 & 1
|
||||
static bool active_extruder_parked = false; // used in mode 1 & 2
|
||||
static float raised_parked_position[NUM_AXIS]; // used in mode 1
|
||||
static unsigned long delayed_move_time = 0; // used in mode 1
|
||||
static float raised_parked_position[NUM_AXIS]; // used in mode 1
|
||||
static unsigned long delayed_move_time = 0; // used in mode 1
|
||||
static float duplicate_extruder_x_offset = DEFAULT_DUPLICATION_X_OFFSET; // used in mode 2
|
||||
static float duplicate_extruder_temp_offset = 0; // used in mode 2
|
||||
bool extruder_duplication_enabled = false; // used in mode 2
|
||||
#endif //DUAL_X_CARRIAGE
|
||||
#endif //DUAL_X_CARRIAGE
|
||||
|
||||
static void axis_is_at_home(int axis) {
|
||||
#ifdef DUAL_X_CARRIAGE
|
||||
|
@ -785,8 +789,8 @@ static void axis_is_at_home(int axis) {
|
|||
}
|
||||
else if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && active_extruder == 0) {
|
||||
current_position[X_AXIS] = base_home_pos(X_AXIS) + add_homeing[X_AXIS];
|
||||
min_pos[X_AXIS] = base_min_pos(X_AXIS) + add_homeing[X_AXIS];
|
||||
max_pos[X_AXIS] = min(base_max_pos(X_AXIS) + add_homeing[X_AXIS],
|
||||
min_pos[X_AXIS] = base_min_pos(X_AXIS) + add_homeing[X_AXIS];
|
||||
max_pos[X_AXIS] = min(base_max_pos(X_AXIS) + add_homeing[X_AXIS],
|
||||
max(extruder_offset[X_AXIS][1], X2_MAX_POS) - duplicate_extruder_x_offset);
|
||||
return;
|
||||
}
|
||||
|
@ -853,7 +857,7 @@ static void run_z_probe() {
|
|||
st_synchronize();
|
||||
|
||||
// move back down slowly to find bed
|
||||
feedrate = homing_feedrate[Z_AXIS]/4;
|
||||
feedrate = homing_feedrate[Z_AXIS]/4;
|
||||
zPosition -= home_retract_mm(Z_AXIS) * 2;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
|
@ -950,7 +954,7 @@ static void homeaxis(int axis) {
|
|||
|
||||
current_position[axis] = 0;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
|
||||
|
||||
|
||||
// Engage Servo endstop if enabled
|
||||
#ifdef SERVO_ENDSTOPS
|
||||
|
@ -1008,7 +1012,7 @@ static void homeaxis(int axis) {
|
|||
#if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0)
|
||||
if (axis==Z_AXIS) retract_z_probe();
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
#define HOMEAXIS(LETTER) homeaxis(LETTER##_AXIS)
|
||||
|
@ -1082,7 +1086,7 @@ void process_commands()
|
|||
destination[Y_AXIS]=current_position[Y_AXIS];
|
||||
destination[Z_AXIS]=current_position[Z_AXIS];
|
||||
current_position[Z_AXIS]+=retract_zlift;
|
||||
destination[E_AXIS]=current_position[E_AXIS]+retract_length+retract_recover_length;
|
||||
destination[E_AXIS]=current_position[E_AXIS]+retract_length+retract_recover_length;
|
||||
feedrate=retract_recover_feedrate;
|
||||
retracted=false;
|
||||
prepare_move();
|
||||
|
@ -1196,10 +1200,10 @@ void process_commands()
|
|||
// reset state used by the different modes
|
||||
memcpy(raised_parked_position, current_position, sizeof(raised_parked_position));
|
||||
delayed_move_time = 0;
|
||||
active_extruder_parked = true;
|
||||
#else
|
||||
active_extruder_parked = true;
|
||||
#else
|
||||
HOMEAXIS(X);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
if((home_all_axis) || (code_seen(axis_codes[Y_AXIS]))) {
|
||||
|
@ -1218,7 +1222,7 @@ void process_commands()
|
|||
current_position[Y_AXIS]=code_value()+add_homeing[1];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if Z_HOME_DIR < 0 // If homing towards BED do Z last
|
||||
#ifndef Z_SAFE_HOMING
|
||||
if((home_all_axis) || (code_seen(axis_codes[Z_AXIS]))) {
|
||||
|
@ -1230,14 +1234,14 @@ void process_commands()
|
|||
#endif
|
||||
HOMEAXIS(Z);
|
||||
}
|
||||
#else // Z Safe mode activated.
|
||||
#else // Z Safe mode activated.
|
||||
if(home_all_axis) {
|
||||
destination[X_AXIS] = round(Z_SAFE_HOMING_X_POINT - X_PROBE_OFFSET_FROM_EXTRUDER);
|
||||
destination[Y_AXIS] = round(Z_SAFE_HOMING_Y_POINT - Y_PROBE_OFFSET_FROM_EXTRUDER);
|
||||
destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1); // Set destination away from bed
|
||||
feedrate = XY_TRAVEL_SPEED;
|
||||
current_position[Z_AXIS] = 0;
|
||||
|
||||
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
|
||||
st_synchronize();
|
||||
|
@ -1255,7 +1259,7 @@ void process_commands()
|
|||
&& (current_position[Y_AXIS]+Y_PROBE_OFFSET_FROM_EXTRUDER <= Y_MAX_POS)) {
|
||||
|
||||
current_position[Z_AXIS] = 0;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1); // Set destination away from bed
|
||||
feedrate = max_feedrate[Z_AXIS];
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
|
||||
|
@ -1275,8 +1279,8 @@ void process_commands()
|
|||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(code_seen(axis_codes[Z_AXIS])) {
|
||||
if(code_value_long() != 0) {
|
||||
current_position[Z_AXIS]=code_value()+add_homeing[2];
|
||||
|
@ -1347,7 +1351,7 @@ void process_commands()
|
|||
run_z_probe();
|
||||
float z_at_xLeft_yFront = current_position[Z_AXIS];
|
||||
retract_z_probe();
|
||||
|
||||
|
||||
SERIAL_PROTOCOLPGM("Bed x: ");
|
||||
SERIAL_PROTOCOL(LEFT_PROBE_BED_POSITION);
|
||||
SERIAL_PROTOCOLPGM(" y: ");
|
||||
|
@ -1365,7 +1369,7 @@ void process_commands()
|
|||
run_z_probe();
|
||||
float z_at_xRight_yFront = current_position[Z_AXIS];
|
||||
retract_z_probe(); // Retract Z Servo endstop if available
|
||||
|
||||
|
||||
SERIAL_PROTOCOLPGM("Bed x: ");
|
||||
SERIAL_PROTOCOL(RIGHT_PROBE_BED_POSITION);
|
||||
SERIAL_PROTOCOLPGM(" y: ");
|
||||
|
@ -1378,10 +1382,10 @@ void process_commands()
|
|||
|
||||
set_bed_level_equation(z_at_xLeft_yFront, z_at_xRight_yFront, z_at_xLeft_yBack);
|
||||
|
||||
st_synchronize();
|
||||
st_synchronize();
|
||||
|
||||
// The following code correct the Z height difference from z-probe position and hotend tip position.
|
||||
// The Z height on homing is measured by Z-Probe, but the probe is quite far from the hotend.
|
||||
// The Z height on homing is measured by Z-Probe, but the probe is quite far from the hotend.
|
||||
// When the bed is uneven, this height must be corrected.
|
||||
real_z = float(st_get_position(Z_AXIS))/axis_steps_per_unit[Z_AXIS]; //get the real Z (since the auto bed leveling is already correcting the plane)
|
||||
x_tmp = current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER;
|
||||
|
@ -1393,11 +1397,11 @@ void process_commands()
|
|||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 30: // G30 Single Z Probe
|
||||
{
|
||||
engage_z_probe(); // Engage Z Servo endstop if available
|
||||
|
||||
|
||||
st_synchronize();
|
||||
// TODO: make sure the bed_level_rotation_matrix is identity or the planner will get set incorectly
|
||||
setup_for_endstop_move();
|
||||
|
@ -1548,14 +1552,14 @@ void process_commands()
|
|||
card.removeFile(strchr_pointer + 4);
|
||||
}
|
||||
break;
|
||||
case 32: //M32 - Select file and start SD print
|
||||
case 32: //M32 - Select file and start SD print
|
||||
{
|
||||
if(card.sdprinting) {
|
||||
st_synchronize();
|
||||
|
||||
}
|
||||
starpos = (strchr(strchr_pointer + 4,'*'));
|
||||
|
||||
starpos = (strchr(strchr_pointer + 4,'*'));
|
||||
|
||||
char* namestartpos = (strchr(strchr_pointer + 4,'!')); //find ! to indicate filename string start.
|
||||
if(namestartpos==NULL)
|
||||
{
|
||||
|
@ -1563,16 +1567,16 @@ void process_commands()
|
|||
}
|
||||
else
|
||||
namestartpos++; //to skip the '!'
|
||||
|
||||
|
||||
if(starpos!=NULL)
|
||||
*(starpos-1)='\0';
|
||||
|
||||
|
||||
bool call_procedure=(code_seen('P'));
|
||||
|
||||
if(strchr_pointer>namestartpos)
|
||||
|
||||
if(strchr_pointer>namestartpos)
|
||||
call_procedure=false; //false alert, 'P' found within filename
|
||||
|
||||
if( card.cardOK )
|
||||
|
||||
if( card.cardOK )
|
||||
{
|
||||
card.openFile(namestartpos,true,!call_procedure);
|
||||
if(code_seen('S'))
|
||||
|
@ -1645,7 +1649,7 @@ void process_commands()
|
|||
#ifdef DUAL_X_CARRIAGE
|
||||
if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && tmp_extruder == 0)
|
||||
setTargetHotend1(code_value() == 0.0 ? 0.0 : code_value() + duplicate_extruder_temp_offset);
|
||||
#endif
|
||||
#endif
|
||||
setWatch();
|
||||
break;
|
||||
case 140: // M140 set bed temp
|
||||
|
@ -1701,7 +1705,7 @@ void process_commands()
|
|||
SERIAL_PROTOCOL_F(rawHotendTemp(cur_extruder)/OVERSAMPLENR,0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
SERIAL_PROTOCOLLN("");
|
||||
return;
|
||||
break;
|
||||
|
@ -1719,14 +1723,14 @@ void process_commands()
|
|||
#ifdef DUAL_X_CARRIAGE
|
||||
if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && tmp_extruder == 0)
|
||||
setTargetHotend1(code_value() == 0.0 ? 0.0 : code_value() + duplicate_extruder_temp_offset);
|
||||
#endif
|
||||
#endif
|
||||
CooldownNoWait = true;
|
||||
} else if (code_seen('R')) {
|
||||
setTargetHotend(code_value(), tmp_extruder);
|
||||
#ifdef DUAL_X_CARRIAGE
|
||||
if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && tmp_extruder == 0)
|
||||
setTargetHotend1(code_value() == 0.0 ? 0.0 : code_value() + duplicate_extruder_temp_offset);
|
||||
#endif
|
||||
#endif
|
||||
CooldownNoWait = false;
|
||||
}
|
||||
#ifdef AUTOTEMP
|
||||
|
@ -1890,7 +1894,7 @@ void process_commands()
|
|||
SET_OUTPUT(SUICIDE_PIN);
|
||||
WRITE(SUICIDE_PIN, HIGH);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ULTIPANEL
|
||||
powersupply = true;
|
||||
LCD_MESSAGEPGM(WELCOME_MSG);
|
||||
|
@ -2047,18 +2051,18 @@ void process_commands()
|
|||
#endif
|
||||
break;
|
||||
//TODO: update for all axis, use for loop
|
||||
#ifdef BLINKM
|
||||
#ifdef BLINKM
|
||||
case 150: // M150
|
||||
{
|
||||
byte red;
|
||||
byte grn;
|
||||
byte blu;
|
||||
|
||||
|
||||
if(code_seen('R')) red = code_value();
|
||||
if(code_seen('U')) grn = code_value();
|
||||
if(code_seen('B')) blu = code_value();
|
||||
|
||||
SendColors(red,grn,blu);
|
||||
|
||||
SendColors(red,grn,blu);
|
||||
}
|
||||
break;
|
||||
#endif //BLINKM
|
||||
|
@ -2180,7 +2184,7 @@ void process_commands()
|
|||
{
|
||||
extruder_offset[Z_AXIS][tmp_extruder] = code_value();
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOPGM(MSG_HOTEND_OFFSET);
|
||||
for(tmp_extruder = 0; tmp_extruder < EXTRUDERS; tmp_extruder++)
|
||||
|
@ -2213,17 +2217,17 @@ void process_commands()
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 226: // M226 P<pin number> S<pin state>- Wait until the specified pin reaches the state required
|
||||
{
|
||||
if(code_seen('P')){
|
||||
int pin_number = code_value(); // pin number
|
||||
int pin_state = -1; // required pin state - default is inverted
|
||||
|
||||
|
||||
if(code_seen('S')) pin_state = code_value(); // required pin state
|
||||
|
||||
|
||||
if(pin_state >= -1 && pin_state <= 1){
|
||||
|
||||
|
||||
for(int8_t i = 0; i < (int8_t)sizeof(sensitive_pins); i++)
|
||||
{
|
||||
if (sensitive_pins[i] == pin_number)
|
||||
|
@ -2232,28 +2236,28 @@ void process_commands()
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (pin_number > -1)
|
||||
{
|
||||
st_synchronize();
|
||||
|
||||
|
||||
pinMode(pin_number, INPUT);
|
||||
|
||||
|
||||
int target;
|
||||
switch(pin_state){
|
||||
case 1:
|
||||
target = HIGH;
|
||||
break;
|
||||
|
||||
|
||||
case 0:
|
||||
target = LOW;
|
||||
break;
|
||||
|
||||
|
||||
case -1:
|
||||
target = !digitalRead(pin_number);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
while(digitalRead(pin_number) != target){
|
||||
manage_heater();
|
||||
manage_inactivity();
|
||||
|
@ -2263,7 +2267,7 @@ void process_commands()
|
|||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
#if NUM_SERVOS > 0
|
||||
case 280: // M280 - set servo position absolute. P: servo index, S: angle or microseconds
|
||||
|
@ -2439,13 +2443,13 @@ void process_commands()
|
|||
engage_z_probe(); // Engage Z Servo endstop if available
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 402:
|
||||
{
|
||||
retract_z_probe(); // Retract Z Servo endstop if enabled
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
case 500: // M500 Store settings in EEPROM
|
||||
{
|
||||
Config_StoreSettings();
|
||||
|
@ -2603,14 +2607,14 @@ void process_commands()
|
|||
// M605 S0: Full control mode. The slicer has full control over x-carriage movement
|
||||
// M605 S1: Auto-park mode. The inactive head will auto park/unpark without slicer involvement
|
||||
// M605 S2 [Xnnn] [Rmmm]: Duplication mode. The second extruder will duplicate the first with nnn
|
||||
// millimeters x-offset and an optional differential hotend temperature of
|
||||
// millimeters x-offset and an optional differential hotend temperature of
|
||||
// mmm degrees. E.g., with "M605 S2 X100 R2" the second extruder will duplicate
|
||||
// the first with a spacing of 100mm in the x direction and 2 degrees hotter.
|
||||
//
|
||||
// Note: the X axis should be homed after changing dual x-carriage mode.
|
||||
{
|
||||
st_synchronize();
|
||||
|
||||
|
||||
if (code_seen('S'))
|
||||
dual_x_carriage_mode = code_value();
|
||||
|
||||
|
@ -2621,7 +2625,7 @@ void process_commands()
|
|||
|
||||
if (code_seen('R'))
|
||||
duplicate_extruder_temp_offset = code_value();
|
||||
|
||||
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOPGM(MSG_HOTEND_OFFSET);
|
||||
SERIAL_ECHO(" ");
|
||||
|
@ -2637,13 +2641,13 @@ void process_commands()
|
|||
{
|
||||
dual_x_carriage_mode = DEFAULT_DUAL_X_CARRIAGE_MODE;
|
||||
}
|
||||
|
||||
|
||||
active_extruder_parked = false;
|
||||
extruder_duplication_enabled = false;
|
||||
delayed_move_time = 0;
|
||||
}
|
||||
break;
|
||||
#endif //DUAL_X_CARRIAGE
|
||||
#endif //DUAL_X_CARRIAGE
|
||||
|
||||
case 907: // M907 Set digital trimpot motor current using axis codes.
|
||||
{
|
||||
|
@ -2724,19 +2728,19 @@ void process_commands()
|
|||
// Save current position to return to after applying extruder offset
|
||||
memcpy(destination, current_position, sizeof(destination));
|
||||
#ifdef DUAL_X_CARRIAGE
|
||||
if (dual_x_carriage_mode == DXC_AUTO_PARK_MODE && Stopped == false &&
|
||||
if (dual_x_carriage_mode == DXC_AUTO_PARK_MODE && Stopped == false &&
|
||||
(delayed_move_time != 0 || current_position[X_AXIS] != x_home_pos(active_extruder)))
|
||||
{
|
||||
// Park old head: 1) raise 2) move to park position 3) lower
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] + TOOLCHANGE_PARK_ZLIFT,
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] + TOOLCHANGE_PARK_ZLIFT,
|
||||
current_position[E_AXIS], max_feedrate[Z_AXIS], active_extruder);
|
||||
plan_buffer_line(x_home_pos(active_extruder), current_position[Y_AXIS], current_position[Z_AXIS] + TOOLCHANGE_PARK_ZLIFT,
|
||||
plan_buffer_line(x_home_pos(active_extruder), current_position[Y_AXIS], current_position[Z_AXIS] + TOOLCHANGE_PARK_ZLIFT,
|
||||
current_position[E_AXIS], max_feedrate[X_AXIS], active_extruder);
|
||||
plan_buffer_line(x_home_pos(active_extruder), current_position[Y_AXIS], current_position[Z_AXIS],
|
||||
plan_buffer_line(x_home_pos(active_extruder), current_position[Y_AXIS], current_position[Z_AXIS],
|
||||
current_position[E_AXIS], max_feedrate[Z_AXIS], active_extruder);
|
||||
st_synchronize();
|
||||
}
|
||||
|
||||
|
||||
// apply Y & Z extruder offset (x offset is already used in determining home pos)
|
||||
current_position[Y_AXIS] = current_position[Y_AXIS] -
|
||||
extruder_offset[Y_AXIS][active_extruder] +
|
||||
|
@ -2744,7 +2748,7 @@ void process_commands()
|
|||
current_position[Z_AXIS] = current_position[Z_AXIS] -
|
||||
extruder_offset[Z_AXIS][active_extruder] +
|
||||
extruder_offset[Z_AXIS][tmp_extruder];
|
||||
|
||||
|
||||
active_extruder = tmp_extruder;
|
||||
|
||||
// This function resets the max/min values - the current position may be overwritten below.
|
||||
|
@ -2752,18 +2756,18 @@ void process_commands()
|
|||
|
||||
if (dual_x_carriage_mode == DXC_FULL_CONTROL_MODE)
|
||||
{
|
||||
current_position[X_AXIS] = inactive_extruder_x_pos;
|
||||
current_position[X_AXIS] = inactive_extruder_x_pos;
|
||||
inactive_extruder_x_pos = destination[X_AXIS];
|
||||
}
|
||||
else if (dual_x_carriage_mode == DXC_DUPLICATION_MODE)
|
||||
{
|
||||
active_extruder_parked = (active_extruder == 0); // this triggers the second extruder to move into the duplication position
|
||||
if (active_extruder == 0 || active_extruder_parked)
|
||||
current_position[X_AXIS] = inactive_extruder_x_pos;
|
||||
current_position[X_AXIS] = inactive_extruder_x_pos;
|
||||
else
|
||||
current_position[X_AXIS] = destination[X_AXIS] + duplicate_extruder_x_offset;
|
||||
current_position[X_AXIS] = destination[X_AXIS] + duplicate_extruder_x_offset;
|
||||
inactive_extruder_x_pos = destination[X_AXIS];
|
||||
extruder_duplication_enabled = false;
|
||||
extruder_duplication_enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2773,7 +2777,7 @@ void process_commands()
|
|||
active_extruder_parked = true;
|
||||
delayed_move_time = 0;
|
||||
}
|
||||
#else
|
||||
#else
|
||||
// Offset extruder (only by XY)
|
||||
int i;
|
||||
for(i = 0; i < 2; i++) {
|
||||
|
@ -2986,13 +2990,13 @@ void prepare_move()
|
|||
{
|
||||
// move duplicate extruder into correct duplication position.
|
||||
plan_set_position(inactive_extruder_x_pos, current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
plan_buffer_line(current_position[X_AXIS] + duplicate_extruder_x_offset, current_position[Y_AXIS], current_position[Z_AXIS],
|
||||
plan_buffer_line(current_position[X_AXIS] + duplicate_extruder_x_offset, current_position[Y_AXIS], current_position[Z_AXIS],
|
||||
current_position[E_AXIS], max_feedrate[X_AXIS], 1);
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
st_synchronize();
|
||||
extruder_duplication_enabled = true;
|
||||
active_extruder_parked = false;
|
||||
}
|
||||
}
|
||||
else if (dual_x_carriage_mode == DXC_AUTO_PARK_MODE) // handle unparking of head
|
||||
{
|
||||
if (current_position[E_AXIS] == destination[E_AXIS])
|
||||
|
@ -3001,7 +3005,7 @@ void prepare_move()
|
|||
// be used as start of first non-travel move)
|
||||
if (delayed_move_time != 0xFFFFFFFFUL)
|
||||
{
|
||||
memcpy(current_position, destination, sizeof(current_position));
|
||||
memcpy(current_position, destination, sizeof(current_position));
|
||||
if (destination[Z_AXIS] > raised_parked_position[Z_AXIS])
|
||||
raised_parked_position[Z_AXIS] = destination[Z_AXIS];
|
||||
delayed_move_time = millis();
|
||||
|
@ -3011,9 +3015,9 @@ void prepare_move()
|
|||
delayed_move_time = 0;
|
||||
// unpark extruder: 1) raise, 2) move into starting XY position, 3) lower
|
||||
plan_buffer_line(raised_parked_position[X_AXIS], raised_parked_position[Y_AXIS], raised_parked_position[Z_AXIS], current_position[E_AXIS], max_feedrate[Z_AXIS], active_extruder);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], raised_parked_position[Z_AXIS],
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], raised_parked_position[Z_AXIS],
|
||||
current_position[E_AXIS], min(max_feedrate[X_AXIS],max_feedrate[Y_AXIS]), active_extruder);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS],
|
||||
current_position[E_AXIS], max_feedrate[Z_AXIS], active_extruder);
|
||||
active_extruder_parked = false;
|
||||
}
|
||||
|
@ -3179,7 +3183,7 @@ void manage_inactivity()
|
|||
// travel moves have been received so enact them
|
||||
delayed_move_time = 0xFFFFFFFFUL; // force moves to be done
|
||||
memcpy(destination,current_position,sizeof(destination));
|
||||
prepare_move();
|
||||
prepare_move();
|
||||
}
|
||||
#endif
|
||||
#ifdef TEMP_STAT_LEDS
|
||||
|
|
|
@ -90,12 +90,16 @@ static void menu_action_setting_edit_callback_long5(const char* pstr, unsigned l
|
|||
#define ENCODER_FEEDRATE_DEADZONE 10
|
||||
|
||||
#if !defined(LCD_I2C_VIKI)
|
||||
#define ENCODER_STEPS_PER_MENU_ITEM 5
|
||||
#ifndef ENCODER_STEPS_PER_MENU_ITEM
|
||||
#define ENCODER_STEPS_PER_MENU_ITEM 5
|
||||
#endif
|
||||
#ifndef ENCODER_PULSES_PER_STEP
|
||||
#define ENCODER_PULSES_PER_STEP 1
|
||||
#endif
|
||||
#else
|
||||
#define ENCODER_STEPS_PER_MENU_ITEM 2 // VIKI LCD rotary encoder uses a different number of steps per rotation
|
||||
#ifndef ENCODER_STEPS_PER_MENU_ITEM
|
||||
#define ENCODER_STEPS_PER_MENU_ITEM 2 // VIKI LCD rotary encoder uses a different number of steps per rotation
|
||||
#endif
|
||||
#ifndef ENCODER_PULSES_PER_STEP
|
||||
#define ENCODER_PULSES_PER_STEP 1
|
||||
#endif
|
||||
|
@ -207,7 +211,7 @@ static void lcd_status_screen()
|
|||
else if (feedmultiply == 100 && int(encoderPosition) < -ENCODER_FEEDRATE_DEADZONE)
|
||||
{
|
||||
feedmultiply += int(encoderPosition) + ENCODER_FEEDRATE_DEADZONE;
|
||||
encoderPosition = 0;
|
||||
encoderPosition = 0;
|
||||
}
|
||||
else if (feedmultiply != 100)
|
||||
{
|
||||
|
@ -407,7 +411,7 @@ static void lcd_tune_menu()
|
|||
#endif
|
||||
MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255);
|
||||
MENU_ITEM_EDIT(int3, MSG_FLOW, &extrudemultiply, 10, 999);
|
||||
|
||||
|
||||
#ifdef BABYSTEPPING
|
||||
#ifdef BABYSTEP_XY
|
||||
MENU_ITEM(submenu, "Babystep X", lcd_babystep_x);
|
||||
|
@ -719,7 +723,7 @@ static void lcd_control_motion_menu()
|
|||
MENU_ITEM_EDIT(float52, MSG_XSTEPS, &axis_steps_per_unit[X_AXIS], 5, 9999);
|
||||
MENU_ITEM_EDIT(float52, MSG_YSTEPS, &axis_steps_per_unit[Y_AXIS], 5, 9999);
|
||||
MENU_ITEM_EDIT(float51, MSG_ZSTEPS, &axis_steps_per_unit[Z_AXIS], 5, 9999);
|
||||
MENU_ITEM_EDIT(float51, MSG_ESTEPS, &axis_steps_per_unit[E_AXIS], 5, 9999);
|
||||
MENU_ITEM_EDIT(float51, MSG_ESTEPS, &axis_steps_per_unit[E_AXIS], 5, 9999);
|
||||
#ifdef ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
|
||||
MENU_ITEM_EDIT(bool, "Endstop abort", &abort_on_endstop_hit);
|
||||
#endif
|
||||
|
@ -781,7 +785,7 @@ static void lcd_sd_updir()
|
|||
|
||||
void lcd_sdcard_menu()
|
||||
{
|
||||
if (lcdDrawUpdate == 0 && LCD_CLICKED == 0)
|
||||
if (lcdDrawUpdate == 0 && LCD_CLICKED == 0)
|
||||
return; // nothing to do (so don't thrash the SD card)
|
||||
uint16_t fileCnt = card.getnrfilenames();
|
||||
START_MENU();
|
||||
|
@ -795,7 +799,7 @@ void lcd_sdcard_menu()
|
|||
}else{
|
||||
MENU_ITEM(function, LCD_STR_FOLDER "..", lcd_sd_updir);
|
||||
}
|
||||
|
||||
|
||||
for(uint16_t i=0;i<fileCnt;i++)
|
||||
{
|
||||
if (_menuItemNr == _lineNr)
|
||||
|
@ -982,14 +986,14 @@ void lcd_init()
|
|||
|
||||
#ifdef NEWPANEL
|
||||
pinMode(BTN_EN1,INPUT);
|
||||
pinMode(BTN_EN2,INPUT);
|
||||
pinMode(BTN_EN2,INPUT);
|
||||
pinMode(SDCARDDETECT,INPUT);
|
||||
WRITE(BTN_EN1,HIGH);
|
||||
WRITE(BTN_EN2,HIGH);
|
||||
#if BTN_ENC > 0
|
||||
pinMode(BTN_ENC,INPUT);
|
||||
pinMode(BTN_ENC,INPUT);
|
||||
WRITE(BTN_ENC,HIGH);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef REPRAPWORLD_KEYPAD
|
||||
pinMode(SHIFT_CLK,OUTPUT);
|
||||
pinMode(SHIFT_LD,OUTPUT);
|
||||
|
@ -1007,9 +1011,9 @@ void lcd_init()
|
|||
pinMode(SHIFT_EN,OUTPUT);
|
||||
pinMode(SHIFT_OUT,INPUT);
|
||||
WRITE(SHIFT_OUT,HIGH);
|
||||
WRITE(SHIFT_LD,HIGH);
|
||||
WRITE(SHIFT_LD,HIGH);
|
||||
WRITE(SHIFT_EN,LOW);
|
||||
#endif // SR_LCD_2W_NL
|
||||
#endif // SR_LCD_2W_NL
|
||||
#endif//!NEWPANEL
|
||||
|
||||
#if (SDCARDDETECT > 0)
|
||||
|
@ -1020,28 +1024,28 @@ void lcd_init()
|
|||
slow_buttons = 0;
|
||||
#endif
|
||||
lcd_buttons_update();
|
||||
#ifdef ULTIPANEL
|
||||
#ifdef ULTIPANEL
|
||||
encoderDiff = 0;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void lcd_update()
|
||||
{
|
||||
static unsigned long timeoutToStatus = 0;
|
||||
|
||||
|
||||
#ifdef LCD_HAS_SLOW_BUTTONS
|
||||
slow_buttons = lcd_implementation_read_slow_buttons(); // buttons which take too long to read in interrupt context
|
||||
#endif
|
||||
|
||||
|
||||
lcd_buttons_update();
|
||||
|
||||
|
||||
#if (SDCARDDETECT > 0)
|
||||
if((IS_SD_INSERTED != lcd_oldcardstatus))
|
||||
{
|
||||
lcdDrawUpdate = 2;
|
||||
lcd_oldcardstatus = IS_SD_INSERTED;
|
||||
lcd_implementation_init(); // to maybe revive the lcd if static electricty killed it.
|
||||
|
||||
|
||||
if(lcd_oldcardstatus)
|
||||
{
|
||||
card.initsd();
|
||||
|
@ -1054,7 +1058,7 @@ void lcd_update()
|
|||
}
|
||||
}
|
||||
#endif//CARDINSERTED
|
||||
|
||||
|
||||
if (lcd_next_update_millis < millis())
|
||||
{
|
||||
#ifdef ULTIPANEL
|
||||
|
@ -1095,7 +1099,7 @@ void lcd_update()
|
|||
#ifdef DOGLCD // Changes due to different driver architecture of the DOGM display
|
||||
blink++; // Variable for fan animation and alive dot
|
||||
u8g.firstPage();
|
||||
do
|
||||
do
|
||||
{
|
||||
u8g.setFont(u8g_font_6x10_marlin);
|
||||
u8g.setPrintPos(125,0);
|
||||
|
@ -1105,7 +1109,7 @@ void lcd_update()
|
|||
(*currentMenu)();
|
||||
if (!lcdDrawUpdate) break; // Terminate display update, when nothing new to draw. This must be done before the last dogm.next()
|
||||
} while( u8g.nextPage() );
|
||||
#else
|
||||
#else
|
||||
(*currentMenu)();
|
||||
#endif
|
||||
|
||||
|
@ -1159,7 +1163,7 @@ void lcd_reset_alert_level()
|
|||
void lcd_setcontrast(uint8_t value)
|
||||
{
|
||||
lcd_contrast = value & 63;
|
||||
u8g.setContrast(lcd_contrast);
|
||||
u8g.setContrast(lcd_contrast);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1199,7 +1203,7 @@ void lcd_buttons_update()
|
|||
WRITE(SHIFT_LD,HIGH);
|
||||
unsigned char tmp_buttons=0;
|
||||
for(int8_t i=0;i<8;i++)
|
||||
{
|
||||
{
|
||||
newbutton = newbutton>>1;
|
||||
if(READ(SHIFT_OUT))
|
||||
newbutton|=(1<<7);
|
||||
|
@ -1249,14 +1253,14 @@ void lcd_buttons_update()
|
|||
}
|
||||
|
||||
void lcd_buzz(long duration, uint16_t freq)
|
||||
{
|
||||
{
|
||||
#ifdef LCD_USE_I2C_BUZZER
|
||||
lcd.buzz(duration,freq);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
bool lcd_clicked()
|
||||
{
|
||||
bool lcd_clicked()
|
||||
{
|
||||
return LCD_CLICKED;
|
||||
}
|
||||
#endif//ULTIPANEL
|
||||
|
|
Loading…
Reference in a new issue