primitives/encoder.py: Simplify code.

pull/55/head
Peter Hinch 2024-10-19 14:34:31 +01:00
rodzic 3acec7af4a
commit 171e6da189
1 zmienionych plików z 1 dodań i 13 usunięć

Wyświetl plik

@ -16,16 +16,6 @@ from machine import Pin
from select import poll, POLLIN from select import poll, POLLIN
def ready(tsf, poller):
r = (tsf, POLLIN)
poller.register(*r)
def is_rdy():
return r in poller.ipoll(0)
return is_rdy
class Encoder: class Encoder:
delay = 100 # Debounce/detent delay (ms) delay = 100 # Debounce/detent delay (ms)
@ -36,7 +26,6 @@ class Encoder:
self._y = pin_y() self._y = pin_y()
self._v = 0 # Encoder value set by ISR self._v = 0 # Encoder value set by ISR
self._tsf = asyncio.ThreadSafeFlag() self._tsf = asyncio.ThreadSafeFlag()
self._tsf_ready = ready(self._tsf, poll()) # Create a ready function
trig = Pin.IRQ_RISING | Pin.IRQ_FALLING trig = Pin.IRQ_RISING | Pin.IRQ_FALLING
try: try:
xirq = pin_x.irq(trigger=trig, handler=self._x_cb, hard=True) xirq = pin_x.irq(trigger=trig, handler=self._x_cb, hard=True)
@ -62,8 +51,7 @@ class Encoder:
pv = 0 # Prior hardware value pv = 0 # Prior hardware value
pcv = 0 # Prior divided value passed to callback pcv = 0 # Prior divided value passed to callback
while True: while True:
if self._tsf_ready(): # Ensure ThreadSafeFlag is clear self._tsf.clear()
await self._tsf.wait()
await self._tsf.wait() # Wait for an edge await self._tsf.wait() # Wait for an edge
await asyncio.sleep_ms(Encoder.delay) # Wait for motion/bounce to stop. await asyncio.sleep_ms(Encoder.delay) # Wait for motion/bounce to stop.
hv = self._v # Sample hardware (atomic read). hv = self._v # Sample hardware (atomic read).