Skip to content

Commit a48a9b6

Browse files
committed
lsm6dsox: Consolidate getters and setters into config function.
Signed-off-by: Sebastian Romero <s.romero@arduino.cc>
1 parent 8a29c3c commit a48a9b6

File tree

2 files changed

+28
-71
lines changed

2 files changed

+28
-71
lines changed

micropython/drivers/imu/lsm6dsox/lsm6dsox.py

Lines changed: 18 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -319,68 +319,38 @@ def mlc_output(self):
319319
self.set_mem_bank(_FUNC_CFG_BANK_USER)
320320
return buf
321321

322-
@property
323-
def pedometer_enabled(self):
324-
"""Whether the pedometer feature is enabled."""
325-
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
326-
data = self._read_reg(_EMB_FUNC_EN_A)
327-
self.set_mem_bank(_FUNC_CFG_BANK_USER)
328-
return bool(data & _PEDO_EN_MASK)
322+
def pedometer_config(self, enable=True, debounce=10, int1_enable=False, int2_enable=False):
323+
"""Configure the pedometer features."""
324+
self._select_page(_PEDO_DEB_STEPS_CONF, debounce)
325+
326+
if int1_enable:
327+
self._set_bits(_MD1_CFG, _INT_EMB_FUNC_MASK)
328+
if int2_enable:
329+
self._set_bits(_MD2_CFG, _INT_EMB_FUNC_MASK)
329330

330-
@pedometer_enabled.setter
331-
def pedometer_enabled(self, enable):
332-
"""Enable or disable the pedometer feature."""
333331
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
332+
334333
if enable:
335334
self._set_bits(_EMB_FUNC_EN_A, _PEDO_EN_MASK)
336335
else:
337336
self._clear_bits(_EMB_FUNC_EN_A, _PEDO_EN_MASK)
338-
self.set_mem_bank(_FUNC_CFG_BANK_USER)
339337

340-
def pedometer_reset(self):
341-
"""Reset the step counter."""
342-
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
343-
self._set_bits(_EMB_FUNC_SRC, _PEDO_RST_STEP_MASK)
344-
self.set_mem_bank(_FUNC_CFG_BANK_USER)
345-
346-
@property
347-
def pedometer_int1_enabled(self):
348-
"""Whether step detection interrupt is routed to INT1 pin."""
349-
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
350-
data = self._read_reg(_EMB_FUNC_INT1)
351-
self.set_mem_bank(_FUNC_CFG_BANK_USER)
352-
return bool(data & _PEDO_INT_MASK)
353-
354-
@pedometer_int1_enabled.setter
355-
def pedometer_int1_enabled(self, enable):
356-
"""Route step detection interrupt to INT1 pin."""
357-
if enable:
358-
self._set_bits(_MD1_CFG, _INT_EMB_FUNC_MASK)
359-
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
338+
if int1_enable:
360339
self._set_bits(_EMB_FUNC_INT1, _PEDO_INT_MASK)
361340
else:
362-
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
363341
self._clear_bits(_EMB_FUNC_INT1, _PEDO_INT_MASK)
364-
self.set_mem_bank(_FUNC_CFG_BANK_USER)
365-
366-
@property
367-
def pedometer_int2_enabled(self):
368-
"""Whether step detection interrupt is routed to INT2 pin."""
369-
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
370-
data = self._read_reg(_EMB_FUNC_INT2)
371-
self.set_mem_bank(_FUNC_CFG_BANK_USER)
372-
return bool(data & _PEDO_INT_MASK)
373342

374-
@pedometer_int2_enabled.setter
375-
def pedometer_int2_enabled(self, enable):
376-
"""Route step detection interrupt to INT2 pin."""
377-
if enable:
378-
self._set_bits(_MD2_CFG, _INT_EMB_FUNC_MASK)
379-
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
343+
if int2_enable:
380344
self._set_bits(_EMB_FUNC_INT2, _PEDO_INT_MASK)
381345
else:
382-
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
383346
self._clear_bits(_EMB_FUNC_INT2, _PEDO_INT_MASK)
347+
348+
self.set_mem_bank(_FUNC_CFG_BANK_USER)
349+
350+
def pedometer_reset(self):
351+
"""Reset the step counter."""
352+
self.set_mem_bank(_FUNC_CFG_BANK_EMBED)
353+
self._set_bits(_EMB_FUNC_SRC, _PEDO_RST_STEP_MASK)
384354
self.set_mem_bank(_FUNC_CFG_BANK_USER)
385355

386356
def steps(self):
@@ -390,16 +360,6 @@ def steps(self):
390360
self.set_mem_bank(_FUNC_CFG_BANK_USER)
391361
return self.scratch_2b[0] | (self.scratch_2b[1] << 8)
392362

393-
@property
394-
def pedometer_debounce_steps(self):
395-
"""Get the pedometer debounce steps."""
396-
return self._select_page(_PEDO_DEB_STEPS_CONF)
397-
398-
@pedometer_debounce_steps.setter
399-
def pedometer_debounce_steps(self, steps):
400-
"""Set the pedometer debounce steps. Default is 10."""
401-
self._select_page(_PEDO_DEB_STEPS_CONF, steps)
402-
403363
def gyro(self):
404364
"""Returns gyroscope vector in degrees/sec."""
405365
mv = memoryview(self.scratch_int)

micropython/drivers/imu/lsm6dsox/lsm6dsox_pedometer.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,27 @@
1717
# Or init in SPI mode.
1818
# lsm = LSM6DSOX(SPI(5), cs=Pin(10))
1919

20-
# Enable the pedometer feature.
21-
lsm.pedometer_enabled = True
22-
23-
# Set debounce steps to 5 (default is 10).
24-
# This means that after a step is detected, the pedometer will ignore any new steps for the next 5 step detections.
25-
# This can help to filter out false positives and improve step counting accuracy.
26-
lsm.pedometer_debounce_steps = 5
27-
28-
# Enable interrupts for step detection on both INT1 and INT2 pins.
29-
lsm.pedometer_int1_enabled = True
30-
lsm.pedometer_int2_enabled = True
20+
# Enable the pedometer feature, set debounce steps to 5, and enable interrupts on both INT1 and INT2.
21+
# Default debounce steps is 10. This means that after a step is detected, the pedometer
22+
# will ignore any new steps for the next 5 step detections. This can help to filter out
23+
# false positives and improve step counting accuracy.
24+
# If you just want to enable the pedometer, simply call lsm.pedometer_config(enable=True).
25+
lsm.pedometer_config(debounce=5, int1_enable=True, int2_enable=True)
3126

3227
# Register interrupt handler on a Pin. e.g. D8
28+
# The interrupt pins are open-drain, so they will be pulled low when a step is detected.
29+
# We configure the host pin with a pull-up resistor to ensure it stays high when not active.
3330
interrupt_pin = Pin("D8", Pin.IN, Pin.PULL_UP)
3431

3532

3633
def on_step_detected(pin):
37-
print("Step detected!")
34+
print("Steps detected!")
3835

3936

4037
# Configure the interrupt pin to trigger on falling edge (active low) when a step is detected.
4138
interrupt_pin.irq(trigger=Pin.IRQ_FALLING, handler=on_step_detected)
4239

43-
last_steps = 0 # Keep track of the last step count to detect changes.
40+
last_steps = None # Keep track of the last step count to detect changes.
4441

4542
while True:
4643
steps = lsm.steps()

0 commit comments

Comments
 (0)