kopia lustrzana https://github.com/peterhinch/micropython-micro-gui
primitives/encoder.py: Simplify code.
rodzic
3acec7af4a
commit
171e6da189
|
@ -16,16 +16,6 @@ from machine import Pin
|
|||
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:
|
||||
delay = 100 # Debounce/detent delay (ms)
|
||||
|
||||
|
@ -36,7 +26,6 @@ class Encoder:
|
|||
self._y = pin_y()
|
||||
self._v = 0 # Encoder value set by ISR
|
||||
self._tsf = asyncio.ThreadSafeFlag()
|
||||
self._tsf_ready = ready(self._tsf, poll()) # Create a ready function
|
||||
trig = Pin.IRQ_RISING | Pin.IRQ_FALLING
|
||||
try:
|
||||
xirq = pin_x.irq(trigger=trig, handler=self._x_cb, hard=True)
|
||||
|
@ -62,8 +51,7 @@ class Encoder:
|
|||
pv = 0 # Prior hardware value
|
||||
pcv = 0 # Prior divided value passed to callback
|
||||
while True:
|
||||
if self._tsf_ready(): # Ensure ThreadSafeFlag is clear
|
||||
await self._tsf.wait()
|
||||
self._tsf.clear()
|
||||
await self._tsf.wait() # Wait for an edge
|
||||
await asyncio.sleep_ms(Encoder.delay) # Wait for motion/bounce to stop.
|
||||
hv = self._v # Sample hardware (atomic read).
|
||||
|
|
Ładowanie…
Reference in New Issue