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
|
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).
|
||||||
|
|
Ładowanie…
Reference in New Issue