Robotics-at-Home-with-Raspb.../ch-6/3-change-conditions/pio_one_encoder_when_changed.py
2022-03-20 22:27:49 +00:00

36 lines
891 B
Python

"""Send this code, run and watch the repl.
Then turn the wheel slowly to see the change"""
import board
import rp2pio
import adafruit_pioasm
import array
program = """
.program pio_input
set y, 0 ; clear y
read:
mov x, y ; store old Y in x
in null, 32 ; Clear ISR
in pins, 2 ; read in two pins (into ISR)
mov y, isr ; store ISR in y
jmp x!=y different ; Jump if its different
jmp read ; otherwise loop back to read
different:
push noblock ; put ISR into input FIFO
jmp read ; loop back
"""
assembled = adafruit_pioasm.assemble(program)
## set up a statemachine
sm = rp2pio.StateMachine(
assembled, frequency=20000, first_in_pin=board.GP20, in_pin_count=2
)
buffer = array.array("I", [0])
while True:
sm.readinto(buffer)
print("{:032b}".format(buffer[0]))