|  | @@ -913,7 +913,7 @@ error:
 | 
	
		
			
				|  |  |  #define FIND_BED_INDUCTION_SENSOR_POINT_XY_STEP  (1.f)
 | 
	
		
			
				|  |  |  #ifdef HEATBED_V2
 | 
	
		
			
				|  |  |  #define FIND_BED_INDUCTION_SENSOR_POINT_Z_STEP   (2.f)
 | 
	
		
			
				|  |  | -#define FIND_BED_INDUCTION_SENSOR_POINT_MAX_Z_ERROR  (0.01f)
 | 
	
		
			
				|  |  | +#define FIND_BED_INDUCTION_SENSOR_POINT_MAX_Z_ERROR  (0.03f)
 | 
	
		
			
				|  |  |  #else //HEATBED_V2
 | 
	
		
			
				|  |  |  #define FIND_BED_INDUCTION_SENSOR_POINT_Z_STEP   (0.2f)
 | 
	
		
			
				|  |  |  #endif //HEATBED_V2
 | 
	
	
		
			
				|  | @@ -971,45 +971,46 @@ inline bool find_bed_induction_sensor_point_xy(int verbosity_level)
 | 
	
		
			
				|  |  |  		// Continously lower the Z axis.
 | 
	
		
			
				|  |  |  		endstops_hit_on_purpose();
 | 
	
		
			
				|  |  |  		enable_z_endstop(true);
 | 
	
		
			
				|  |  | +		bool direction = false;
 | 
	
		
			
				|  |  |  		while (current_position[Z_AXIS] > -10.f && z_error > FIND_BED_INDUCTION_SENSOR_POINT_MAX_Z_ERROR) {
 | 
	
		
			
				|  |  |  			// Do nsteps_y zig-zag movements.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -			//SERIAL_ECHOPGM("z_error: ");
 | 
	
		
			
				|  |  | -			//MYSERIAL.println(z_error);
 | 
	
		
			
				|  |  | -			current_position[Y_AXIS] = y0;
 | 
	
		
			
				|  |  | +			SERIAL_ECHOPGM("z_error: ");
 | 
	
		
			
				|  |  | +			MYSERIAL.println(z_error);
 | 
	
		
			
				|  |  | +			current_position[Y_AXIS] = direction ? y1 : y0;
 | 
	
		
			
				|  |  |  			initial_z_position = current_position[Z_AXIS];
 | 
	
		
			
				|  |  | -			for (i = 0; i < (nsteps_y - 1); current_position[Y_AXIS] += (y1 - y0) / float(nsteps_y - 1), ++i) {
 | 
	
		
			
				|  |  | +			for (i = 0; i < (nsteps_y - 1); (direction == false) ? (current_position[Y_AXIS] += (y1 - y0) / float(nsteps_y - 1)) : (current_position[Y_AXIS] -= (y1 - y0) / float(nsteps_y - 1)), ++i) {
 | 
	
		
			
				|  |  |  				// Run with a slightly decreasing Z axis, zig-zag movement. Stop at the Z end-stop.
 | 
	
		
			
				|  |  |  				current_position[Z_AXIS] -= find_bed_induction_sensor_point_z_step / float(nsteps_y - 1);
 | 
	
		
			
				|  |  |  				go_xyz(dir_positive ? x1 : x0, current_position[Y_AXIS], current_position[Z_AXIS], feedrate);
 | 
	
		
			
				|  |  |  				dir_positive = !dir_positive;
 | 
	
		
			
				|  |  |  				if (endstop_z_hit_on_purpose()) {
 | 
	
		
			
				|  |  |  					update_current_position_xyz();
 | 
	
		
			
				|  |  | -					z_error = 2 * (initial_z_position - current_position[Z_AXIS]);
 | 
	
		
			
				|  |  | +					z_error = initial_z_position - current_position[Z_AXIS] + find_bed_induction_sensor_point_z_step;
 | 
	
		
			
				|  |  |  					if (z_error > FIND_BED_INDUCTION_SENSOR_POINT_MAX_Z_ERROR) {
 | 
	
		
			
				|  |  |  						find_bed_induction_sensor_point_z_step = z_error / 2;
 | 
	
		
			
				|  |  |  						current_position[Z_AXIS] += z_error;
 | 
	
		
			
				|  |  |  						enable_z_endstop(false);
 | 
	
		
			
				|  |  | -						go_xyz(x0, y0, current_position[Z_AXIS], feedrate);
 | 
	
		
			
				|  |  | +						(direction == false) ? go_xyz(x0, y0, current_position[Z_AXIS], feedrate) : go_xyz(x0, y1, current_position[Z_AXIS], feedrate);
 | 
	
		
			
				|  |  |  						enable_z_endstop(true);
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  |  					goto endloop;
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			initial_z_position = current_position[Z_AXIS];
 | 
	
		
			
				|  |  | -			for (i = 0; i < (nsteps_y - 1); current_position[Y_AXIS] -= (y1 - y0) / float(nsteps_y - 1), ++i) {
 | 
	
		
			
				|  |  | +			for (i = 0; i < (nsteps_y - 1); (direction == false) ? (current_position[Y_AXIS] -= (y1 - y0) / float(nsteps_y - 1)) : (current_position[Y_AXIS] += (y1 - y0) / float(nsteps_y - 1)), ++i) {
 | 
	
		
			
				|  |  |  				// Run with a slightly decreasing Z axis, zig-zag movement. Stop at the Z end-stop.
 | 
	
		
			
				|  |  |  				current_position[Z_AXIS] -= find_bed_induction_sensor_point_z_step / float(nsteps_y - 1);
 | 
	
		
			
				|  |  |  				go_xyz(dir_positive ? x1 : x0, current_position[Y_AXIS], current_position[Z_AXIS], feedrate);
 | 
	
		
			
				|  |  |  				dir_positive = !dir_positive;
 | 
	
		
			
				|  |  |  				if (endstop_z_hit_on_purpose()) {
 | 
	
		
			
				|  |  |  					update_current_position_xyz();
 | 
	
		
			
				|  |  | -					z_error = 2 * (initial_z_position - current_position[Z_AXIS]);
 | 
	
		
			
				|  |  | +					z_error = initial_z_position - current_position[Z_AXIS];
 | 
	
		
			
				|  |  |  					if (z_error > FIND_BED_INDUCTION_SENSOR_POINT_MAX_Z_ERROR) {
 | 
	
		
			
				|  |  |  						find_bed_induction_sensor_point_z_step = z_error / 2;
 | 
	
		
			
				|  |  |  						current_position[Z_AXIS] += z_error;
 | 
	
		
			
				|  |  |  						enable_z_endstop(false);
 | 
	
		
			
				|  |  | -						go_xyz(x0, y0, current_position[Z_AXIS], feedrate);
 | 
	
		
			
				|  |  | +						direction = !direction;
 | 
	
		
			
				|  |  | +						(direction == false) ? go_xyz(x0, y0, current_position[Z_AXIS], feedrate) : go_xyz(x0, y1, current_position[Z_AXIS], feedrate);
 | 
	
		
			
				|  |  |  						enable_z_endstop(true);
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  |  					goto endloop;
 |