Moved the PID_dT in the Ki and Kd calculation from the configuration.h to temperature.cpp
// Ultimaker = 7
// Teensylu = 8
// Gen3+ =9
+
#ifndef MOTHERBOARD
#define MOTHERBOARD 7
#endif
// If you are using a preconfigured hotend then you can use one of the value sets by uncommenting it
// Ultimaker
- #define DEFAULT_Kp 22.2
- #define DEFAULT_Ki (1.08*PID_dT)
- #define DEFAULT_Kd (114/PID_dT)
+ #define DEFAULT_Kp 22.2
+ #define DEFAULT_Ki 1.08
+ #define DEFAULT_Kd 114
// Makergear
// #define DEFAULT_Kp 7.0
// #define DEFAULT_Kd 12
// Mendel Parts V9 on 12V
-// #define DEFAULT_Kp 63.0
-// #define DEFAULT_Ki (2.25*PID_dT)
-// #define DEFAULT_Kd (440/PID_dT)
+// #define DEFAULT_Kp 63.0
+// #define DEFAULT_Ki 2.25
+// #define DEFAULT_Kd 440
#endif // PIDTEMP
//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
#define ULTRA_LCD
#define LCD_WIDTH 20
#define LCD_HEIGHT 4
-
+
// Preheat Constants
#define PLA_PREHEAT_HOTEND_TEMP 180
#define PLA_PREHEAT_HPB_TEMP 70
#else //no panel but just lcd
#ifdef ULTRA_LCD
#define LCD_WIDTH 16
- #define LCD_HEIGHT 2
+ #define LCD_HEIGHT 2
#endif
#endif
void get_coordinates();
void prepare_move();
void kill();
+void Stop();
+
+bool IsStopped();
void enquecommand(const char *cmd); //put an ascii command at the end of the current buffer.
void prepare_arc_move(char isclockwise);
// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
// M503 - print the current settings (from memory not from eeprom)
// M303 - PID relay autotune S<temperature> sets the target temperature. (default target temperature = 150C)
+// M999 - Restart after being stopped by error
//Stepper Movement Variables
uint8_t active_extruder = 0;
unsigned char FanSpeed=0;
+
//===========================================================================
//=============================private variables=============================
//===========================================================================
static float offset[3] = {0.0, 0.0, 0.0};
static bool home_all_axis = true;
static float feedrate = 1500.0, next_feedrate, saved_feedrate;
-static long gcode_N, gcode_LastN;
+static long gcode_N, gcode_LastN, Stopped_gcode_LastN = 0;
static bool relative_mode = false; //Determines Absolute or Relative Coordinates
static bool relative_mode_e = false; //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode.
static uint8_t tmp_extruder;
+bool Stopped=false;
//===========================================================================
//=============================ROUTINES=============================
case 1:
case 2:
case 3:
- #ifdef SDSUPPORT
- if(card.saving)
- break;
- #endif //SDSUPPORT
- SERIAL_PROTOCOLLNPGM(MSG_OK);
+ if(Stopped == false) { // If printer is stopped by an error the G[0-3] codes are ignored.
+ #ifdef SDSUPPORT
+ if(card.saving)
+ break;
+ #endif //SDSUPPORT
+ SERIAL_PROTOCOLLNPGM(MSG_OK);
+ }
+ else {
+ SERIAL_ERRORLNPGM(MSG_ERR_STOPPED);
+ LCD_MESSAGEPGM(MSG_STOPPED);
+ }
break;
default:
break;
{
case 0: // G0 -> G1
case 1: // G1
- get_coordinates(); // For X Y Z E F
- prepare_move();
- //ClearToSend();
- return;
+ if(Stopped == false) {
+ get_coordinates(); // For X Y Z E F
+ prepare_move();
+ //ClearToSend();
+ return;
+ }
//break;
case 2: // G2 - CW ARC
- get_arc_coordinates();
- prepare_arc_move(true);
- return;
+ if(Stopped == false) {
+ get_arc_coordinates();
+ prepare_arc_move(true);
+ return;
+ }
case 3: // G3 - CCW ARC
- get_arc_coordinates();
- prepare_arc_move(false);
- return;
+ if(Stopped == false) {
+ get_arc_coordinates();
+ prepare_arc_move(false);
+ return;
+ }
case 4: // G4 dwell
LCD_MESSAGEPGM(MSG_DWELL);
codenum = 0;
#if (PS_ON_PIN > -1)
case 80: // M80 - ATX Power On
SET_OUTPUT(PS_ON_PIN); //GND
+ WRITE(PS_ON_PIN, LOW);
break;
#endif
EEPROM_printSettings();
}
break;
-
+ case 999: // Restart after being stopped
+ Stopped = false;
+ gcode_LastN = Stopped_gcode_LastN;
+ FlushSerialRequestResend();
+ break;
}
}
while(1); // Wait for reset
}
+void Stop()
+{
+ disable_heater();
+ if(Stopped == false) {
+ Stopped = true;
+ Stopped_gcode_LastN = gcode_LastN; // Save last g_code for restart
+ SERIAL_ERROR_START;
+ SERIAL_ERRORLNPGM(MSG_ERR_STOPPED);
+ LCD_MESSAGEPGM(MSG_STOPPED);
+ }
+}
+
+bool IsStopped() { return Stopped; };
+
#define MSG_NO_MOVE "No move."
#define MSG_PART_RELEASE "Partial Release"
#define MSG_KILLED "KILLED. "
+ #define MSG_STOPPED "STOPPED. "
#define MSG_PREHEAT_PLA " Preheat PLA"
#define MSG_PREHEAT_ABS " Preheat ABS"
#define MSG_STEPPER_RELEASED "Released."
#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:http://www.mendel-parts.com PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1\n"
#define MSG_COUNT_X " Count X:"
#define MSG_ERR_KILLED "Printer halted. kill() called !!"
+ #define MSG_ERR_STOPPED "Printer stopped deu to errors. Fix the error and use M999 to restart!. (Temperature is reset. Set it before restarting)"
#define MSG_RESEND "Resend:"
#define MSG_UNKNOWN_COMMAND "Unknown command:\""
#define MSG_ACTIVE_EXTRUDER "Active Extruder: "
#define MSG_NO_MOVE "No move."
#define MSG_PART_RELEASE "Partial Release"
#define MSG_KILLED "KILLED. "
+ #define MSG_STOPPED "STOPPED. "
#define MSG_PREHEAT_PLA " Preheat PLA"
#define MSG_PREHEAT_ABS " Preheat ABS"
#define MSG_STEPPER_RELEASED "Released."
#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:http://www.mendel-parts.com PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1\n"
#define MSG_COUNT_X " Count X:"
#define MSG_ERR_KILLED "Printer halted. kill() called !!"
+ #define MSG_ERR_STOPPED "Printer stopped deu to errors. Fix the error and use M999 to restart!"
#define MSG_RESEND "Resend:"
#define MSG_UNKNOWN_COMMAND "Unknown command:\""
#define MSG_ACTIVE_EXTRUDER "Active Extruder: "
float pid_setpoint[EXTRUDERS] = { 0.0 };
float Kp=DEFAULT_Kp;
- float Ki=DEFAULT_Ki;
- float Kd=DEFAULT_Kd;
+ float Ki=(DEFAULT_Ki*PID_dT);
+ float Kd=(DEFAULT_Kd/PID_dT);
#ifdef PID_ADD_EXTRUSION_RATE
float Kc=DEFAULT_Kc;
#endif
void max_temp_error(uint8_t e) {
digitalWrite(heater_pin_map[e], 0);
- SERIAL_ERROR_START;
- SERIAL_ERRORLN(e);
- SERIAL_ERRORLNPGM(": Extruder switched off. MAXTEMP triggered !");
+ if(IsStopped() == false) {
+ SERIAL_ERROR_START;
+ SERIAL_ERRORLN(e);
+ SERIAL_ERRORLNPGM(": Extruder switched off. MAXTEMP triggered !");
+ }
}
void min_temp_error(uint8_t e) {
digitalWrite(heater_pin_map[e], 0);
- SERIAL_ERROR_START;
- SERIAL_ERRORLN(e);
- SERIAL_ERRORLNPGM(": Extruder switched off. MINTEMP triggered !");
+ if(IsStopped() == false) {
+ SERIAL_ERROR_START;
+ SERIAL_ERRORLN(e);
+ SERIAL_ERRORLNPGM(": Extruder switched off. MINTEMP triggered !");
+ }
}
void bed_max_temp_error(void) {
digitalWrite(HEATER_BED_PIN, 0);
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!");
+ if(IsStopped() == false) {
+ SERIAL_ERROR_START;
+ SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!");
+ }
}
#define HEAT_INTERVAL 250
max_temp_error(e);
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
{
- kill();;
+ Stop();;
}
#endif
}
min_temp_error(e);
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
{
- kill();
+ Stop();
}
#endif
}
if(current_raw_bed >= bed_maxttemp) {
target_raw_bed = 0;
bed_max_temp_error();
- kill();
+ Stop();
}
#endif
}