diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 432d653ef..e6aa265cd 100644 --- a/Firmware/Configuration.h +++ b/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 diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index adcf8f201..99c9a5cb4 100644 --- a/Firmware/Marlin.h +++ b/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; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 41328c2e1..32e2b1f14 100644 --- a/Firmware/Marlin_main.cpp +++ b/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(); diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index 78d099209..38eb41c69 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/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(); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index c5b132ab7..b0c5c5ebc 100644 --- a/Firmware/ultralcd.cpp +++ b/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; diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index a5efbc2b5..c49b54f6f 100644 --- a/Firmware/ultralcd.h +++ b/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); diff --git a/Firmware/ultralcd_implementation_hitachi_HD44780.h b/Firmware/ultralcd_implementation_hitachi_HD44780.h index 66bfc9e9e..21f77c739 100644 --- a/Firmware/ultralcd_implementation_hitachi_HD44780.h +++ b/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) {