|
|
@ -107,10 +107,10 @@
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* I # Invalidate Invalidate specified number of Mesh Points. The nozzle location is used unless
|
|
|
|
* I # Invalidate Invalidate specified number of Mesh Points. The nozzle location is used unless
|
|
|
|
* the X and Y parameter are used. If no number is specified, only the closest Mesh
|
|
|
|
* the X and Y parameter are used. If no number is specified, only the closest Mesh
|
|
|
|
* point to the location is invalidated. The M parameter is available as well to produce
|
|
|
|
* point to the location is invalidated. The 'T' parameter is also available to produce
|
|
|
|
* a map after the operation. This command is useful to invalidate a portion of the
|
|
|
|
* a map after the operation. This command is useful to invalidate a portion of the
|
|
|
|
* Mesh so it can be adjusted using other tools in the Unified Bed Leveling System. When
|
|
|
|
* Mesh so it can be adjusted using other tools in the Unified Bed Leveling System. When
|
|
|
|
* attempting to invalidate an isolated bad point in the mesh, the M option will indicate
|
|
|
|
* attempting to invalidate an isolated bad point in the mesh, the 'T' option will indicate
|
|
|
|
* where the nozzle is positioned in the Mesh with (#). You can move the nozzle around on
|
|
|
|
* where the nozzle is positioned in the Mesh with (#). You can move the nozzle around on
|
|
|
|
* the bed and use this feature to select the center of the area (or cell) you want to
|
|
|
|
* the bed and use this feature to select the center of the area (or cell) you want to
|
|
|
|
* invalidate.
|
|
|
|
* invalidate.
|
|
|
@ -126,14 +126,6 @@
|
|
|
|
* L # Load * Load Mesh from the specified location in the EEPROM. Set this location as activated
|
|
|
|
* L # Load * Load Mesh from the specified location in the EEPROM. Set this location as activated
|
|
|
|
* for subsequent Load and Store operations.
|
|
|
|
* for subsequent Load and Store operations.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* O Map * Display the Mesh Map Topology.
|
|
|
|
|
|
|
|
* The parameter can be specified alone (ie. G29 O) or in combination with many of the
|
|
|
|
|
|
|
|
* other commands. The Mesh Map option works with all of the Phase
|
|
|
|
|
|
|
|
* commands (ie. G29 P4 R 5 X 50 Y100 C -.1 O) The Map parameter can also of a Map Type
|
|
|
|
|
|
|
|
* specified. A map type of 0 is the default is user readable. A map type of 1 can
|
|
|
|
|
|
|
|
* be specified and is suitable to Cut & Paste into Excel to allow graphing of the user's
|
|
|
|
|
|
|
|
* mesh.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* The P or Phase commands are used for the bulk of the work to setup a Mesh. In general, your Mesh will
|
|
|
|
* The P or Phase commands are used for the bulk of the work to setup a Mesh. In general, your Mesh will
|
|
|
|
* start off being initialized with a G29 P0 or a G29 P1. Further refinement of the Mesh happens with
|
|
|
|
* start off being initialized with a G29 P0 or a G29 P1. Further refinement of the Mesh happens with
|
|
|
|
* each additional Phase that processes it.
|
|
|
|
* each additional Phase that processes it.
|
|
|
@ -173,7 +165,7 @@
|
|
|
|
* area you are manually probing. Note that the command tries to start you in a corner
|
|
|
|
* area you are manually probing. Note that the command tries to start you in a corner
|
|
|
|
* of the bed where movement will be predictable. You can force the location to be used in
|
|
|
|
* of the bed where movement will be predictable. You can force the location to be used in
|
|
|
|
* the distance calculations by using the X and Y parameters. You may find it is helpful to
|
|
|
|
* the distance calculations by using the X and Y parameters. You may find it is helpful to
|
|
|
|
* print out a Mesh Map (G29 O) to understand where the mesh is invalidated and where
|
|
|
|
* print out a Mesh Map (G29 T) to understand where the mesh is invalidated and where
|
|
|
|
* the nozzle will need to move in order to complete the command. The C parameter is
|
|
|
|
* the nozzle will need to move in order to complete the command. The C parameter is
|
|
|
|
* available on the Phase 2 command also and indicates the search for points to measure should
|
|
|
|
* available on the Phase 2 command also and indicates the search for points to measure should
|
|
|
|
* be done based on the current location of the nozzle.
|
|
|
|
* be done based on the current location of the nozzle.
|
|
|
@ -189,7 +181,7 @@
|
|
|
|
* to get it to grasp the shim with the same force as when you measured the thickness of the
|
|
|
|
* to get it to grasp the shim with the same force as when you measured the thickness of the
|
|
|
|
* shim at the start of the command.
|
|
|
|
* shim at the start of the command.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Phase 2 allows the O (Map) parameter to be specified. This helps the user see the progression
|
|
|
|
* Phase 2 allows the T (Map) parameter to be specified. This helps the user see the progression
|
|
|
|
* of the Mesh being built.
|
|
|
|
* of the Mesh being built.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* P3 Phase 3 Fill the unpopulated regions of the Mesh with a fixed value. There are two different paths the
|
|
|
|
* P3 Phase 3 Fill the unpopulated regions of the Mesh with a fixed value. There are two different paths the
|
|
|
@ -263,6 +255,12 @@
|
|
|
|
* at a later date. The GCode output can be saved and later replayed by the host software
|
|
|
|
* at a later date. The GCode output can be saved and later replayed by the host software
|
|
|
|
* to reconstruct the current mesh on another machine.
|
|
|
|
* to reconstruct the current mesh on another machine.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
|
|
|
|
* T Topology Display the Mesh Map Topology.
|
|
|
|
|
|
|
|
* 'T' can be used alone (e.g., G29 T) or in combination with some of the other commands.
|
|
|
|
|
|
|
|
* This option works with all Phase commands (e.g., G29 P4 R 5 X 50 Y100 C -.1 O)
|
|
|
|
|
|
|
|
* This parameter can also specify a Map Type. T0 (the default) is user-readable. T1 can
|
|
|
|
|
|
|
|
* is suitable to paste into a spreadsheet for a 3D graph of the mesh.
|
|
|
|
|
|
|
|
*
|
|
|
|
* U Unlevel Perform a probe of the outer perimeter to assist in physically leveling unlevel beds.
|
|
|
|
* U Unlevel Perform a probe of the outer perimeter to assist in physically leveling unlevel beds.
|
|
|
|
* Only used for G29 P1 O U It will speed up the probing of the edge of the bed. This
|
|
|
|
* Only used for G29 P1 O U It will speed up the probing of the edge of the bed. This
|
|
|
|
* is useful when the entire bed does not need to be probed because it will be adjusted.
|
|
|
|
* is useful when the entire bed does not need to be probed because it will be adjusted.
|
|
|
@ -381,7 +379,7 @@
|
|
|
|
if (code_seen('J')) {
|
|
|
|
if (code_seen('J')) {
|
|
|
|
if (grid_size!=0) { // if not 0 it is a normal n x n grid being probed
|
|
|
|
if (grid_size!=0) { // if not 0 it is a normal n x n grid being probed
|
|
|
|
ubl.save_ubl_active_state_and_disable();
|
|
|
|
ubl.save_ubl_active_state_and_disable();
|
|
|
|
ubl.tilt_mesh_based_on_probed_grid(code_seen('O'));
|
|
|
|
ubl.tilt_mesh_based_on_probed_grid(code_seen('T'));
|
|
|
|
ubl.restore_ubl_active_state_and_leave();
|
|
|
|
ubl.restore_ubl_active_state_and_leave();
|
|
|
|
} else { // grid_size==0 which means a 3-Point leveling has been requested
|
|
|
|
} 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),
|
|
|
|
float z1 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_1_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_1_Y), false, g29_verbose_level),
|
|
|
@ -438,7 +436,7 @@
|
|
|
|
SERIAL_PROTOCOLLNPGM(").\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM(").\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ubl.probe_entire_mesh(x_pos + X_PROBE_OFFSET_FROM_EXTRUDER, y_pos + Y_PROBE_OFFSET_FROM_EXTRUDER,
|
|
|
|
ubl.probe_entire_mesh(x_pos + X_PROBE_OFFSET_FROM_EXTRUDER, y_pos + Y_PROBE_OFFSET_FROM_EXTRUDER,
|
|
|
|
code_seen('O'), code_seen('E'), code_seen('U'));
|
|
|
|
code_seen('T'), code_seen('E'), code_seen('U'));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 2: {
|
|
|
|
case 2: {
|
|
|
@ -487,7 +485,7 @@
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
manually_probe_remaining_mesh(x_pos, y_pos, height, card_thickness, code_seen('O'));
|
|
|
|
manually_probe_remaining_mesh(x_pos, y_pos, height, card_thickness, code_seen('T'));
|
|
|
|
SERIAL_PROTOCOLLNPGM("G29 P2 finished.");
|
|
|
|
SERIAL_PROTOCOLLNPGM("G29 P2 finished.");
|
|
|
|
} break;
|
|
|
|
} break;
|
|
|
|
|
|
|
|
|
|
|
@ -523,7 +521,7 @@
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// Fine Tune (i.e., Edit) the Mesh
|
|
|
|
// Fine Tune (i.e., Edit) the Mesh
|
|
|
|
//
|
|
|
|
//
|
|
|
|
fine_tune_mesh(x_pos, y_pos, code_seen('O'));
|
|
|
|
fine_tune_mesh(x_pos, y_pos, code_seen('T'));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 5: ubl.find_mean_mesh_height(); break;
|
|
|
|
case 5: ubl.find_mean_mesh_height(); break;
|
|
|
@ -601,7 +599,7 @@
|
|
|
|
SERIAL_PROTOCOLLNPGM("Done.\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("Done.\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (code_seen('O'))
|
|
|
|
if (code_seen('T'))
|
|
|
|
ubl.display_map(code_has_value() ? code_value_int() : 0);
|
|
|
|
ubl.display_map(code_has_value() ? code_value_int() : 0);
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
@ -1112,7 +1110,7 @@
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
map_type = code_seen('O') && code_has_value() ? code_value_int() : 0;
|
|
|
|
map_type = code_seen('T') && code_has_value() ? code_value_int() : 0;
|
|
|
|
if (!WITHIN(map_type, 0, 1)) {
|
|
|
|
if (!WITHIN(map_type, 0, 1)) {
|
|
|
|
SERIAL_PROTOCOLLNPGM("Invalid map type.\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("Invalid map type.\n");
|
|
|
|
return UBL_ERR;
|
|
|
|
return UBL_ERR;
|
|
|
|