|
|
@ -677,8 +677,7 @@ |
|
|
|
lcd_reset_alert_level(); |
|
|
|
LCD_MESSAGEPGM(""); |
|
|
|
lcd_quick_feedback(); |
|
|
|
|
|
|
|
has_control_of_lcd_panel = false; |
|
|
|
lcd_external_control = false; |
|
|
|
#endif |
|
|
|
|
|
|
|
return; |
|
|
@ -738,7 +737,10 @@ |
|
|
|
void unified_bed_leveling::probe_entire_mesh(const float &rx, const float &ry, const bool do_ubl_mesh_map, const bool stow_probe, bool close_or_far) { |
|
|
|
mesh_index_pair location; |
|
|
|
|
|
|
|
has_control_of_lcd_panel = true; |
|
|
|
#if ENABLED(NEWPANEL) |
|
|
|
lcd_external_control = true; |
|
|
|
#endif |
|
|
|
|
|
|
|
save_ubl_active_state_and_disable(); // we don't do bed level correction because we want the raw data when we probe
|
|
|
|
DEPLOY_PROBE(); |
|
|
|
|
|
|
@ -748,12 +750,12 @@ |
|
|
|
if (do_ubl_mesh_map) display_map(g29_map_type); |
|
|
|
|
|
|
|
#if ENABLED(NEWPANEL) |
|
|
|
if (ubl_lcd_clicked()) { |
|
|
|
if (is_lcd_clicked()) { |
|
|
|
SERIAL_PROTOCOLLNPGM("\nMesh only partially populated.\n"); |
|
|
|
lcd_quick_feedback(); |
|
|
|
STOW_PROBE(); |
|
|
|
while (ubl_lcd_clicked()) idle(); |
|
|
|
has_control_of_lcd_panel = false; |
|
|
|
while (is_lcd_clicked()) idle(); |
|
|
|
lcd_external_control = false; |
|
|
|
restore_ubl_active_state_and_leave(); |
|
|
|
safe_delay(50); // Debounce the Encoder wheel
|
|
|
|
return; |
|
|
@ -894,11 +896,11 @@ |
|
|
|
|
|
|
|
float unified_bed_leveling::measure_point_with_encoder() { |
|
|
|
|
|
|
|
while (ubl_lcd_clicked()) delay(50); // wait for user to release encoder wheel
|
|
|
|
while (is_lcd_clicked()) delay(50); // wait for user to release encoder wheel
|
|
|
|
delay(50); // debounce
|
|
|
|
|
|
|
|
KEEPALIVE_STATE(PAUSED_FOR_USER); |
|
|
|
while (!ubl_lcd_clicked()) { // we need the loop to move the nozzle based on the encoder wheel here!
|
|
|
|
while (!is_lcd_clicked()) { // we need the loop to move the nozzle based on the encoder wheel here!
|
|
|
|
idle(); |
|
|
|
if (encoder_diff) { |
|
|
|
do_blocking_move_to_z(current_position[Z_AXIS] + 0.01 * float(encoder_diff)); |
|
|
@ -912,7 +914,7 @@ |
|
|
|
static void echo_and_take_a_measurement() { SERIAL_PROTOCOLLNPGM(" and take a measurement."); } |
|
|
|
|
|
|
|
float unified_bed_leveling::measure_business_card_thickness(const float in_height) { |
|
|
|
has_control_of_lcd_panel = true; |
|
|
|
lcd_external_control = true; |
|
|
|
save_ubl_active_state_and_disable(); // Disable bed level correction for probing
|
|
|
|
|
|
|
|
do_blocking_move_to(0.5 * (MESH_MAX_X - (MESH_MIN_X)), 0.5 * (MESH_MAX_Y - (MESH_MIN_Y)), in_height); |
|
|
@ -944,7 +946,7 @@ |
|
|
|
SERIAL_PROTOCOLLNPGM("mm thick."); |
|
|
|
} |
|
|
|
|
|
|
|
has_control_of_lcd_panel = false; |
|
|
|
lcd_external_control = false; |
|
|
|
|
|
|
|
restore_ubl_active_state_and_leave(); |
|
|
|
|
|
|
@ -953,7 +955,7 @@ |
|
|
|
|
|
|
|
void unified_bed_leveling::manually_probe_remaining_mesh(const float &rx, const float &ry, const float &z_clearance, const float &thick, const bool do_ubl_mesh_map) { |
|
|
|
|
|
|
|
has_control_of_lcd_panel = true; |
|
|
|
lcd_external_control = true; |
|
|
|
|
|
|
|
save_ubl_active_state_and_disable(); // we don't do bed level correction because we want the raw data when we probe
|
|
|
|
|
|
|
@ -978,7 +980,7 @@ |
|
|
|
do_blocking_move_to_z(z_clearance); |
|
|
|
|
|
|
|
KEEPALIVE_STATE(PAUSED_FOR_USER); |
|
|
|
has_control_of_lcd_panel = true; |
|
|
|
lcd_external_control = true; |
|
|
|
|
|
|
|
if (do_ubl_mesh_map) display_map(g29_map_type); // show user where we're probing
|
|
|
|
|
|
|
@ -987,9 +989,9 @@ |
|
|
|
const float z_step = 0.01; // existing behavior: 0.01mm per click, occasionally step
|
|
|
|
//const float z_step = 1.0 / planner.axis_steps_per_mm[Z_AXIS]; // approx one step each click
|
|
|
|
|
|
|
|
while (ubl_lcd_clicked()) delay(50); // wait for user to release encoder wheel
|
|
|
|
while (is_lcd_clicked()) delay(50); // wait for user to release encoder wheel
|
|
|
|
delay(50); // debounce
|
|
|
|
while (!ubl_lcd_clicked()) { // we need the loop to move the nozzle based on the encoder wheel here!
|
|
|
|
while (!is_lcd_clicked()) { // we need the loop to move the nozzle based on the encoder wheel here!
|
|
|
|
idle(); |
|
|
|
if (encoder_diff) { |
|
|
|
do_blocking_move_to_z(current_position[Z_AXIS] + float(encoder_diff) * z_step); |
|
|
@ -997,11 +999,11 @@ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// this sequence to detect an ubl_lcd_clicked() debounce it and leave if it is
|
|
|
|
// this sequence to detect an is_lcd_clicked() debounce it and leave if it is
|
|
|
|
// a Press and Hold is repeated in a lot of places (including G26_Mesh_Validation.cpp). This
|
|
|
|
// should be redone and compressed.
|
|
|
|
const millis_t nxt = millis() + 1500L; |
|
|
|
while (ubl_lcd_clicked()) { // debounce and watch for abort
|
|
|
|
while (is_lcd_clicked()) { // debounce and watch for abort
|
|
|
|
idle(); |
|
|
|
if (ELAPSED(millis(), nxt)) { |
|
|
|
SERIAL_PROTOCOLLNPGM("\nMesh only partially populated."); |
|
|
@ -1009,8 +1011,8 @@ |
|
|
|
|
|
|
|
#if ENABLED(NEWPANEL) |
|
|
|
lcd_quick_feedback(); |
|
|
|
while (ubl_lcd_clicked()) idle(); |
|
|
|
has_control_of_lcd_panel = false; |
|
|
|
while (is_lcd_clicked()) idle(); |
|
|
|
lcd_external_control = false; |
|
|
|
#endif |
|
|
|
|
|
|
|
KEEPALIVE_STATE(IN_HANDLER); |
|
|
@ -1509,7 +1511,7 @@ |
|
|
|
new_z = FLOOR(new_z * 1000.0) * 0.001; // Chop off digits after the 1000ths place
|
|
|
|
|
|
|
|
KEEPALIVE_STATE(PAUSED_FOR_USER); |
|
|
|
has_control_of_lcd_panel = true; |
|
|
|
lcd_external_control = true; |
|
|
|
|
|
|
|
if (do_ubl_mesh_map) display_map(g29_map_type); // show the user which point is being adjusted
|
|
|
|
|
|
|
@ -1523,27 +1525,27 @@ |
|
|
|
do_blocking_move_to_z(h_offset + new_z); // Move the nozzle as the point is edited
|
|
|
|
#endif |
|
|
|
idle(); |
|
|
|
} while (!ubl_lcd_clicked()); |
|
|
|
} while (!is_lcd_clicked()); |
|
|
|
|
|
|
|
if (!lcd_map_control) lcd_return_to_status(); |
|
|
|
|
|
|
|
// The technique used here generates a race condition for the encoder click.
|
|
|
|
// It could get detected in lcd_mesh_edit (actually _lcd_mesh_fine_tune) or here.
|
|
|
|
// Let's work on specifying a proper API for the LCD ASAP, OK?
|
|
|
|
has_control_of_lcd_panel = true; |
|
|
|
lcd_external_control = true; |
|
|
|
|
|
|
|
// this sequence to detect an ubl_lcd_clicked() debounce it and leave if it is
|
|
|
|
// this sequence to detect an is_lcd_clicked() debounce it and leave if it is
|
|
|
|
// a Press and Hold is repeated in a lot of places (including G26_Mesh_Validation.cpp). This
|
|
|
|
// should be redone and compressed.
|
|
|
|
const millis_t nxt = millis() + 1500UL; |
|
|
|
while (ubl_lcd_clicked()) { // debounce and watch for abort
|
|
|
|
while (is_lcd_clicked()) { // debounce and watch for abort
|
|
|
|
idle(); |
|
|
|
if (ELAPSED(millis(), nxt)) { |
|
|
|
lcd_return_to_status(); |
|
|
|
do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES); |
|
|
|
LCD_MESSAGEPGM(MSG_EDITING_STOPPED); |
|
|
|
|
|
|
|
while (ubl_lcd_clicked()) idle(); |
|
|
|
while (is_lcd_clicked()) idle(); |
|
|
|
|
|
|
|
goto FINE_TUNE_EXIT; |
|
|
|
} |
|
|
@ -1559,7 +1561,7 @@ |
|
|
|
|
|
|
|
FINE_TUNE_EXIT: |
|
|
|
|
|
|
|
has_control_of_lcd_panel = false; |
|
|
|
lcd_external_control = false; |
|
|
|
KEEPALIVE_STATE(IN_HANDLER); |
|
|
|
|
|
|
|
if (do_ubl_mesh_map) display_map(g29_map_type); |
|
|
|