ソースを参照

eject filament allowed only when nozzle is hot (there can be filament loaded in printer nozzle)

PavelSindler 6 年 前
コミット
8a453e65f8
1 ファイル変更29 行追加5 行削除
  1. 29 5
      Firmware/mmu.cpp

+ 29 - 5
Firmware/mmu.cpp

@@ -954,13 +954,37 @@ void mmu_eject_filament(uint8_t filament, bool recover)
 {
 	if (filament < 5) 
 	{
-		mmu_command(MMU_CMD_E0 + filament);
-		manage_response(false, false);
-		if (recover)
+
+		if (degHotend0() > EXTRUDE_MINTEMP)
 		{
-			lcd_show_fullscreen_message_and_wait_P(_i("Please remove filament and then press the knob."));
-			mmu_command(MMU_CMD_R0);
+			st_synchronize();
+			lcd_update_enable(false);
+			lcd_clear();
+			lcd_set_cursor(0, 1); lcd_puts_P(_i("Ejecting filament"));
+			current_position[E_AXIS] -= 80;
+			plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2500 / 60, active_extruder);
+			st_synchronize();
+
+			lcd_update_enable(true);
+
+			mmu_command(MMU_CMD_E0 + filament);
 			manage_response(false, false);
+			if (recover)
+			{
+				lcd_show_fullscreen_message_and_wait_P(_i("Please remove filament and then press the knob."));
+				mmu_command(MMU_CMD_R0);
+				manage_response(false, false);
+			}
+		}
+		else
+		{
+			lcd_clear();
+			lcd_set_cursor(0, 0);
+			lcd_puts_P(_T(MSG_ERROR));
+			lcd_set_cursor(0, 2);
+			lcd_puts_P(_T(MSG_PREHEAT_NOZZLE));
+			delay(2000);
+			lcd_clear();
 		}
 	}
 	else