|
|
@ -677,8 +677,7 @@
|
|
|
|
lcd_reset_alert_level();
|
|
|
|
lcd_reset_alert_level();
|
|
|
|
LCD_MESSAGEPGM("");
|
|
|
|
LCD_MESSAGEPGM("");
|
|
|
|
lcd_quick_feedback();
|
|
|
|
lcd_quick_feedback();
|
|
|
|
|
|
|
|
lcd_external_control = false;
|
|
|
|
has_control_of_lcd_panel = false;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
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) {
|
|
|
|
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;
|
|
|
|
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
|
|
|
|
save_ubl_active_state_and_disable(); // we don't do bed level correction because we want the raw data when we probe
|
|
|
|
DEPLOY_PROBE();
|
|
|
|
DEPLOY_PROBE();
|
|
|
|
|
|
|
|
|
|
|
@ -748,12 +750,12 @@
|
|
|
|
if (do_ubl_mesh_map) display_map(g29_map_type);
|
|
|
|
if (do_ubl_mesh_map) display_map(g29_map_type);
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(NEWPANEL)
|
|
|
|
#if ENABLED(NEWPANEL)
|
|
|
|
if (ubl_lcd_clicked()) {
|
|
|
|
if (is_lcd_clicked()) {
|
|
|
|
SERIAL_PROTOCOLLNPGM("\nMesh only partially populated.\n");
|
|
|
|
SERIAL_PROTOCOLLNPGM("\nMesh only partially populated.\n");
|
|
|
|
lcd_quick_feedback();
|
|
|
|
lcd_quick_feedback();
|
|
|
|
STOW_PROBE();
|
|
|
|
STOW_PROBE();
|
|
|
|
while (ubl_lcd_clicked()) idle();
|
|
|
|
while (is_lcd_clicked()) idle();
|
|
|
|
has_control_of_lcd_panel = false;
|
|
|
|
lcd_external_control = false;
|
|
|
|
restore_ubl_active_state_and_leave();
|
|
|
|
restore_ubl_active_state_and_leave();
|
|
|
|
safe_delay(50); // Debounce the Encoder wheel
|
|
|
|
safe_delay(50); // Debounce the Encoder wheel
|
|
|
|
return;
|
|
|
|
return;
|
|
|
@ -894,11 +896,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
float unified_bed_leveling::measure_point_with_encoder() {
|
|
|
|
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
|
|
|
|
delay(50); // debounce
|
|
|
|
|
|
|
|
|
|
|
|
KEEPALIVE_STATE(PAUSED_FOR_USER);
|
|
|
|
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();
|
|
|
|
idle();
|
|
|
|
if (encoder_diff) {
|
|
|
|
if (encoder_diff) {
|
|
|
|
do_blocking_move_to_z(current_position[Z_AXIS] + 0.01 * float(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."); }
|
|
|
|
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) {
|
|
|
|
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
|
|
|
|
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);
|
|
|
|
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.");
|
|
|
|
SERIAL_PROTOCOLLNPGM("mm thick.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
has_control_of_lcd_panel = false;
|
|
|
|
lcd_external_control = false;
|
|
|
|
|
|
|
|
|
|
|
|
restore_ubl_active_state_and_leave();
|
|
|
|
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) {
|
|
|
|
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
|
|
|
|
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);
|
|
|
|
do_blocking_move_to_z(z_clearance);
|
|
|
|
|
|
|
|
|
|
|
|
KEEPALIVE_STATE(PAUSED_FOR_USER);
|
|
|
|
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
|
|
|
|
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 = 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
|
|
|
|
//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
|
|
|
|
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();
|
|
|
|
idle();
|
|
|
|
if (encoder_diff) {
|
|
|
|
if (encoder_diff) {
|
|
|
|
do_blocking_move_to_z(current_position[Z_AXIS] + float(encoder_diff) * z_step);
|
|
|
|
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
|
|
|
|
// a Press and Hold is repeated in a lot of places (including G26_Mesh_Validation.cpp). This
|
|
|
|
// should be redone and compressed.
|
|
|
|
// should be redone and compressed.
|
|
|
|
const millis_t nxt = millis() + 1500L;
|
|
|
|
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();
|
|
|
|
idle();
|
|
|
|
if (ELAPSED(millis(), nxt)) {
|
|
|
|
if (ELAPSED(millis(), nxt)) {
|
|
|
|
SERIAL_PROTOCOLLNPGM("\nMesh only partially populated.");
|
|
|
|
SERIAL_PROTOCOLLNPGM("\nMesh only partially populated.");
|
|
|
@ -1009,8 +1011,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(NEWPANEL)
|
|
|
|
#if ENABLED(NEWPANEL)
|
|
|
|
lcd_quick_feedback();
|
|
|
|
lcd_quick_feedback();
|
|
|
|
while (ubl_lcd_clicked()) idle();
|
|
|
|
while (is_lcd_clicked()) idle();
|
|
|
|
has_control_of_lcd_panel = false;
|
|
|
|
lcd_external_control = false;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
KEEPALIVE_STATE(IN_HANDLER);
|
|
|
|
KEEPALIVE_STATE(IN_HANDLER);
|
|
|
@ -1509,7 +1511,7 @@
|
|
|
|
new_z = FLOOR(new_z * 1000.0) * 0.001; // Chop off digits after the 1000ths place
|
|
|
|
new_z = FLOOR(new_z * 1000.0) * 0.001; // Chop off digits after the 1000ths place
|
|
|
|
|
|
|
|
|
|
|
|
KEEPALIVE_STATE(PAUSED_FOR_USER);
|
|
|
|
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
|
|
|
|
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
|
|
|
|
do_blocking_move_to_z(h_offset + new_z); // Move the nozzle as the point is edited
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
idle();
|
|
|
|
idle();
|
|
|
|
} while (!ubl_lcd_clicked());
|
|
|
|
} while (!is_lcd_clicked());
|
|
|
|
|
|
|
|
|
|
|
|
if (!lcd_map_control) lcd_return_to_status();
|
|
|
|
if (!lcd_map_control) lcd_return_to_status();
|
|
|
|
|
|
|
|
|
|
|
|
// The technique used here generates a race condition for the encoder click.
|
|
|
|
// 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.
|
|
|
|
// 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?
|
|
|
|
// 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
|
|
|
|
// a Press and Hold is repeated in a lot of places (including G26_Mesh_Validation.cpp). This
|
|
|
|
// should be redone and compressed.
|
|
|
|
// should be redone and compressed.
|
|
|
|
const millis_t nxt = millis() + 1500UL;
|
|
|
|
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();
|
|
|
|
idle();
|
|
|
|
if (ELAPSED(millis(), nxt)) {
|
|
|
|
if (ELAPSED(millis(), nxt)) {
|
|
|
|
lcd_return_to_status();
|
|
|
|
lcd_return_to_status();
|
|
|
|
do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES);
|
|
|
|
do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES);
|
|
|
|
LCD_MESSAGEPGM(MSG_EDITING_STOPPED);
|
|
|
|
LCD_MESSAGEPGM(MSG_EDITING_STOPPED);
|
|
|
|
|
|
|
|
|
|
|
|
while (ubl_lcd_clicked()) idle();
|
|
|
|
while (is_lcd_clicked()) idle();
|
|
|
|
|
|
|
|
|
|
|
|
goto FINE_TUNE_EXIT;
|
|
|
|
goto FINE_TUNE_EXIT;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1559,7 +1561,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
FINE_TUNE_EXIT:
|
|
|
|
FINE_TUNE_EXIT:
|
|
|
|
|
|
|
|
|
|
|
|
has_control_of_lcd_panel = false;
|
|
|
|
lcd_external_control = false;
|
|
|
|
KEEPALIVE_STATE(IN_HANDLER);
|
|
|
|
KEEPALIVE_STATE(IN_HANDLER);
|
|
|
|
|
|
|
|
|
|
|
|
if (do_ubl_mesh_map) display_map(g29_map_type);
|
|
|
|
if (do_ubl_mesh_map) display_map(g29_map_type);
|
|
|
|