Ver código fonte

Merge pull request #50 from PavelSindler/MK2

Three digit farm numbers support added, status on demand added, temp reading disable in farm mode, fixed "shift out of range" bug in xyz calibration
PavelSindler 8 anos atrás
pai
commit
7a896b3601

+ 1 - 1
Firmware/Configuration.h

@@ -5,7 +5,7 @@
 #include "Configuration_prusa.h"
 
 // Firmware version
-#define FW_version "3.0.10"
+#define FW_version "3.0.10.1"
 
 #define FW_PRUSA3D_MAGIC "PRUSA3DFW"
 #define FW_PRUSA3D_MAGIC_LEN 10

+ 1 - 0
Firmware/Marlin.h

@@ -292,6 +292,7 @@ extern unsigned long kicktime;
 extern unsigned long total_filament_used;
 void save_statistics(unsigned long _total_filament_used, unsigned long _total_print_time);
 extern unsigned int heating_status;
+extern unsigned int status_number;
 extern unsigned int heating_status_counter;
 extern bool custom_message;
 extern unsigned int custom_message_type;

+ 37 - 28
Firmware/Marlin_main.cpp

@@ -267,6 +267,7 @@ unsigned char lang_selected = 0;
 
 bool prusa_sd_card_upload = false;
 
+unsigned int status_number = 0;
 
 unsigned long total_filament_used;
 unsigned int heating_status;
