Show the axes invoved during crash detection
Explicitly show which axes are affected on the status line when a crash has been detected. When the crash recovery prompt is triggered, also show all axes which have been affected during the detection interval (currently X, Y, or both). The timer detection has been simplified to match the MK3 optical filament timeout handling, which makes more sense: a crash immediately following a crash recovery prompt will trigger the prompt again. The timer needs to properly expire in order to reset the crash count. This helps crash detection tuning (and help users reporting issues with crash detection) without having to monitor the serial line. This currently abuses the MSG_CRASH_DETECTED message by prepending the [X][Y] labels to the message, which is ok in english but might not translate that well for all languages.
This commit is contained in:
parent
9b6fca9214
commit
3a00054c55
|
|
@ -598,23 +598,18 @@ void crashdet_detected(uint8_t mask)
|
|||
{
|
||||
st_synchronize();
|
||||
static uint8_t crashDet_counter = 0;
|
||||
static uint8_t crashDet_axes = 0;
|
||||
bool automatic_recovery_after_crash = true;
|
||||
char msg[LCD_WIDTH+1] = "";
|
||||
|
||||
if (crashDet_counter++ == 0) {
|
||||
crashDetTimer.start();
|
||||
}
|
||||
else if (crashDetTimer.expired(CRASHDET_TIMER * 1000ul)){
|
||||
crashDetTimer.stop();
|
||||
crashDet_counter = 0;
|
||||
}
|
||||
else if(crashDet_counter == CRASHDET_COUNTER_MAX){
|
||||
automatic_recovery_after_crash = false;
|
||||
crashDetTimer.stop();
|
||||
crashDet_counter = 0;
|
||||
}
|
||||
else {
|
||||
crashDetTimer.start();
|
||||
}
|
||||
if (crashDetTimer.expired(CRASHDET_TIMER * 1000ul)) {
|
||||
crashDet_counter = 0;
|
||||
}
|
||||
if(++crashDet_counter >= CRASHDET_COUNTER_MAX) {
|
||||
automatic_recovery_after_crash = false;
|
||||
}
|
||||
crashDetTimer.start();
|
||||
crashDet_axes |= mask;
|
||||
|
||||
lcd_update_enable(true);
|
||||
lcd_clear();
|
||||
|
|
@ -624,18 +619,23 @@ void crashdet_detected(uint8_t mask)
|
|||
{
|
||||
eeprom_update_byte((uint8_t*)EEPROM_CRASH_COUNT_X, eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_X) + 1);
|
||||
eeprom_update_word((uint16_t*)EEPROM_CRASH_COUNT_X_TOT, eeprom_read_word((uint16_t*)EEPROM_CRASH_COUNT_X_TOT) + 1);
|
||||
strcat(msg, "X");
|
||||
}
|
||||
if (mask & Y_AXIS_MASK)
|
||||
{
|
||||
eeprom_update_byte((uint8_t*)EEPROM_CRASH_COUNT_Y, eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_Y) + 1);
|
||||
eeprom_update_word((uint16_t*)EEPROM_CRASH_COUNT_Y_TOT, eeprom_read_word((uint16_t*)EEPROM_CRASH_COUNT_Y_TOT) + 1);
|
||||
strcat(msg, "Y");
|
||||
}
|
||||
|
||||
|
||||
|
||||
lcd_update_enable(true);
|
||||
lcd_update(2);
|
||||
lcd_setstatuspgm(_T(MSG_CRASH_DETECTED));
|
||||
|
||||
// prepare the status message with the _current_ axes stauts
|
||||
strcat(msg, " ");
|
||||
strcat_P(msg, _T(MSG_CRASH_DETECTED));
|
||||
lcd_setstatus(msg);
|
||||
|
||||
gcode_G28(true, true, false); //home X and Y
|
||||
st_synchronize();
|
||||
|
||||
|
|
@ -643,7 +643,21 @@ void crashdet_detected(uint8_t mask)
|
|||
enquecommand_P(PSTR("CRASH_RECOVER"));
|
||||
}else{
|
||||
setTargetHotend(0, active_extruder);
|
||||
bool yesno = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Crash detected. Resume print?"), false);////MSG_CRASH_RESUME c=20 r=3
|
||||
|
||||
// notify the user of *all* the axes previously affected, not just the last one
|
||||
lcd_update_enable(false);
|
||||
lcd_clear();
|
||||
if (crashDet_axes & X_AXIS_MASK) lcd_putc('X');
|
||||
if (crashDet_axes & Y_AXIS_MASK) lcd_putc('Y');
|
||||
crashDet_axes = 0;
|
||||
lcd_putc(' ');
|
||||
lcd_puts_P(_T(MSG_CRASH_DETECTED));
|
||||
|
||||
// ask whether to resume printing
|
||||
lcd_set_cursor(0, 1);
|
||||
lcd_puts_P(MSG_RESUME_PRINT);
|
||||
lcd_putc('?');
|
||||
bool yesno = lcd_show_yes_no_and_wait(false);
|
||||
lcd_update_enable(true);
|
||||
if (yesno)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ const char MSG_COMMUNITY_MADE[] PROGMEM_I1 = ISTR("Community made"); ////c=18
|
|||
const char MSG_CONFIRM_NOZZLE_CLEAN[] PROGMEM_I1 = ISTR("Please clean the nozzle for calibration. Click when done."); ////c=20 r=8
|
||||
const char MSG_COOLDOWN[] PROGMEM_I1 = ISTR("Cooldown"); ////c=18
|
||||
const char MSG_CRASH[] PROGMEM_I1 = ISTR("Crash"); ////c=7
|
||||
const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=20
|
||||
const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=17 r=1
|
||||
const char MSG_CRASHDETECT[] PROGMEM_I1 = ISTR("Crash det."); ////c=13
|
||||
const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); ////c=10
|
||||
const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17
|
||||
|
|
|
|||
Loading…
Reference in New Issue