aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/output_pin.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2020-09-26 20:52:42 -0400
committerKevin O'Connor <kevin@koconnor.net>2020-09-26 20:55:56 -0400
commit55e20f2c198ae45485d714b4588fcf6768bc6165 (patch)
tree48855a33f0b96d7821a297035c432af5df047c26 /klippy/extras/output_pin.py
parent27cefb2b388b668a3747451ab28b9b2a544bb242 (diff)
downloadkutter-55e20f2c198ae45485d714b4588fcf6768bc6165.tar.gz
kutter-55e20f2c198ae45485d714b4588fcf6768bc6165.tar.xz
kutter-55e20f2c198ae45485d714b4588fcf6768bc6165.zip
mcu: Add support for changing cycle_time in set_pwm()
Signed-off-by: Guy Shapira <gayuha@gmail.com> Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras/output_pin.py')
-rw-r--r--klippy/extras/output_pin.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/klippy/extras/output_pin.py b/klippy/extras/output_pin.py
index 92c055fd..549c788b 100644
--- a/klippy/extras/output_pin.py
+++ b/klippy/extras/output_pin.py
@@ -17,11 +17,12 @@ class PrinterOutputPin:
hardware_pwm = config.getboolean('hardware_pwm', False)
self.mcu_pin.setup_cycle_time(cycle_time, hardware_pwm)
self.scale = config.getfloat('scale', 1., above=0.)
+ self.last_cycle_time = self.default_cycle_time = cycle_time
else:
self.mcu_pin = ppins.setup_pin('digital_out', config.get('pin'))
self.scale = 1.
self.mcu_pin.setup_max_duration(0.)
- self.last_value_time = 0.
+ self.last_print_time = 0.
static_value = config.getfloat('static_value', None,
minval=0., maxval=self.scale)
if static_value is not None:
@@ -45,18 +46,23 @@ class PrinterOutputPin:
def cmd_SET_PIN(self, gcmd):
value = gcmd.get_float('VALUE', minval=0., maxval=self.scale)
value /= self.scale
- if value == self.last_value:
- return
print_time = self.printer.lookup_object('toolhead').get_last_move_time()
- print_time = max(print_time, self.last_value_time + PIN_MIN_TIME)
+ print_time = max(print_time, self.last_print_time + PIN_MIN_TIME)
if self.is_pwm:
- self.mcu_pin.set_pwm(print_time, value)
+ cycle_time = gcmd.get_float('CYCLE_TIME', self.default_cycle_time,
+ above=0.)
+ if value == self.last_value and cycle_time == self.last_cycle_time:
+ return
+ self.mcu_pin.set_pwm(print_time, value, cycle_time)
+ self.last_cycle_time = cycle_time
else:
+ if value == self.last_value:
+ return
if value not in [0., 1.]:
raise gcmd.error("Invalid pin value")
self.mcu_pin.set_digital(print_time, value)
self.last_value = value
- self.last_value_time = print_time
+ self.last_print_time = print_time
def load_config_prefix(config):
return PrinterOutputPin(config)