@@ -1958,7 +1959,10 @@ void process_commands()
   int8_t SilentMode;
 #endif
   if(code_seen("PRUSA")){
-	  if (code_seen("fn")) {
+		if (code_seen("PRN")) {
+		  MYSERIAL.println(status_number);
+
+		}else if (code_seen("fn")) {
 		  if (farm_mode) {
 			  MYSERIAL.println(farm_no);
 		  }
@@ -1966,7 +1970,7 @@ void process_commands()
 			  MYSERIAL.println("Not in farm mode.");
 		  }
 		  
-	}else if (code_seen("fv")) {
+		}else if (code_seen("fv")) {
         // get file version
         #ifdef SDSUPPORT
         card.openFile(strchr_pointer + 3,true);
@@ -2017,7 +2021,7 @@ void process_commands()
     }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
+		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; 
@@ -3917,22 +3921,24 @@ Sigma_Exit:
       #endif //TEMP_RESIDENCY_TIME
           if( (millis() - codenum) > 1000UL )
           { //Print Temp Reading and remaining time every 1 second while heating up/cooling down
-            SERIAL_PROTOCOLPGM("T:");
-            SERIAL_PROTOCOL_F(degHotend(tmp_extruder),1);
-            SERIAL_PROTOCOLPGM(" E:");
-            SERIAL_PROTOCOL((int)tmp_extruder);
-			
-            #ifdef TEMP_RESIDENCY_TIME
-              SERIAL_PROTOCOLPGM(" W:");
-              if(residencyStart > -1)
-              {
-                 codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL;
-                 SERIAL_PROTOCOLLN( codenum );
-              }
-              else
-              {
-                 SERIAL_PROTOCOLLN( "?" );
-              }
+			  if (!farm_mode) {
+				  SERIAL_PROTOCOLPGM("T:");
+				  SERIAL_PROTOCOL_F(degHotend(tmp_extruder), 1);
+				  SERIAL_PROTOCOLPGM(" E:");
+				  SERIAL_PROTOCOL((int)tmp_extruder);
+
+			#ifdef TEMP_RESIDENCY_TIME
+				  SERIAL_PROTOCOLPGM(" W:");
+				  if (residencyStart > -1)
+				  {
+					  codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL;
+					  SERIAL_PROTOCOLLN(codenum);
+				  }
+				  else
+				  {
+					  SERIAL_PROTOCOLLN("?");
+				  }
+			  }
             #else
               SERIAL_PROTOCOLLN("");
             #endif
@@ -3984,15 +3990,18 @@ Sigma_Exit:
         {
           if(( millis() - codenum) > 1000 ) //Print Temp Reading every 1 second while heating up.
           {
-            float tt=degHotend(active_extruder);
-            SERIAL_PROTOCOLPGM("T:");
-            SERIAL_PROTOCOL(tt);
-            SERIAL_PROTOCOLPGM(" E:");
-            SERIAL_PROTOCOL((int)active_extruder);
-            SERIAL_PROTOCOLPGM(" B:");
-            SERIAL_PROTOCOL_F(degBed(),1);
-            SERIAL_PROTOCOLLN("");
-            codenum = millis();
+			  if (!farm_mode) {
+				  float tt = degHotend(active_extruder);
+				  SERIAL_PROTOCOLPGM("T:");
+				  SERIAL_PROTOCOL(tt);
+				  SERIAL_PROTOCOLPGM(" E:");
+				  SERIAL_PROTOCOL((int)active_extruder);
+				  SERIAL_PROTOCOLPGM(" B:");
+				  SERIAL_PROTOCOL_F(degBed(), 1);
+				  SERIAL_PROTOCOLLN("");
+			  }
+				  codenum = millis();
+			  
           }
           manage_heater();
           manage_inactivity();

+ 71 - 8
Firmware/mesh_bed_calibration.cpp

@@ -412,18 +412,55 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS(
         cntr[1] = 0.f;
         float wx = 0.f;
         float wy = 0.f;
-        for (int8_t i = 0; i < 9; ++ i) {
+        for (int8_t i = 0; i < npts; ++ i) {
             float x = vec_x[0] * measured_pts[i * 2] + vec_y[0] * measured_pts[i * 2 + 1];
             float y = vec_x[1] * measured_pts[i * 2] + vec_y[1] * measured_pts[i * 2 + 1];
             float w = point_weight_x(i, y);
-            cntr[0] += w * (pgm_read_float(true_pts + i * 2) - x);
-            wx += w;
+			cntr[0] += w * (pgm_read_float(true_pts + i * 2) - x);
+			wx += w;
+			if (verbosity_level >= 20) {
+				MYSERIAL.print(i);
+				SERIAL_ECHOLNPGM("");
+				SERIAL_ECHOLNPGM("Weight_x:");
+				MYSERIAL.print(w);
+				SERIAL_ECHOLNPGM("");
+				SERIAL_ECHOLNPGM("cntr[0]:");
+				MYSERIAL.print(cntr[0]);
+				SERIAL_ECHOLNPGM("");
+				SERIAL_ECHOLNPGM("wx:");
+				MYSERIAL.print(wx);
+			}
             w = point_weight_y(i, y);
-            cntr[1] += w * (pgm_read_float(true_pts + i * 2 + 1) - y);
-            wy += w;
-        }
+			cntr[1] += w * (pgm_read_float(true_pts + i * 2 + 1) - y);
+			wy += w;
+
+			if (verbosity_level >= 20) {
+				SERIAL_ECHOLNPGM("");
+				SERIAL_ECHOLNPGM("Weight_y:");
+				MYSERIAL.print(w);
+				SERIAL_ECHOLNPGM("");
+				SERIAL_ECHOLNPGM("cntr[1]:");
+				MYSERIAL.print(cntr[1]);
+				SERIAL_ECHOLNPGM("");
+				SERIAL_ECHOLNPGM("wy:");
+				MYSERIAL.print(wy);
+				SERIAL_ECHOLNPGM("");
+				SERIAL_ECHOLNPGM("");
+			}
+		}
         cntr[0] /= wx;
         cntr[1] /= wy;
+		if (verbosity_level >= 20) {
+			SERIAL_ECHOLNPGM("");
+			SERIAL_ECHOLNPGM("Final cntr values:");
+			SERIAL_ECHOLNPGM("cntr[0]:");
+			MYSERIAL.print(cntr[0]);
+			SERIAL_ECHOLNPGM("");
+			SERIAL_ECHOLNPGM("cntr[1]:");
+			MYSERIAL.print(cntr[1]);
+			SERIAL_ECHOLNPGM("");
+		}
+
     }
     #endif
 
@@ -605,18 +642,24 @@ void world2machine_initialize()
         // Length of the vec_x shall be close to unity.
         float l = sqrt(vec_x[0] * vec_x[0] + vec_x[1] * vec_x[1]);
         if (l < 0.9 || l > 1.1) {
+			SERIAL_ECHOLNPGM("X vector length:");
+			MYSERIAL.println(l);
             SERIAL_ECHOLNPGM("Invalid bed correction matrix. Length of the X vector out of range.");
             reset = true;
         }
         // Length of the vec_y shall be close to unity.
         l = sqrt(vec_y[0] * vec_y[0] + vec_y[1] * vec_y[1]);
         if (l < 0.9 || l > 1.1) {
-            SERIAL_ECHOLNPGM("Invalid bed correction matrix. Length of the X vector out of range.");
+			SERIAL_ECHOLNPGM("Y vector length:");
+			MYSERIAL.println(l);
+            SERIAL_ECHOLNPGM("Invalid bed correction matrix. Length of the Y vector out of range.");
             reset = true;
         }
         // Correction of the zero point shall be reasonably small.
         l = sqrt(cntr[0] * cntr[0] + cntr[1] * cntr[1]);
         if (l > 15.f) {
+			SERIAL_ECHOLNPGM("Zero point correction:");
+			MYSERIAL.println(l);
             SERIAL_ECHOLNPGM("Invalid bed correction matrix. Shift out of range.");
             reset = true;
         }
@@ -1654,7 +1697,27 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level
         eeprom_update_float((float*)(EEPROM_BED_CALIBRATION_VEC_Y +0), vec_y[0]);
         eeprom_update_float((float*)(EEPROM_BED_CALIBRATION_VEC_Y +4), vec_y[1]);
     #endif
-
+		if (verbosity_level >= 10) {
+			// Length of the vec_x
+			float l = sqrt(vec_x[0] * vec_x[0] + vec_x[1] * vec_x[1]);
+			SERIAL_ECHOLNPGM("X vector length:");
+			MYSERIAL.println(l);
+
+			// Length of the vec_y
+			l = sqrt(vec_y[0] * vec_y[0] + vec_y[1] * vec_y[1]);
+			SERIAL_ECHOLNPGM("Y vector length:");
+			MYSERIAL.println(l);
+			// Zero point correction
+			l = sqrt(cntr[0] * cntr[0] + cntr[1] * cntr[1]);
+			SERIAL_ECHOLNPGM("Zero point correction:");
+			MYSERIAL.println(l);
+
+			// vec_x and vec_y shall be nearly perpendicular.
+			l = vec_x[0] * vec_y[0] + vec_x[1] * vec_y[1];
+			SERIAL_ECHOLNPGM("Perpendicularity");
+			MYSERIAL.println(fabs(l));
+			SERIAL_ECHOLNPGM("Saving bed calibration vectors to EEPROM");
+		}
         // Correct the current_position to match the transformed coordinate system after world2machine_rotation_and_skew and world2machine_shift were set.
         world2machine_update_current();
 

+ 12 - 2
Firmware/ultralcd.cpp

@@ -1874,6 +1874,7 @@ void lcd_diag_show_end_stops()
 
 
 void prusa_statistics(int _message) {
+	
 
 	switch (_message)
 	{
@@ -1883,6 +1884,7 @@ void prusa_statistics(int _message) {
 		{
 			SERIAL_ECHO("{");
 			prusa_stat_printerstatus(4);
+			status_number = 4;
 			prusa_stat_printinfo();
 			SERIAL_ECHOLN("}");
 		}
@@ -1890,6 +1892,7 @@ void prusa_statistics(int _message) {
 		{
 			SERIAL_ECHO("{");
 			prusa_stat_printerstatus(1);
+			status_number = 1;
 			SERIAL_ECHOLN("}");
 		}
 		break;
@@ -1898,6 +1901,7 @@ void prusa_statistics(int _message) {
 		farm_status = 2;
 		SERIAL_ECHO("{");
 		prusa_stat_printerstatus(2);
+		status_number = 2;
 		SERIAL_ECHOLN("}");
 		farm_timer = 1;
 		break;
@@ -1906,6 +1910,7 @@ void prusa_statistics(int _message) {
 		farm_status = 3;
 		SERIAL_ECHO("{");
 		prusa_stat_printerstatus(3);
+		status_number = 3;
 		SERIAL_ECHOLN("}");
 		farm_timer = 1;
 
@@ -1914,12 +1919,14 @@ void prusa_statistics(int _message) {
 			farm_status = 4;
 			SERIAL_ECHO("{");
 			prusa_stat_printerstatus(4);
+			status_number = 4;
 			SERIAL_ECHOLN("}");
 		}
 		else
 		{
 			SERIAL_ECHO("{");
 			prusa_stat_printerstatus(3);
+			status_number = 3;
 			SERIAL_ECHOLN("}");;
 		}
 		farm_timer = 1;
@@ -1938,14 +1945,17 @@ void prusa_statistics(int _message) {
 		break;
 	case 6:		// print done
 		SERIAL_ECHOLN("{[PRN:8]}");
+		status_number = 8;
 		farm_timer = 2;
 		break;
 	case 7:		// print done - stopped
 		SERIAL_ECHOLN("{[PRN:9]}");
+		status_number = 9;
 		farm_timer = 2;
 		break;
 	case 8:		// printer started
 		SERIAL_ECHO("{[PRN:0][PFN:");
+		status_number = 0;
 		SERIAL_ECHO(farm_no);
 		SERIAL_ECHOLN("]}");
 		farm_timer = 2;
@@ -1963,6 +1973,7 @@ void prusa_statistics(int _message) {
 		break;
     case 22: // waiting for filament change
         SERIAL_ECHOLN("{[PRN:5]}");
+		status_number = 5;
         break;
 	
 	case 90: // Error - Thermal Runaway
@@ -3166,7 +3177,7 @@ static void lcd_main_menu()
 	MENU_ITEM(submenu, MSG_UNLOAD_FILAMENT, fil_unload_menu);
 	MENU_ITEM(submenu, MSG_CHANGE_EXTR, change_extr_menu);
 	#endif
-    MENU_ITEM(submenu, MSG_SETTINGS, lcd_settings_menu);
+	MENU_ITEM(submenu, MSG_SETTINGS, lcd_settings_menu);
     if(!isPrintPaused) MENU_ITEM(submenu, MSG_MENU_CALIBRATION, lcd_calibration_menu);
   }
 
@@ -3550,7 +3561,6 @@ menu_edit_type(float, float51, ftostr51, 10)
 menu_edit_type(float, float52, ftostr52, 100)
 menu_edit_type(unsigned long, long5, ftostr5, 0.01)
 
-
 static void lcd_selftest()
 {
 	int _progress = 0;

+ 1 - 0
Firmware/ultralcd.h

@@ -31,6 +31,7 @@
 void lcd_mylang();
   bool lcd_detected(void);
 
+  
   static void lcd_selftest();
   static bool lcd_selfcheck_endstops();
   static bool lcd_selfcheck_axis(int _axis, int _travel);

+ 7 - 3
Firmware/ultralcd_implementation_hitachi_HD44780.h

@@ -757,7 +757,7 @@ static void lcd_implementation_status_screen()
 		}
 	}
     
-    // Farm number display
+	// Farm number display
 	if (farm_mode)
 	{
 		lcd_printPGM(PSTR(" F"));
@@ -775,6 +775,10 @@ static void lcd_implementation_status_screen()
         }
         
 	}
+	else {
+		lcd.setCursor(LCD_WIDTH - 8 - 2, 2);
+		lcd_printPGM(PSTR(" "));
+	}
 
 #ifdef SNMM
 		lcd_printPGM(PSTR(" E"));
@@ -783,8 +787,8 @@ static void lcd_implementation_status_screen()
 #endif
 
     //Print time elapsed
-    lcd.setCursor(LCD_WIDTH - 8 -2, 2);
-    lcd_printPGM(PSTR("  "));
+    lcd.setCursor(LCD_WIDTH - 8 -1, 2);
+    lcd_printPGM(PSTR(" "));
     lcd.print(LCD_STR_CLOCK[0]);
     if(starttime != 0)
     {