Мне нужно опрашивать движение USB-мыши и запускать код только во время движения мыши.
Во-первых, я научился Python примерно за 5 дней, поэтому извиняюсь за плохое кодирование.Во-вторых, я использую PyUSB на Raspberry Pi, работающем под управлением Stretch.
Я написал некоторый код Python, который позволяет мне соединять USB-мышь со старым разъемом последовательного типа, как для старого коммодора (за исключением другоготип протокола).Код работает и выводит в GPIO, как мне это тоже нужно, однако массив данных содержит свое последнее значение, поэтому мой код видит это как движение, поэтому мышь никогда не остается на экране.Я попытался обнулить массив (перезаписывается на следующей итерации), попытался сохранить данные в конце цикла и сравнить два массива, но не могу заставить это работать.
Как мне сделать кодобновлять только когда мышь движется?Можно ли как-то опрашивать движение мыши?
#Start USB Data Collection
while 1:
try:
data = dev.read(endpoint.bEndpointAddress,endpoint.wMaxPacketSize)
#Extract data we need from array
B = data[0] # Button Data
X = data[1] # X Data
Y = data[2] # Y Data
S = data[3] # Scroll Wheel
IO.output(dataPinBL, 1) #Set Mouse Buttons to HIGH
IO.output(dataPinBR, 1) #Set Mouse Buttons to HIGH
IO.output(dataPinST, 1) #Turn on Status LED
## print('START')
#Debugging only
print (data) #Testing Only- Uncomment to see outputs
if Y == 0:
uFreq=0
dFreq=0
YD.ChangeDutyCycle(dFreq)
YU.ChangeDutyCycle(uFreq)
print("Y Zero")
if X == 0:
rFreq=0
lFreq=0
XL.ChangeDutyCycle(lFreq)
XR.ChangeDutyCycle(rFreq)
print("X Zero")
#X Movement
if X >> 0:
if X <= 127:
rFreq=((X/127.0)*100.0)
XR.ChangeDutyCycle(rFreq)
print(X, "RIGHT",data) #Testing Only
elif X >= 128:
lFreq= 200-0.78*X
XL.ChangeDutyCycle(lFreq)
print("LEFT",data) #Testing Only
#Y Movement
if Y >> 0:
if Y <= 127:
dFreq=((Y/127.0)*100.0)
YD.ChangeDutyCycle(dFreq)
##print("DOWN",dFreq) #Testing Only
elif Y >=128:
uFreq= 200-0.78*Y
YU.ChangeDutyCycle(uFreq)
print("UP",uFreq) #Testing Only
Y=0
X=0
#Button Presses
if B == 1:
IO.output(dataPinBL , 0)
print("LEFT CLICK") #Testing Only
sleep(0.0)
elif B == 2:
IO.output(dataPinBR, 0)
print("RIGHT CLICK") #Testing Only
sleep(0.0)
except usb.core.USBError as e:
data = None
if e.args == ('Operation timed out',):
print ('Time Out')
continue
break
#End USB Data Collection
#release Mouse back to OS
Я ожидаю, что массив (или, по крайней мере, выходные данные) останется равным 0, пока мышь не будет перемещена, но не могу понять, как этого добиться.