snmm: removed detection if print was terminated by reset/blackout; initial version of stop print for snmm

This commit is contained in:
PavelSindler 2017-05-03 16:55:13 +02:00
parent 2fa97d5dfe
commit df9f063f99
3 changed files with 77 additions and 121 deletions

View file

@ -1161,11 +1161,12 @@ void setup()
// 1) Set a high power mode.
eeprom_write_byte((uint8_t*)EEPROM_SILENT, 0);
}
#ifdef SNMM
if (eeprom_read_dword((uint32_t*)EEPROM_BOWDEN_LENGTH) == 0x0ffffffff) { //bowden length used for SNMM
int _z = BOWDEN_LENGTH;
for(int i = 0; i<4; i++) EEPROM_save_B(EEPROM_BOWDEN_LENGTH + i * 2, &_z);
}
#endif
// In the future, somewhere here would one compare the current firmware version against the firmware version stored in the EEPROM.
// If they differ, an update procedure may need to be performed. At the end of this block, the current firmware version
@ -2061,68 +2062,8 @@ void process_commands()
} else if(code_seen("FR")) {
// Factory full reset
factory_reset(0,true);
}else if(code_seen("Y")) { //filaments adjustment at the beginning of print (for SNMM)
#ifdef SNMM
int extr;
SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT); //is silent mode or loud mode set
lcd_implementation_clear();
lcd_display_message_fullscreen_P(MSG_FIL_ADJUSTING);
current_position[Z_AXIS] = 100;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder);
digipot_current(2, E_MOTOR_HIGH_CURRENT);
for (extr = 1; extr < 4; extr++) { //we dont know which filament is in nozzle, but we want to load filament0, so all other filaments must unloaded
change_extr(extr);
ramming();
}
change_extr(0);
current_position[E_AXIS] += FIL_LOAD_LENGTH; //loading filament0 into the nozzle
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder);
st_synchronize();
for (extr = 1; extr < 4; extr++) {
digipot_current(2, E_MOTOR_LOW_CURRENT); //set lower current for extruder motors
change_extr(extr);
current_position[E_AXIS] += (FIL_LOAD_LENGTH + 3 * FIL_RETURN_LENGTH); //adjusting filaments
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 5000, active_extruder);
st_synchronize();
digipot_current(2, tmp_motor_loud[2]); //set back to normal operation currents
current_position[E_AXIS] -= FIL_RETURN_LENGTH;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder);
st_synchronize();
}
change_extr(0);
current_position[E_AXIS] += 25;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 10, active_extruder);
digipot_current(2, E_MOTOR_HIGH_CURRENT);
ramming();
if (SilentMode == 1) digipot_current(2, tmp_motor[2]); //set back to normal operation currents
else digipot_current(2, tmp_motor_loud[2]);
st_synchronize();
lcd_show_fullscreen_message_and_wait_P(MSG_CONFIRM_NOZZLE_CLEAN_FIL_ADJ);
lcd_implementation_clear();
lcd_printPGM(MSG_PLEASE_WAIT);
current_position[Z_AXIS] = 0;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder);
st_synchronize();
lcd_update_enable(true);
#endif
}
else if (code_seen("SetF")) {
#ifdef SNMM
bool not_finished = (eeprom_read_byte((unsigned char*)EEPROM_PRINT_FLAG) != PRINT_FINISHED);
eeprom_update_byte((unsigned char*)EEPROM_PRINT_FLAG, PRINT_STARTED);
if (not_finished) enquecommand_front_P(PSTR("PRUSA Y"));
#endif
}
else if (code_seen("ResF")) {
#ifdef SNMM
eeprom_update_byte((unsigned char*)EEPROM_PRINT_FLAG, PRINT_FINISHED);
#endif
}
factory_reset(0,true);
}
//else if (code_seen('Cal')) {
// lcd_calibration();
// }

View file

