轮询USB鼠标事件

时间:2019-01-31 02:19:21

标签: python raspberry-pi mouse pyusb

我需要轮询USB鼠标的移动,并且仅在鼠标移动时才运行代码。

首先,我已经在大约5天的时间里自学了Python,因此如果编码不好,我深表歉意。其次,我在运行Stretch的Raspberry Pi上使用PyUSB。

我已经编写了一些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,但无法弄清楚如何实现。

0 个答案:

没有答案