@ -757,8 +757,8 @@
location = find_closest_mesh_point_of_type ( INVALID , lx , ly , 1 , NULL , do_furthest ) ; // the '1' says we want the location to be relative to the probe
location = find_closest_mesh_point_of_type ( INVALID , lx , ly , 1 , NULL , do_furthest ) ; // the '1' says we want the location to be relative to the probe
if ( location . x_index > = 0 & & location . y_index > = 0 ) {
if ( location . x_index > = 0 & & location . y_index > = 0 ) {
const float rawx = ubl . mesh_index_to_xpos [ location . x_index ] ,
const float rawx = pgm_read_float ( & ( ubl . mesh_index_to_xpos [ location . x_index ] ) ) ,
rawy = ubl . mesh_index_to_ypos [ location . y_index ] ;
rawy = pgm_read_float ( & ( ubl . mesh_index_to_ypos [ location . y_index ] ) ) ;
// TODO: Change to use `position_is_reachable` (for SCARA-compatibility)
// TODO: Change to use `position_is_reachable` (for SCARA-compatibility)
if ( ! WITHIN ( rawx , MIN_PROBE_X , MAX_PROBE_X ) | | ! WITHIN ( rawy , MIN_PROBE_Y , MAX_PROBE_Y ) ) {
if ( ! WITHIN ( rawx , MIN_PROBE_X , MAX_PROBE_X ) | | ! WITHIN ( rawy , MIN_PROBE_Y , MAX_PROBE_Y ) ) {
@ -905,8 +905,8 @@
// It doesn't matter if the probe can't reach the NAN location. This is a manual probe.
// It doesn't matter if the probe can't reach the NAN location. This is a manual probe.
if ( location . x_index < 0 & & location . y_index < 0 ) continue ;
if ( location . x_index < 0 & & location . y_index < 0 ) continue ;
const float rawx = ubl . mesh_index_to_xpos [ location . x_index ] ,
const float rawx = pgm_read_float ( & ( ubl . mesh_index_to_xpos [ location . x_index ] ) ) ,
rawy = ubl . mesh_index_to_ypos [ location . y_index ] ;
rawy = pgm_read_float ( & ( ubl . mesh_index_to_ypos [ location . y_index ] ) ) ;
// TODO: Change to use `position_is_reachable` (for SCARA-compatibility)
// TODO: Change to use `position_is_reachable` (for SCARA-compatibility)
if ( ! WITHIN ( rawx , X_MIN_POS , X_MAX_POS ) | | ! WITHIN ( rawy , Y_MIN_POS , Y_MAX_POS ) ) {
if ( ! WITHIN ( rawx , X_MIN_POS , X_MAX_POS ) | | ! WITHIN ( rawy , Y_MIN_POS , Y_MAX_POS ) ) {
@ -1174,7 +1174,7 @@
SERIAL_PROTOCOLPGM ( " X-Axis Mesh Points at: " ) ;
SERIAL_PROTOCOLPGM ( " X-Axis Mesh Points at: " ) ;
for ( uint8_t i = 0 ; i < GRID_MAX_POINTS_X ; i + + ) {
for ( uint8_t i = 0 ; i < GRID_MAX_POINTS_X ; i + + ) {
SERIAL_PROTOCOL_F ( LOGICAL_X_POSITION ( ubl . mesh_index_to_xpos [ i ] ) , 1 ) ;
SERIAL_PROTOCOL_F ( LOGICAL_X_POSITION ( pgm_read_float ( & ( ubl . mesh_index_to_xpos [ i ] ) ) ) , 1 ) ;
SERIAL_PROTOCOLPGM ( " " ) ;
SERIAL_PROTOCOLPGM ( " " ) ;
safe_delay ( 50 ) ;
safe_delay ( 50 ) ;
}
}
@ -1182,7 +1182,7 @@
SERIAL_PROTOCOLPGM ( " Y-Axis Mesh Points at: " ) ;
SERIAL_PROTOCOLPGM ( " Y-Axis Mesh Points at: " ) ;
for ( uint8_t i = 0 ; i < GRID_MAX_POINTS_Y ; i + + ) {
for ( uint8_t i = 0 ; i < GRID_MAX_POINTS_Y ; i + + ) {
SERIAL_PROTOCOL_F ( LOGICAL_Y_POSITION ( ubl . mesh_index_to_ypos [ i ] ) , 1 ) ;
SERIAL_PROTOCOL_F ( LOGICAL_Y_POSITION ( pgm_read_float ( & ( ubl . mesh_index_to_ypos [ i ] ) ) ) , 1 ) ;
SERIAL_PROTOCOLPGM ( " " ) ;
SERIAL_PROTOCOLPGM ( " " ) ;
safe_delay ( 50 ) ;
safe_delay ( 50 ) ;
}
}
@ -1320,8 +1320,8 @@
// We only get here if we found a Mesh Point of the specified type
// We only get here if we found a Mesh Point of the specified type
const float rawx = ubl . mesh_index_to_xpos [ i ] , // Check if we can probe this mesh location
const float rawx = pgm_read_float ( & ( ubl . mesh_index_to_xpos [ i ] ) ) , // Check if we can probe this mesh location
rawy = ubl . mesh_index_to_ypos [ j ] ;
rawy = pgm_read_float ( & ( ubl . mesh_index_to_ypos [ j ] ) ) ;
// If using the probe as the reference there are some unreachable locations.
// If using the probe as the reference there are some unreachable locations.
// Prune them from the list and ignore them till the next Phase (manual nozzle probing).
// Prune them from the list and ignore them till the next Phase (manual nozzle probing).
@ -1386,8 +1386,8 @@
bit_clear ( not_done , location . x_index , location . y_index ) ; // Mark this location as 'adjusted' so we will find a
bit_clear ( not_done , location . x_index , location . y_index ) ; // Mark this location as 'adjusted' so we will find a
// different location the next time through the loop
// different location the next time through the loop
const float rawx = ubl . mesh_index_to_xpos [ location . x_index ] ,
const float rawx = pgm_read_float ( & ( ubl . mesh_index_to_xpos [ location . x_index ] ) ) ,
rawy = ubl . mesh_index_to_ypos [ location . y_index ] ;
rawy = pgm_read_float ( & ( ubl . mesh_index_to_ypos [ location . y_index ] ) ) ;
// TODO: Change to use `position_is_reachable` (for SCARA-compatibility)
// TODO: Change to use `position_is_reachable` (for SCARA-compatibility)
if ( ! WITHIN ( rawx , X_MIN_POS , X_MAX_POS ) | | ! WITHIN ( rawy , Y_MIN_POS , Y_MAX_POS ) ) { // In theory, we don't need this check.
if ( ! WITHIN ( rawx , X_MIN_POS , X_MAX_POS ) | | ! WITHIN ( rawy , Y_MIN_POS , Y_MAX_POS ) ) { // In theory, we don't need this check.
@ -1482,7 +1482,8 @@
//find min & max probeable points in the mesh
//find min & max probeable points in the mesh
for ( xCount = 0 ; xCount < GRID_MAX_POINTS_X ; xCount + + ) {
for ( xCount = 0 ; xCount < GRID_MAX_POINTS_X ; xCount + + ) {
for ( yCount = 0 ; yCount < GRID_MAX_POINTS_Y ; yCount + + ) {
for ( yCount = 0 ; yCount < GRID_MAX_POINTS_Y ; yCount + + ) {
if ( WITHIN ( ubl . mesh_index_to_xpos [ xCount ] , MIN_PROBE_X , MAX_PROBE_X ) & & WITHIN ( ubl . mesh_index_to_ypos [ yCount ] , MIN_PROBE_Y , MAX_PROBE_Y ) ) {
if ( WITHIN ( pgm_read_float ( & ( ubl . mesh_index_to_xpos [ xCount ] ) ) , MIN_PROBE_X , MAX_PROBE_X ) & &
WITHIN ( pgm_read_float ( & ( ubl . mesh_index_to_ypos [ yCount ] ) ) , MIN_PROBE_Y , MAX_PROBE_Y ) ) {
NOMORE ( x_min , xCount ) ;
NOMORE ( x_min , xCount ) ;
NOLESS ( x_max , xCount ) ;
NOLESS ( x_max , xCount ) ;
NOMORE ( y_min , yCount ) ;
NOMORE ( y_min , yCount ) ;
@ -1577,11 +1578,12 @@
}
}
//SERIAL_ECHOPAIR("\nCheckpoint: ", 5);
//SERIAL_ECHOPAIR("\nCheckpoint: ", 5);
const float probeX = ubl . mesh_index_to_xpos [ grid_G_index_to_xpos [ xCount ] ] , //where we want the probe to be
const float probeX = pgm_read_float ( & ( ubl . mesh_index_to_xpos [ grid_G_index_to_xpos [ xCount ] ] ) ) , //where we want the probe to be
probeY = ubl . mesh_index_to_ypos [ grid_G_index_to_ypos [ yCount ] ] ;
probeY = pgm_read_float ( & ( ubl . mesh_index_to_ypos [ grid_G_index_to_ypos [ yCount ] ] ) ) ;
//SERIAL_ECHOPAIR("\nCheckpoint: ", 6);
//SERIAL_ECHOPAIR("\nCheckpoint: ", 6);
const float measured_z = probe_pt ( LOGICAL_X_POSITION ( probeX ) , LOGICAL_Y_POSITION ( probeY ) , code_seen ( ' E ' ) , ( code_seen ( ' V ' ) & & code_has_value ( ) ) ? code_value_int ( ) : 0 ) ; // takes into account the offsets
const float measured_z = probe_pt ( LOGICAL_X_POSITION ( probeX ) , LOGICAL_Y_POSITION ( probeY ) , code_seen ( ' E ' ) ,
( code_seen ( ' V ' ) & & code_has_value ( ) ) ? code_value_int ( ) : 0 ) ; // takes into account the offsets
//SERIAL_ECHOPAIR("\nmeasured_z: ", measured_z);
//SERIAL_ECHOPAIR("\nmeasured_z: ", measured_z);
@ -1595,7 +1597,7 @@
restore_ubl_active_state_and_leave ( ) ;
restore_ubl_active_state_and_leave ( ) ;
// ?? ubl.has_control_of_lcd_panel = true;
// ?? ubl.has_control_of_lcd_panel = true;
//do_blocking_move_to_xy(ubl.mesh_index_to_xpos[grid_G_index_to_xpos[0]], ubl.mesh_index_to_ypos[grid_G_index_to_ypos[0]] );
//do_blocking_move_to_xy(pgm_read_float(&(ubl.mesh_index_to_xpos[grid_G_index_to_xpos[0]])),pgm_read_float(&(ubl.mesh_index_to_ypos[grid_G_index_to_ypos[0]])) );
// least squares code
// least squares code
double xxx5 [ ] = { 0 , 50 , 100 , 150 , 200 , 20 , 70 , 120 , 165 , 195 , 0 , 50 , 100 , 150 , 200 , 0 , 55 , 100 , 150 , 200 , 0 , 65 , 100 , 150 , 205 } ,
double xxx5 [ ] = { 0 , 50 , 100 , 150 , 200 , 20 , 70 , 120 , 165 , 195 , 0 , 50 , 100 , 150 , 200 , 0 , 55 , 100 , 150 , 200 , 0 , 65 , 100 , 150 , 205 } ,