@ -515,6 +515,43 @@ static void lcd_status_screen()
#ifdef ULTIPANEL
void unload_fil() {
char cmd1[10];
float unload_l = ((BOWDEN_LENGTH + 60 + FIL_LOAD_LENGTH) / 2);
sprintf_P(cmd1, PSTR("M106 S%d"), fanSpeedBckp);
enquecommand(cmd1);
strcpy(cmd1, "G1 Z");
strcat(cmd1, ftostr32(pause_lastpos[Z_AXIS]));
enquecommand(cmd1);
enquecommand_P(PSTR("M907 E700")); //set extruder current higher
enquecommand_P(PSTR("M203 E50")); //set max. feedrate
st_synchronize();
if (current_temperature[0] < 230) {
// PLA
enquecommand_P(PSTR("G1 E5.4 F2800.000000"));
enquecommand_P(PSTR("G1 E3.2 F3000.000000"));
enquecommand_P(PSTR("G1 E3 F3400.000000"));
st_synchronize();
}
else {
// ABS
enquecommand_P(PSTR("G1 E3.1 F2000.000000"));
enquecommand_P(PSTR("G1 E3.1 F2500.000000"));
enquecommand_P(PSTR("G1 E4 F3000.000000"));
st_synchronize();
}
enquecommand_P(PSTR("M203 E80")); //set max. feedrate
enquecommand_P(PSTR("M907 E550")); //set extruder current
st_synchronize();
strcpy(cmd1, "G1 E-");
strcat(cmd1, ftostr32(unload_l));
enquecommand(cmd1);
enquecommand(cmd1);
st_synchronize();
}
void lcd_commands()
{
char cmd1[25];
@ -593,6 +630,7 @@ void lcd_commands()
if (lcd_commands_type == LCD_COMMAND_STOP_PRINT) /// stop print
{
uint8_t stopped_extruder;
if (lcd_commands_step == 0)
{
@ -624,9 +662,6 @@ void lcd_commands()
{
// M84: Disable steppers.
enquecommand_P(PSTR("M84"));
#ifdef SNMM
enquecommand_P(PSTR("PRUSA ResF")); //resets flag at the end of the print (used for SNMM)
#endif
autotempShutdown();
lcd_commands_step = 2;
}
@ -675,62 +710,41 @@ void lcd_commands()
lcd_commands_step = 5;
}
if (lcd_commands_step == 7 && !blocks_queued()) {
/*ramming();
st_synchronize();
change_extr(0);*/
st_synchronize();
enquecommand_P(PSTR("M907 E700")); //set extruder current higher
enquecommand_P(PSTR("M203 E50"));
st_synchronize();
if (current_temperature[0] < 230) {
// PLA
//enquecommand_P(PSTR("G1 E-8 F2100.000000"));
//enquecommand_P(PSTR("G1 E8 F2100.000000"));
enquecommand_P(PSTR("G1 E5.4 F2800.000000"));
enquecommand_P(PSTR("G1 E3.2 F3000.000000"));
enquecommand_P(PSTR("G1 E3 F3400.000000"));
enquecommand_P(PSTR("M203 E80"));
st_synchronize();
enquecommand_P(PSTR("G1 E-82 F9500.000000"));
enquecommand_P(PSTR("M203 E50"));
enquecommand_P(PSTR("G1 E-20 F1200.000000"));
enquecommand_P(PSTR("G1 E5 F400.000000"));
enquecommand_P(PSTR("G1 E5 F600.000000"));
st_synchronize();
enquecommand_P(PSTR("G1 E-10 F600.000000"));
enquecommand_P(PSTR("G1 E+10 F600.000000"));
enquecommand_P(PSTR("G1 E-10 F800.000000"));
enquecommand_P(PSTR("G1 E+10 F800.000000"));
enquecommand_P(PSTR("G1 E-10 F800.000000"));
st_synchronize();
}else {
// ABS
//enquecommand_P(PSTR("G1 E-8 F2100.000000"));
//enquecommand_P(PSTR("G1 E8 F2100.000000"));
enquecommand_P(PSTR("G1 E3.1 F2000.000000"));
enquecommand_P(PSTR("G1 E3.1 F2500.000000"));
enquecommand_P(PSTR("G1 E4 F3000.000000"));
st_synchronize();
enquecommand_P(PSTR("G4 P4700"));
enquecommand_P(PSTR("M203 E80"));
enquecommand_P(PSTR("G1 E-92 F9900.000000"));
enquecommand_P(PSTR("M203 E50"));
enquecommand_P(PSTR("G1 E-5 F800.000000"));
enquecommand_P(PSTR("G1 E5 F400.000000"));
st_synchronize();
enquecommand_P(PSTR("G1 E-5 F600.000000"));
enquecommand_P(PSTR("G1 E5 F600.000000"));
enquecommand_P(PSTR("G1 E-5 F600.000000"));
enquecommand_P(PSTR("G1 E5 F600.000000"));
enquecommand_P(PSTR("G1 E5 F600.000000"));
st_synchronize();
MYSERIAL.print("7");
stopped_extruder = snmm_extruder;
unload_fil();
lcd_commands_step = 8;
}
if (lcd_commands_step == 8 && !blocks_queued()) {
MYSERIAL.print("8");
if (stopped_extruder != 0) {
change_extr(0);
unload_fil();
}
lcd_commands_step = 9;
}
if (lcd_commands_step == 9 && !blocks_queued()) {
MYSERIAL.print("9");
if (stopped_extruder != 1) {
change_extr(1);
unload_fil();
}
lcd_commands_step = 10;
}
if (lcd_commands_step == 10 && !blocks_queued()) {
MYSERIAL.print("10");
if (stopped_extruder != 2) {
change_extr(2);
unload_fil();
}
lcd_commands_step = 11;
}
if (lcd_commands_step == 11 && !blocks_queued()) {
MYSERIAL.print("11");
if (stopped_extruder != 3) {
change_extr(3);
unload_fil();
}
enquecommand_P(PSTR("T0"));
enquecommand_P(PSTR("M907 E550")); //set extruder current to 500
//digipot_init();
lcd_commands_step = 3;
}
}

View file

@ -221,6 +221,7 @@ static void extr_unload_1();
static void extr_unload_2();
static void extr_unload_3();
static void lcd_disable_farm_mode();
static void extr_unload_all();
void stack_error();
static void lcd_ping_allert();