52 lines
1.3 KiB
Python
52 lines
1.3 KiB
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, 31 ; 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
|
|
left_enc = rp2pio.StateMachine(
|
|
assembled, frequency=0, first_in_pin=board.GP20, in_pin_count=2
|
|
)
|
|
|
|
right_enc = rp2pio.StateMachine(
|
|
assembled, frequency=0, first_in_pin=board.GP26, in_pin_count=2
|
|
)
|
|
|
|
buffer = array.array("I", [0])
|
|
|
|
left_data = 0
|
|
right_data = 0
|
|
|
|
while True:
|
|
# read data from the fifo
|
|
if left_enc.in_waiting:
|
|
left_enc.readinto(buffer)
|
|
left_data = buffer[0]
|
|
# print it.
|
|
print("{:08b} {:08b}".format(left_data, right_data))
|
|
if right_enc.in_waiting:
|
|
right_enc.readinto(buffer)
|
|
right_data = buffer[0]
|
|
# print it.
|
|
print("{:08b} {:08b}".format(left_data, right_data))
|