Paso 6: Control del ratón del Python
Usaremos Python3.2 con la biblioteca pywin32 a ganar control sobre algunas de las funciones de Windows tales como Control del ratón. La biblioteca de pyserial nos permite leer lo que Arduino nos envía en el puerto Serial USB.El código completo se muestra en el Siguiente Step. Por ahora vamos a ver las principales ideas que hacen que el código de trabajo.
1.
Al principio abrimos el puerto serie:
ser = serial. Serie (COM 1, 9600) # abrir el puerto serie
Pero primero tenemos que calcular hacia fuera qué puerto COM está en.
Hacer que probar cada uno a su vez. Si no tratan de la excepción y siga buscando.
# Saber que puerto COM está el Arduino en
para com en range(15):
tratar de:
ser = serial. Serie (com, 9600) # abrir el puerto serie
print("Found on COM",com+1) # si tienes aquí el puerto COM fue abierta OK
break # lo encontramos así que deja de buscar
excepto:
Imprimir ("nada en COM», com + 1)
2.
swState es la variable que vamos a leer el estado del interruptor en (desde el puerto serie de Arduino).
Realmente no queremos saber el estado del interruptor. Queremos saber cuándo se ha pulsado el botón.
Podemos hacer esto por hacer el seguimiento del valor anterior y restando el valor actual de ella. Ponemos en una función:
DEF swPressed():
volver a swStateD1 - swState # 0,1, -1: iguales, simplemente presiona, acaba de lanzar
es decir
swState: 1,1,1,0,0,0,1,1,-
swStateD1:-, 1,1,1,0,0,0,1,1
swPressed():-, 0,0,1,0,0,-1.0,
Como dice el comentario: cuando se pulsa el botón swPressed() devuelve 1
3.
Leemos los datos Serial enviados por Arduino usando ser.readline() como sigue:
Esta línea Lee una línea hasta e incluyendo los caracteres de la 'nueva ' línea '\r\n'.
rx = ser.readline().decode().split('\r\n')
y nos dividimos en comas
datos = rx[0].split(',')
Finalmente nos índice cada pedazo de datos fom datos (lista):
xTilt = int(data[0])
yTilt = int(data[1])
zTilt = int(data[2])
swState = int(data[3])
4.
A continuación calculamos la x, y posición para el cursor basado en la posición de "centro" (es decir el cx posición de cy del cursor cuando presionamos el interruptor para activar control del cursor - más sobre esto más adelante) y la inclinación. También damos algún control sobre la sensibilidad, es decir cuánto la x, y valores mover para un valor dado de la inclinación:
x = cx + xTilt, sensibilidad
Y limitamos la x, y valores. Muy bien hecho en Python como sigue:
x = max (min (xMax, x), 0) # límite en las coordenadas de pantalla
5.
Finalmente comprobamos si el conmutador pasó de no presionó a presiona:
sw = swPressed() # Marque el botón de
Si sólo fue presionado y estamos en control del cursor (enCursor == 1) y luego nos desactivar el cursor y romper el lazo mientras que termina el programa. Pero antes tenemos que imitar la pulsación de la tecla de espacio para simulador de vuelo de pausa como sigue:
win32api.keybd_event(0x20, 0,0,0) # Pulse la barra espaciadora para pausar el simulador de vuelo
win32api.keybd_event (0 x 20, 0, win32con. KEYEVENTF_KEYUP, 0)
Por otra parte si solo se presiona el interruptor y no estamos en control del cursor (enCursor == 0) entonces tenemos que activar el cursor (enCursor == 1), actualizar el cx, cy variables a la situación actual
(cx, cy) = win32api. GetCursorPos()
obtenemos el cx, cy valores por lo que podemos mover el cursor + o - de este punto en x y y como el acelerómetro está inclinado.
y haga clic en el botón izquierdo del ratón utilizando la biblioteca de win32 :
win32api.mouse_event (win32con. MOUSEEVENTF_LEFTDOWN,int(x),int(y),0,0)
win32api.mouse_event (win32con. MOUSEEVENTF_LEFTUP,int(x),int(y),0,0)
Ahora si estamos en control del cursor, movemos el cursor a x, posición y se calcularon antes de la inclinación:
si enCursor: win32api. SetCursorPos((int(x),int(y)))
=================
Copie el código en el paso siguiente en una nueva ventana en IDLE (IDE de Python) y guardar como mouse.py