From 1bdf705524c4ac32829515e2919c543134a29076 Mon Sep 17 00:00:00 2001 From: alocin73 <64709177+alocin73@users.noreply.github.com> Date: Thu, 20 Aug 2020 00:58:49 +0200 Subject: [PATCH] hall_filament_width_sensor: Fix Flow update before next pending_position #3184 (#3198) After reading the first item of self.filament_array, filament_width is updated back to self.nominal_filament_dia or self.diameter instead of retaining the value until next pending_position. Updated Filament Menu Template. Signed-off-by: Nicola Falciani --- docs/HallFilamentWidthSensor.md | 29 +++++++-------------- klippy/extras/hall_filament_width_sensor.py | 21 ++++++++++----- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/docs/HallFilamentWidthSensor.md b/docs/HallFilamentWidthSensor.md index efb62128..85f47c2c 100644 --- a/docs/HallFilamentWidthSensor.md +++ b/docs/HallFilamentWidthSensor.md @@ -92,26 +92,17 @@ Sensor generates two analog output based on calculated filament width. Sum of ou **hall_filament_width_sensor.is_active** Sensor on or off ## Template for menu variables - [menu __filament_width_current] - type: item - name: "Dia:{0:4.2f} mm" - parameter: hall_filament_width_sensor.Diameter + [menu __main __filament __width_current] + type: command + enable: {'hall_filament_width_sensor' in printer} + name: Dia: {'%.2F' % printer.hall_filament_width_sensor.Diameter} + index: 0 - [menu __filament_raw_width_current] - type: item - name: "RAW:{0:4.0f}" - parameter: hall_filament_width_sensor.Raw - - [menu __filament] - type: list - name: Filament - items: - __temp __hotend0_current, __temp __hotend0_target - .__unload - .__load - .__feed - __filament_width_current - __filament_raw_width_current + [menu __main __filament __raw_width_current] + type: command + enable: {'hall_filament_width_sensor' in printer} + name: Raw: {'%4.0F' % printer.hall_filament_width_sensor.Raw} + index: 1 ## Calibration procedure Insert first calibration rod (1.5 mm size) get first raw sensor value diff --git a/klippy/extras/hall_filament_width_sensor.py b/klippy/extras/hall_filament_width_sensor.py index b01b69ac..213eba74 100644 --- a/klippy/extras/hall_filament_width_sensor.py +++ b/klippy/extras/hall_filament_width_sensor.py @@ -40,6 +40,8 @@ class HallFilamentWidthSensor: self.filament_array = [] self.lastFilamentWidthReading = 0 self.lastFilamentWidthReading2 = 0 + self.firstExtruderUpdatePosition = 0 + self.filament_width = self.nominal_filament_dia # printer objects self.toolhead = self.ppins = self.mcu_adc = None self.printer.register_event_handler("klippy:ready", self.handle_ready) @@ -112,6 +114,8 @@ class HallFilamentWidthSensor: # add first item to array self.filament_array.append([self.measurement_delay + last_epos, self.diameter]) + self.firstExtruderUpdatePosition = (self.measurement_delay + + last_epos) def extrude_factor_update_event(self, eventtime): # Update extrude factor @@ -130,15 +134,18 @@ class HallFilamentWidthSensor: if pending_position <= last_epos: # Get first item in filament_array queue item = self.filament_array.pop(0) - filament_width = item[1] - elif self.use_current_dia_while_delay: - filament_width = self.diameter + self.filament_width = item[1] else: - filament_width = self.nominal_filament_dia - if ((filament_width <= self.max_diameter) - and (filament_width >= self.min_diameter)): + if ((self.use_current_dia_while_delay) + and (self.firstExtruderUpdatePosition + == pending_position)): + self.filament_width = self.diameter + elif self.firstExtruderUpdatePosition == pending_position: + self.filament_width = self.nominal_filament_dia + if ((self.filament_width <= self.max_diameter) + and (self.filament_width >= self.min_diameter)): percentage = round(self.nominal_filament_dia**2 - / filament_width**2 * 100) + / self.filament_width**2 * 100) self.gcode.run_script("M221 S" + str(percentage)) else: self.gcode.run_script("M221 S100")