#endif
#endif // PIDTEMP
+// extruder run-out prevention.
+//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
+//#define EXTRUDER_RUNOUT_PREVENT
+#define EXTRUDER_RUNOUT_MINTEMP 190
+#define EXTRUDER_RUNOUT_SECONDS 60
+#define EXTRUDER_RUNOUT_EXTRUDE 10 //mm filament
+#define EXTRUDER_RUNOUT_SPEED 20 //extrusion speed
+
//===========================================================================
//=============================Mechanical Settings===========================
case 1: // G1
get_coordinates(); // For X Y Z E F
prepare_move();
- previous_millis_cmd = millis();
//ClearToSend();
return;
//break;
case 2: // G2 - CW ARC
get_arc_coordinates();
prepare_arc_move(true);
- previous_millis_cmd = millis();
return;
case 3: // G3 - CCW ARC
get_arc_coordinates();
prepare_arc_move(false);
- previous_millis_cmd = millis();
return;
case 4: // G4 dwell
LCD_MESSAGEPGM("DWELL...");
st_synchronize();
codenum += millis(); // keep track of when we started waiting
-
+ previous_millis_cmd = millis();
while(millis() < codenum ){
manage_heater();
}
}
LCD_MESSAGEPGM("Heating done.");
starttime=millis();
+ previous_millis_cmd = millis();
}
break;
case 190: // M190 - Wait bed for heater to reach target.
manage_heater();
}
LCD_MESSAGEPGM("Bed done.");
+ previous_millis_cmd = millis();
#endif
break;
void prepare_move()
{
+
if (min_software_endstops) {
if (destination[X_AXIS] < 0) destination[X_AXIS] = 0.0;
if (destination[Y_AXIS] < 0) destination[Y_AXIS] = 0.0;
for(int8_t i=0; i < NUM_AXIS; i++) {
current_position[i] = destination[i];
}
+ previous_millis_cmd = millis();
}
void prepare_arc_move(char isclockwise) {
for(int8_t i=0; i < NUM_AXIS; i++) {
current_position[i] = destination[i];
}
+ previous_millis_cmd = millis();
}
void manage_inactivity(byte debug)
disable_z();
disable_e();
}
+ #ifdef EXTRUDER_RUNOUT_PREVENT
+ if( (millis()-previous_millis_cmd) > EXTRUDER_RUNOUT_SECONDS*1000 )
+ if(degHotend(active_extruder)>EXTRUDER_RUNOUT_MINTEMP)
+ {
+ enable_e();
+ float oldepos=current_position[E_AXIS];
+ float oldedes=destination[E_AXIS];
+ plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]+EXTRUDER_RUNOUT_EXTRUDE, EXTRUDER_RUNOUT_SPEED*feedmultiply/60/100.0, active_extruder);
+ current_position[E_AXIS]=oldepos;
+ destination[E_AXIS]=oldedes;
+ plan_set_e_position(oldepos);
+ previous_millis_cmd=millis();
+ }
+ #endif
check_axes_activity();
}