// probe the three points
Vector3 v[3];
for (int i = 0; i < 3; ++i) {
+ float z;
std::tie(x, y) = probe_points[i];
// offset moves by the probe XY offset
- float z = zprobe->probeDistance(x-std::get<X_AXIS>(this->probe_offsets), y-std::get<Y_AXIS>(this->probe_offsets));
- if(isnan(z)) return false; // probe failed
+ if(!zprobe->doProbeAt(z, x-std::get<X_AXIS>(this->probe_offsets), y-std::get<Y_AXIS>(this->probe_offsets))) return false;
+
z= zprobe->getProbeHeight() - z; // relative distance between the probe points, lower is negative z
stream->printf("DEBUG: P%d:%1.4f\n", i, z);
v[i] = Vector3(x, y, z);
return false;
}
- float z = zprobe->probeDistance(x-std::get<X_AXIS>(this->probe_offsets), y-std::get<Y_AXIS>(this->probe_offsets));
- if(isnan(z)) return false; // probe failed
+ float z;
+ if(!zprobe->doProbeAt(z, x-std::get<X_AXIS>(this->probe_offsets), y-std::get<Y_AXIS>(this->probe_offsets))) return false;
+
gcode->stream->printf("X:%1.4f Y:%1.4f Z:%1.4f\n", x, y, z);
if(isnan(last_z)) {
if(fr > this->fast_feedrate) fr = this->fast_feedrate; // unless that is greater than fast feedrate
}
- bool dir= ((mm < 0) != reverse_z); // xor
- if(reverse) dir= !dir;
-
- // absolute move to starting position
+ // absolute move back to saved starting position
coordinated_move(save_pos[0], save_pos[1], save_pos[2], fr, false);
return ok;
return run_probe_return(mm, slow_feedrate);
}
-float ZProbe::probeDistance(float x, float y)
-{
- float s;
- if(!doProbeAt(s, x, y)) return NAN;
- return s;
-}
-
void ZProbe::on_gcode_received(void *argument)
{
Gcode *gcode = static_cast<Gcode *>(argument);
bool run_probe(float& mm, float feedrate, float max_dist= -1, bool reverse= false);
bool run_probe_return(float& mm, float feedrate, float max_dist= -1, bool reverse= false);
bool doProbeAt(float &mm, float x, float y);
- float probeDistance(float x, float y);
void coordinated_move(float x, float y, float z, float feedrate, bool relative=false);
void home();