Browse Source

first working version

PavelSindler 5 years ago
parent
commit
1ad49dc5e9

+ 24 - 1
Firmware/Marlin_main.cpp

@@ -6927,6 +6927,14 @@ Sigma_Exit:
     break;
 	case 701: //M701: load filament
 	{
+		#ifdef SNMM_V2
+		if (code_seen('E'))
+		{
+			snmm_extruder = code_value();
+		}
+		#endif
+		
+
 		gcode_M701();
 	}
 	break;
@@ -6940,7 +6948,7 @@ Sigma_Exit:
 			extr_unload(); //unload just current filament 
 		}
 		else {
-			extr_unload_all(); //unload all filaments
+			  extr_unload_all(); //unload all filaments
 		}
 #else
 #ifdef PAT9125
@@ -7061,6 +7069,21 @@ Sigma_Exit:
                   //printf_P(PSTR("waiting..\n"));
                   delay_keep_alive(100);
               }
+			  snmm_extruder = tmp_extruder; //filament change is finished
+
+		  if (*(strchr_pointer + index) == '?') { // for single material usage with mmu
+			  bool saved_e_relative_mode = axis_relative_modes[E_AXIS];
+			  if (!saved_e_relative_mode) {
+				  enquecommand_front_P(PSTR("M82")); // set extruder to relative mode
+			  }
+			  enquecommand_front_P((PSTR("G1 E7.2000 F562")));
+			  enquecommand_front_P((PSTR("G1 E14.4000 F871")));
+			  enquecommand_front_P((PSTR("G1 E36.0000 F1393")));
+			  enquecommand_front_P((PSTR("G1 E14.4000 F871")));			  
+			  if (!saved_e_relative_mode) {
+				  enquecommand_front_P(PSTR("M83")); // set extruder to relative mode
+			  }
+		  }
 #endif
 
 #ifdef SNMM

+ 104 - 36
Firmware/ultralcd.cpp

@@ -158,7 +158,7 @@ extern void crashdet_disable();
 #endif //TMC2130
 
 
-#ifdef SNMM
+#if defined (SNMM) || defined (SNMM_V2)
 uint8_t snmm_extruder = 0;
 #endif
 
@@ -4865,7 +4865,7 @@ void bowden_menu() {
 	}
 }
 
