Fix "Stop Print" function in the LCD menu
When one hit "Stop Print" option in LCD menu, the command buffer was not cleared. The printer keep moving until the buffer has been emptied. Actually I could not clear the command buffer as well.. I don't know why, it doesnt work as expected. I need to implement a routine inside Stepper ISR to handle such situation.
This commit is contained in:
parent
a534ac197a
commit
e650d4044e
|
@ -504,7 +504,6 @@ void CardReader::printingHasFinished() {
|
||||||
startFileprint();
|
startFileprint();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
quickStop();
|
|
||||||
file.close();
|
file.close();
|
||||||
sdprinting = false;
|
sdprinting = false;
|
||||||
if (SD_FINISHED_STEPPERRELEASE) {
|
if (SD_FINISHED_STEPPERRELEASE) {
|
||||||
|
|
|
@ -46,6 +46,7 @@ block_t *current_block; // A pointer to the block currently being traced
|
||||||
|
|
||||||
// Variables used by The Stepper Driver Interrupt
|
// Variables used by The Stepper Driver Interrupt
|
||||||
static unsigned char out_bits; // The next stepping-bits to be output
|
static unsigned char out_bits; // The next stepping-bits to be output
|
||||||
|
static unsigned int cleaning_buffer_counter;
|
||||||
|
|
||||||
// Counter variables for the bresenham line tracer
|
// Counter variables for the bresenham line tracer
|
||||||
static long counter_x, counter_y, counter_z, counter_e;
|
static long counter_x, counter_y, counter_z, counter_e;
|
||||||
|
@ -346,6 +347,17 @@ FORCE_INLINE void trapezoid_generator_reset() {
|
||||||
// "The Stepper Driver Interrupt" - This timer interrupt is the workhorse.
|
// "The Stepper Driver Interrupt" - This timer interrupt is the workhorse.
|
||||||
// It pops blocks from the block_buffer and executes them by pulsing the stepper pins appropriately.
|
// It pops blocks from the block_buffer and executes them by pulsing the stepper pins appropriately.
|
||||||
ISR(TIMER1_COMPA_vect) {
|
ISR(TIMER1_COMPA_vect) {
|
||||||
|
|
||||||
|
if(cleaning_buffer_counter)
|
||||||
|
{
|
||||||
|
current_block = NULL;
|
||||||
|
plan_discard_current_block();
|
||||||
|
if ((cleaning_buffer_counter == 1) && (SD_FINISHED_STEPPERRELEASE)) enquecommands_P(PSTR(SD_FINISHED_RELEASECOMMAND));
|
||||||
|
cleaning_buffer_counter--;
|
||||||
|
OCR1A = 200;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// If there is no current block, attempt to pop one from the buffer
|
// If there is no current block, attempt to pop one from the buffer
|
||||||
if (!current_block) {
|
if (!current_block) {
|
||||||
// Anything in the buffer?
|
// Anything in the buffer?
|
||||||
|
@ -972,6 +984,7 @@ void finishAndDisableSteppers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void quickStop() {
|
void quickStop() {
|
||||||
|
cleaning_buffer_counter = 5000;
|
||||||
DISABLE_STEPPER_DRIVER_INTERRUPT();
|
DISABLE_STEPPER_DRIVER_INTERRUPT();
|
||||||
while (blocks_queued()) plan_discard_current_block();
|
while (blocks_queued()) plan_discard_current_block();
|
||||||
current_block = NULL;
|
current_block = NULL;
|
||||||
|
|
|
@ -349,16 +349,11 @@ static void lcd_sdcard_pause() { card.pauseSDPrint(); }
|
||||||
static void lcd_sdcard_resume() { card.startFileprint(); }
|
static void lcd_sdcard_resume() { card.startFileprint(); }
|
||||||
|
|
||||||
static void lcd_sdcard_stop() {
|
static void lcd_sdcard_stop() {
|
||||||
|
quickStop();
|
||||||
card.sdprinting = false;
|
card.sdprinting = false;
|
||||||
card.closefile();
|
card.closefile();
|
||||||
quickStop();
|
|
||||||
if (SD_FINISHED_STEPPERRELEASE) {
|
|
||||||
enquecommands_P(PSTR(SD_FINISHED_RELEASECOMMAND));
|
|
||||||
}
|
|
||||||
autotempShutdown();
|
autotempShutdown();
|
||||||
|
|
||||||
cancel_heatup = true;
|
cancel_heatup = true;
|
||||||
|
|
||||||
lcd_setstatus(MSG_PRINT_ABORTED);
|
lcd_setstatus(MSG_PRINT_ABORTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue