aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
Diffstat (limited to 'klippy')
-rw-r--r--klippy/extras/tuning_tower.py27
1 files changed, 24 insertions, 3 deletions
diff --git a/klippy/extras/tuning_tower.py b/klippy/extras/tuning_tower.py
index 0bcfc4db..493db2c8 100644
--- a/klippy/extras/tuning_tower.py
+++ b/klippy/extras/tuning_tower.py
@@ -28,9 +28,16 @@ class TuningTower:
command = gcmd.get('COMMAND')
parameter = gcmd.get('PARAMETER')
self.start = gcmd.get_float('START', 0.)
- self.factor = gcmd.get_float('FACTOR')
+ self.factor = gcmd.get_float('FACTOR', 0.)
self.band = gcmd.get_float('BAND', 0., minval=0.)
+ self.step_delta = gcmd.get_float('STEP_DELTA', 0.)
+ self.step_height = gcmd.get_float('STEP_HEIGHT', 0., minval=0.)
self.skip = gcmd.get_float('SKIP', 0., minval=0.)
+ if self.factor and (self.step_height or self.step_delta):
+ raise gcmd.error(
+ "Cannot specify both FACTOR and STEP_DELTA/STEP_HEIGHT")
+ if (self.step_delta != 0.) != (self.step_height != 0.):
+ raise gcmd.error("Must specify both STEP_DELTA and STEP_HEIGHT")
# Enable test mode
if self.gcode.is_traditional_gcode(command):
self.command_fmt = "%s %s%%.9f" % (command, parameter)
@@ -41,8 +48,19 @@ class TuningTower:
self.last_z = -99999999.9
self.last_command_value = None
self.get_position()
- gcmd.respond_info("Starting tuning test (start=%.6f factor=%.6f)"
- % (self.start, self.factor))
+ message_parts = []
+ message_parts.append("start=%.6f" % (self.start,))
+ if self.factor:
+ message_parts.append("factor=%.6f" % (self.factor,))
+ if self.band:
+ message_parts.append("band=%.6f" % (self.band,))
+ else:
+ message_parts.append("step_delta=%.6f" % (self.step_delta,))
+ message_parts.append("step_height=%.6f" % (self.step_height,))
+ if self.skip:
+ message_parts.append("skip=%.6f" % (self.skip,))
+ gcmd.respond_info(
+ "Starting tuning test (" + " ".join(message_parts) + ")")
def get_position(self):
pos = self.normal_transform.get_position()
self.last_position = list(pos)
@@ -50,6 +68,9 @@ class TuningTower:
def calc_value(self, z):
if self.skip:
z = max(0., z - self.skip)
+ if self.step_height:
+ return self.start + \
+ self.step_delta * math.floor(z / self.step_height)
if self.band:
z = (math.floor(z / self.band) + .5) * self.band
return self.start + z * self.factor