diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 34b1566160..90a7b6aa2b 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -4788,12 +4788,12 @@ void home_all_axes() { gcode_G28(true); } // Retain the last probe position xProbe = LOGICAL_X_POSITION(points[i].x); yProbe = LOGICAL_Y_POSITION(points[i].y); - measured_z = points[i].z = faux ? 0.001 * random(-100, 101) : probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level); - } - - if (isnan(measured_z)) { - planner.abl_enabled = abl_should_enable; - return; + measured_z = faux ? 0.001 * random(-100, 101) : probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level); + if (isnan(measured_z)) { + planner.abl_enabled = abl_should_enable; + return; + } + points[i].z = measured_z; } if (!dryrun) { @@ -5066,9 +5066,11 @@ void home_all_axes() { gcode_G28(true); } const float measured_z = probe_pt(xpos, ypos, !code_seen('S') || code_value_bool(), 1); - SERIAL_PROTOCOLPAIR("Bed X: ", FIXFLOAT(xpos)); - SERIAL_PROTOCOLPAIR(" Y: ", FIXFLOAT(ypos)); - SERIAL_PROTOCOLLNPAIR(" Z: ", FIXFLOAT(measured_z)); + if (!isnan(measured_z)) { + SERIAL_PROTOCOLPAIR("Bed X: ", FIXFLOAT(xpos)); + SERIAL_PROTOCOLPAIR(" Y: ", FIXFLOAT(ypos)); + SERIAL_PROTOCOLLNPAIR(" Z: ", FIXFLOAT(measured_z)); + } clean_up_after_endstop_or_probe_move(); @@ -5215,13 +5217,13 @@ void home_all_axes() { gcode_G28(true); } if (!do_all_positions && !do_circle_x3) { // probe the center setup_for_endstop_or_probe_move(); - z_at_pt[0] += probe_pt(0.0, 0.0 , true, 1); + z_at_pt[0] += probe_pt(0.0, 0.0 , true, 1); // TODO: Needs error handling clean_up_after_endstop_or_probe_move(); } if (probe_center_plus_3) { // probe extra center points for (int8_t axis = probe_center_plus_6 ? 11 : 9; axis > 0; axis -= probe_center_plus_6 ? 2 : 4) { setup_for_endstop_or_probe_move(); - z_at_pt[0] += probe_pt( + z_at_pt[0] += probe_pt( // TODO: Needs error handling cos(RADIANS(180 + 30 * axis)) * (0.1 * delta_calibration_radius), sin(RADIANS(180 + 30 * axis)) * (0.1 * delta_calibration_radius), true, 1); clean_up_after_endstop_or_probe_move(); @@ -5237,7 +5239,7 @@ void home_all_axes() { gcode_G28(true); } do_circle_x2 ? (zig_zag ? 0.5 : 0.0) : 0); for (float circles = -offset_circles ; circles <= offset_circles; circles++) { setup_for_endstop_or_probe_move(); - z_at_pt[axis] += probe_pt( + z_at_pt[axis] += probe_pt( // TODO: Needs error handling cos(RADIANS(180 + 30 * axis)) * delta_calibration_radius * (1 + circles * 0.1 * (zig_zag ? 1 : -1)), sin(RADIANS(180 + 30 * axis)) * delta_calibration_radius * @@ -6417,7 +6419,8 @@ inline void gcode_M42() { setup_for_endstop_or_probe_move(); // Move to the first point, deploy, and probe - probe_pt(X_probe_location, Y_probe_location, stow_probe_after_each, verbose_level); + const float t = probe_pt(X_probe_location, Y_probe_location, stow_probe_after_each, verbose_level); + if (isnan(t)) return; randomSeed(millis()); diff --git a/Marlin/language_en.h b/Marlin/language_en.h index 7dd2edf0af..fefc41082e 100644 --- a/Marlin/language_en.h +++ b/Marlin/language_en.h @@ -455,16 +455,16 @@ #define MSG_CONTRAST _UxGT("LCD contrast") #endif #ifndef MSG_STORE_EEPROM - #define MSG_STORE_EEPROM _UxGT("Store memory") + #define MSG_STORE_EEPROM _UxGT("Store settings") #endif #ifndef MSG_LOAD_EEPROM - #define MSG_LOAD_EEPROM _UxGT("Load memory") + #define MSG_LOAD_EEPROM _UxGT("Load settings") #endif #ifndef MSG_RESTORE_FAILSAFE #define MSG_RESTORE_FAILSAFE _UxGT("Restore failsafe") #endif #ifndef MSG_INIT_EEPROM - #define MSG_INIT_EEPROM _UxGT("Initalize Memory") + #define MSG_INIT_EEPROM _UxGT("Initialize EEPROM") #endif #ifndef MSG_REFRESH #define MSG_REFRESH _UxGT("Refresh") diff --git a/Marlin/ubl_G29.cpp b/Marlin/ubl_G29.cpp index 09a86c3a3d..5f20c59b25 100644 --- a/Marlin/ubl_G29.cpp +++ b/Marlin/ubl_G29.cpp @@ -393,19 +393,24 @@ ubl.save_ubl_active_state_and_disable(); ubl.tilt_mesh_based_on_probed_grid(code_seen('T')); ubl.restore_ubl_active_state_and_leave(); - } else { // grid_size==0 which means a 3-Point leveling has been requested - float z1 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_1_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_1_Y), false, g29_verbose_level), - z2 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_2_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_2_Y), false, g29_verbose_level), - z3 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_3_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_3_Y), true, g29_verbose_level); + } + else { // grid_size == 0 : A 3-Point leveling has been requested + float z3, z2, z1 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_1_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_1_Y), false, g29_verbose_level); + if (!isnan(z1)) { + z2 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_2_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_2_Y), false, g29_verbose_level); + if (!isnan(z2)) + z3 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_3_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_3_Y), true, g29_verbose_level); + } - if ( isnan(z1) || isnan(z2) || isnan(z3)) { // probe_pt will return NAN if unreachable + if (isnan(z1) || isnan(z2) || isnan(z3)) { // probe_pt will return NAN if unreachable SERIAL_ERROR_START; SERIAL_ERRORLNPGM("Attempt to probe off the bed."); goto LEAVE; } - // We need to adjust z1, z2, z3 by the Mesh Height at these points. Just because they are non-zero doesn't mean - // the Mesh is tilted! (We need to compensate each probe point by what the Mesh says that location's height is) + // Adjust z1, z2, z3 by the Mesh Height at these points. Just because they're non-zero + // doesn't mean the Mesh is tilted! (Compensate each probe point by what the Mesh says + // its height is.) ubl.save_ubl_active_state_and_disable(); z1 -= ubl.get_z_correction(LOGICAL_X_POSITION(UBL_PROBE_PT_1_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_1_Y)) /* + zprobe_zoffset */ ; @@ -706,7 +711,7 @@ const float mean = sum / n; // - // Now do the sumation of the squares of difference from mean + // Sum the squares of difference from mean // float sum_of_diff_squared = 0.0; for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++) @@ -769,12 +774,13 @@ const float rawx = pgm_read_float(&ubl.mesh_index_to_xpos[location.x_index]), rawy = pgm_read_float(&ubl.mesh_index_to_ypos[location.y_index]); - const float measured_z = probe_pt(LOGICAL_X_POSITION(rawx), LOGICAL_Y_POSITION(rawy), stow_probe, g29_verbose_level); + const float measured_z = probe_pt(LOGICAL_X_POSITION(rawx), LOGICAL_Y_POSITION(rawy), stow_probe, g29_verbose_level); // TODO: Needs error handling ubl.z_values[location.x_index][location.y_index] = measured_z; } if (do_ubl_mesh_map) ubl.display_map(map_type); - } while ((location.x_index >= 0) && (--max_iterations)); + + } while (location.x_index >= 0 && --max_iterations); STOW_PROBE(); ubl.restore_ubl_active_state_and_leave(); @@ -1547,7 +1553,7 @@ const float x = float(x_min) + ix * dx; for (int8_t iy = 0; iy < grid_size; iy++) { const float y = float(y_min) + dy * (zig_zag ? grid_size - 1 - iy : iy); - float measured_z = probe_pt(LOGICAL_X_POSITION(x), LOGICAL_Y_POSITION(y), code_seen('E'), g29_verbose_level); + float measured_z = probe_pt(LOGICAL_X_POSITION(x), LOGICAL_Y_POSITION(y), code_seen('E'), g29_verbose_level); // TODO: Needs error handling #if ENABLED(DEBUG_LEVELING_FEATURE) if (DEBUGGING(LEVELING)) { SERIAL_CHAR('('); diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index cfeb0b72be..ac702737b2 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -1289,7 +1289,7 @@ void kill_screen(const char* lcd_msg) { void lcd_preheat_m2_bedonly() { _lcd_preheat(0, 0, lcd_preheat_bed_temp[1], lcd_preheat_fan_speed[1]); } #endif - #if TEMP_SENSOR_0 != 0 && (TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_BED != 0) + #if TEMP_SENSOR_0 != 0 && (TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_4 != 0 || TEMP_SENSOR_BED != 0) void lcd_preheat_m1_menu() { START_MENU(); @@ -1395,7 +1395,7 @@ void kill_screen(const char* lcd_msg) { END_MENU(); } - #endif // TEMP_SENSOR_0 && (TEMP_SENSOR_1 || TEMP_SENSOR_2 || TEMP_SENSOR_3 || TEMP_SENSOR_BED) + #endif // TEMP_SENSOR_0 && (TEMP_SENSOR_1 || TEMP_SENSOR_2 || TEMP_SENSOR_3 || TEMP_SENSOR_4 || TEMP_SENSOR_BED) void lcd_cooldown() { #if FAN_COUNT > 0 @@ -2075,18 +2075,14 @@ void kill_screen(const char* lcd_msg) { MENU_ITEM(gcode, MSG_DISABLE_STEPPERS, PSTR("M84")); // - // Preheat PLA - // Preheat ABS + // Change filament // - #if TEMP_SENSOR_0 != 0 + #if ENABLED(FILAMENT_CHANGE_FEATURE) + if (!thermalManager.tooColdToExtrude(active_extruder)) + MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change); + #endif - // - // Change filament - // - #if ENABLED(FILAMENT_CHANGE_FEATURE) - if (!thermalManager.tooColdToExtrude(active_extruder)) - MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change); - #endif + #if TEMP_SENSOR_0 != 0 // // Cooldown @@ -2101,7 +2097,7 @@ void kill_screen(const char* lcd_msg) { // // Preheat for Material 1 and 2 // - #if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_BED != 0 + #if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_4 != 0 || TEMP_SENSOR_BED != 0 MENU_ITEM(submenu, MSG_PREHEAT_1, lcd_preheat_m1_menu); MENU_ITEM(submenu, MSG_PREHEAT_2, lcd_preheat_m2_menu); #else @@ -2497,7 +2493,7 @@ void kill_screen(const char* lcd_msg) { MENU_ITEM(function, MSG_STORE_EEPROM, lcd_store_settings); MENU_ITEM(function, MSG_LOAD_EEPROM, lcd_load_settings); MENU_ITEM(function, MSG_RESTORE_FAILSAFE, lcd_factory_settings); - MENU_ITEM(gcode, MSG_INIT_EEPROM, PSTR("M502\nM500\nM501")); + MENU_ITEM(gcode, MSG_INIT_EEPROM, PSTR("M502\nM500")); // TODO: Add "Are You Sure?" step #endif END_MENU(); } @@ -3145,6 +3141,15 @@ void kill_screen(const char* lcd_msg) { STATIC_ITEM(MSG_INFO_MAX_TEMP ": " STRINGIFY(HEATER_3_MAXTEMP), false); #endif + #if TEMP_SENSOR_4 != 0 + #undef THERMISTOR_ID + #define THERMISTOR_ID TEMP_SENSOR_4 + #include "thermistornames.h" + STATIC_ITEM("T4: " THERMISTOR_NAME, false, true); + STATIC_ITEM(MSG_INFO_MIN_TEMP ": " STRINGIFY(HEATER_4_MINTEMP), false); + STATIC_ITEM(MSG_INFO_MAX_TEMP ": " STRINGIFY(HEATER_4_MAXTEMP), false); + #endif + #if TEMP_SENSOR_BED != 0 #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_BED