Étape 6: Python souris contrôle
Nous allons utiliser Python3.2 avec la bibliothèque pywin32 à prendre le contrôle de certaines fonctions Windows tels que le contrôle de la souris. La bibliothèque pyserial va nous permettre de lire ce que Arduino nous envoie sur le Port USB de la série.Obtenir le code complet est indiqué dans la Prochaine é taPE. Pour l’instant, nous allons voir les principales idées qui rendent le code fonctionnent.
1.
Au début, nous ouvrons le port série :
ser = serial. Série (COM 1-9600) # ouvrir le Port série
Mais nous devons d’abord comprendre sur quel port COM, c’est sur.
Que nous faire essayer chacun à leur tour. En cas d’échec nous traitent de l' exception et continuez à regarder.
# Savoir quel port COM l’Arduino est sur
de com par range(15) :
Essayez :
SER = serial. Série (com, 9600) # ouvrir le Port série
print("Found on COM",com+1) # si vous êtes arrivé ici le port COM a été ouvert OK
Pause # nous l’avons trouvé alors arrêtez de la recherche
sauf :
Print ("rien sur la COM", com + 1)
2.
swState est la variable qui que nous indiquera l’état de l’interrupteur dans (à partir du port série de l’Arduino).
En fait, nous ne voulons pas de connaître l’état de l’interrupteur. Nous voulons savoir quand le bouton est enfoncé.
Nous y parvenons en garder la trace de la valeur précédente et en soustrayant la valeur actualisée de celle-ci. Nous qui mettons en fonction :
def swPressed() :
Retour à swStateD1 - swState # 0,1, -1 : même, juste pressé, vient de sortir
c'est-à-dire
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,
Comme le dit le commentaire : lorsque vous appuyez sur le bouton swPressed() renvoie la valeur 1
3.
Nous avons lu les données séries envoyées par l’Arduino utilisant ser.readline() comme suit :
Cette ligne indique une ligne jusqu'à et y compris les caractères « newline » « \r\n ».
rx = ser.readline().decode().split('\r\n')
et nous nous sommes séparés il issu des virgules
données = rx[0].split(',')
Enfin, nous indexons chaque élément de données fom données (liste) :
xTilt = int(data[0])
yTilt = int(data[1])
zTilt = int(data[2])
swState = int(data[3])
4.
Ensuite, nous calculons la x, la position y du curseur basé sur la position « centrale » (c.-à-d. le cx, position cy du curseur lorsque nous avons appuyé sur l’interrupteur pour activer un contrôle du curseur - plus sur cela plus tard) et l’inclinaison. Nous donnons aussi un contrôle sur la sensibilité c'est-à-dire combien le x, valeurs y déplacent pour une valeur donnée de Tilt :
x = cx + xTilt/sensibilité
Et nous limitons les x, les valeurs y. Bien fait en Python comme suit :
x = max (min (xMax, x), 0) # limite pour les coordonnées écran
5.
Enfin, nous vérifions si l’interrupteur est allé non Pressed à Pressed :
sw = swPressed() # vérifier le bouton
Si c’était juste pressé et nous sommes en contrôle du curseur (enCursor == 1) puis nous désactivons le curseur et Pause hors de la boucle while se terminant le programme. Mais avant que nous rompons nous imiter l’appui de la touche espace pour PAUSE Flight Simulator comme suit :
win32api.keybd_event(0x20, 0,0,0) # Appuyez sur la touche espace pour faire une Pause Flight Simulator
win32api.keybd_event (0 x 20, 0, win32con. KEYEVENTF_KEYUP, 0)
Sinon si le commutateur a été juste pressé et nous ne sommes pas dans le contrôle du curseur (enCursor == 0) il faut activer le curseur (enCursor == 1), mise à jour de la cx, variables cy à la position actuelle
(cx, cy) = win32api. GetCursorPos()
nous obtenons la cx, cy valeurs afin que nous pouvons déplacer le curseur + ou - de ce point en x et y comme l’accéléromètre est incliné.
et cliquez sur le bouton gauche de la souris à l’aide de la bibliothèque 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)
Maintenant si nous sommes en contrôle du curseur, nous nous déplaçons le curseur à le x, position y, nous avons calculé précédemment de l’inclinaison :
si enCursor : win32api. SetCursorPos((int(x),int(y)))
=================
Copiez le code à l' étape suivante dans une nouvelle fenêtre au ralenti (IDE Python) et enregistrez-le sous mouse.py