-#ifdef SNMM
+//#ifdef SNMM
 
 static char snmm_stop_print_menu() { //menu for choosing which filaments will be unloaded in stop print
 	lcd_implementation_clear();
@@ -4912,7 +4912,11 @@ static char snmm_stop_print_menu() { //menu for choosing which filaments will be
 
 char choose_extruder_menu() {
 
+#ifdef SNMM_V2
+	int items_no = 5;
+#else
 	int items_no = 4;
+#endif
 	int first = 0;
 	int enc_dif = 0;
 	char cursor_pos = 1;
@@ -4999,7 +5003,7 @@ char choose_extruder_menu() {
 
 }
 
-#endif
+//#endif
 
 char reset_menu() {
 #ifdef SNMM
@@ -5154,7 +5158,11 @@ void change_extr(int extr) { //switches multiplexer for extruders
 }
 
 static int get_ext_nr() { //reads multiplexer input pins and return current extruder number (counted from 0)
+#ifdef SNMM_V2
+	return(snmm_extruder); //update needed
+#else 
 	return(2 * READ(E_MUX1_PIN) + READ(E_MUX0_PIN));
+#endif
 }
 
 
@@ -5169,17 +5177,31 @@ void display_loading() {
 
 void extr_adj(int extruder) //loading filament for SNMM
 {
+
 #ifdef SNMM_V2
-	printf_P(PSTR("L%d \n"),extruder);
+    printf_P(PSTR("L%d \n"),extruder);
     fprintf_P(uart2io, PSTR("L%d\n"), extruder);
-	           
+	
+	//show which filament is currently loaded
+	lcd_update_enable(false);
+	lcd_implementation_clear();
+	lcd.setCursor(0, 1); lcd_printPGM(_T(MSG_LOADING_FILAMENT));
+	//if(strlen(_T(MSG_LOADING_FILAMENT))>18) lcd.setCursor(0, 1);
+	//else lcd.print(" ");
+	lcd.print(" ");
+	lcd.print(snmm_extruder + 1);
+
 	// get response
     uart2_rx_clr();
-    while (!uart2_rx_ok())
+	while (!uart2_rx_ok())
     {
       //printf_P(PSTR("waiting..\n"));
       delay_keep_alive(100);
     }
+	lcd_update_enable(true);
+	
+	
+	//lcd_return_to_status();
 #else
 
 	bool correct;
@@ -5223,26 +5245,39 @@ void extr_adj(int extruder) //loading filament for SNMM
 
 
 void extr_unload() { //unloads filament
-#ifdef SNMM_V2
-	printf_P(PSTR("U\n"));
-    fprintf_P(uart2io, PSTR("U\n"));
-	           
-	// get response
-    uart2_rx_clr();
-    while (!uart2_rx_ok())
-    {
-      //printf_P(PSTR("waiting..\n"));
-      delay_keep_alive(100);
-    }
-#else //SNMM_V2
-
-
-
+	#ifndef SNMM_V2
 	float tmp_motor[3] = DEFAULT_PWM_MOTOR_CURRENT;
 	float tmp_motor_loud[3] = DEFAULT_PWM_MOTOR_CURRENT_LOUD;
 	uint8_t SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
+	#endif
 
 	if (degHotend0() > EXTRUDE_MINTEMP) {
+		#ifdef SNMM_V2
+		st_synchronize();
+		
+		//show which filament is currently unloaded
+		lcd_update_enable(false);
+		lcd_implementation_clear();
+		lcd.setCursor(0, 1); lcd_printPGM(_T(MSG_UNLOADING_FILAMENT));
+		lcd.print(" ");
+		lcd.print(snmm_extruder + 1);
+
+		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();
+		printf_P(PSTR("U0\n"));
+		fprintf_P(uart2io, PSTR("U0\n"));
+
+		// get response
+		uart2_rx_clr();
+		while (!uart2_rx_ok())
+		{
+			//printf_P(PSTR("waiting..\n"));
+			delay_keep_alive(100);
+		}
+		lcd_update_enable(true);
+		#else //SNMM_V2
+
 		lcd_implementation_clear();
 		lcd_display_message_fullscreen_P(PSTR(""));
 		max_feedrate[E_AXIS] = 50;
@@ -5292,6 +5327,7 @@ void extr_unload() { //unloads filament
 		lcd_update_enable(true);
 		lcd_return_to_status();
 		max_feedrate[E_AXIS] = 50;
+		#endif //SNMM_V2
 	}
 	else {
 
@@ -5304,41 +5340,68 @@ void extr_unload() { //unloads filament
 		delay(2000);
 		lcd_implementation_clear();
 	}
-
-	lcd_return_to_status();
-
-
-#endif //SNMM_V2
-
+	//lcd_return_to_status();
 }
 
 //wrapper functions for loading filament
 static void extr_adj_0(){
+	#ifdef SNMM_V2
+	enquecommand_P(PSTR("M701 E0"));
+	#else
 	change_extr(0);
 	extr_adj(0);
+	#endif
 }
 static void extr_adj_1() {
+	#ifdef SNMM_V2
+	enquecommand_P(PSTR("M701 E1"));
+	#else
 	change_extr(1);
 	extr_adj(1);
+	#endif
 }
 static void extr_adj_2() {
+	#ifdef SNMM_V2
+	enquecommand_P(PSTR("M701 E2"));
+	#else
 	change_extr(2);
 	extr_adj(2);
+	#endif
 }
 static void extr_adj_3() {
+	#ifdef SNMM_V2
+	enquecommand_P(PSTR("M701 E3"));
+	#else
 	change_extr(3);
 	extr_adj(3);
+	#endif
 }
 static void extr_adj_4() {
+	#ifdef SNMM_V2
+	enquecommand_P(PSTR("M701 E4"));
+	#else
 	change_extr(4);
 	extr_adj(4);
+	#endif
 }
 
 static void load_all() {
+	#ifdef SNMM_V2
+	enquecommand_P(PSTR("M701 E0"));
+	enquecommand_P(PSTR("M701 E1"));
+	enquecommand_P(PSTR("M701 E2"));
+	enquecommand_P(PSTR("M701 E3"));
+	enquecommand_P(PSTR("M701 E4"));
+	#else
 	for (int i = 0; i < 4; i++) {
+
+		
+
 		change_extr(i);
 		extr_adj(i);
+
 	}
+	#endif
 }
 
 //wrapper functions for changing extruders
@@ -5850,20 +5913,25 @@ static void lcd_main_menu()
   } 
   else 
   {
-	#ifndef SNMM
-#ifdef PAT9125
+	#if defined (SNMM) || defined (SNMM_V2)
+	MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), fil_load_menu);
+    #ifdef SNMM_V2
+	MENU_ITEM_GCODE_P(_T(MSG_UNLOAD_FILAMENT), PSTR("M702 C"));
+    #else
+	MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), fil_unload_menu);
+	MENU_ITEM_SUBMENU_P(_i("Change extruder"), change_extr_menu);////MSG_CHANGE_EXTR c=20 r=1
+    #endif
+
+	#else
+	  #ifdef PAT9125
 	if ( ((filament_autoload_enabled == true) && (fsensor_enabled == true)))
         MENU_ITEM_SUBMENU_P(_i("AutoLoad filament"), lcd_menu_AutoLoadFilament);////MSG_AUTOLOAD_FILAMENT c=17 r=0
 	else
-#endif //PAT9125
+      #endif //PAT9125
 		MENU_ITEM_FUNCTION_P(_T(MSG_LOAD_FILAMENT), lcd_LoadFilament);
 	MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), lcd_unLoadFilament);
-	#endif
-	#if defined (SNMM) || defined (SNMM_V2)
-	MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), fil_load_menu);
-	MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), fil_unload_menu);
-	MENU_ITEM_SUBMENU_P(_i("Change extruder"), change_extr_menu);////MSG_CHANGE_EXTR c=20 r=1
-	#endif
+    #endif
+
 	MENU_ITEM_SUBMENU_P(_T(MSG_SETTINGS), lcd_settings_menu);
     if(!isPrintPaused) MENU_ITEM_SUBMENU_P(_T(MSG_MENU_CALIBRATION), lcd_calibration_menu);
 

+ 2 - 2
Firmware/ultralcd.h

@@ -136,9 +136,9 @@ extern int lcd_printf_P(const char* format, ...);
   #endif
   extern int8_t SilentModeMenu;
 
-#ifdef SNMM
+#if defined (SNMM) || defined (SNMM_V2) 
   extern uint8_t snmm_extruder;
-#endif // SNMM
+#endif // defined (SNMM) || defined (SNMM_V2)
 
   extern bool cancel_heatup;
   extern bool isPrintPaused;

+ 1 - 1
Firmware/ultralcd_implementation_hitachi_HD44780.h

@@ -851,7 +851,7 @@ if (print_sd_status)
         
 	}
 	else {
-#ifdef SNMM
+#ifdef SNMM 
 		lcd_printPGM(PSTR(" E"));
 		lcd.print(get_ext_nr() + 1);