Étape 12 : Accéléromètre de Bonus !
Nous étions assez proches avec nos commandes, il semble que nous devrions être la lecture de 10 octets seulement. Il semble également que les données ne changent pas vraiment grand-chose à l’exception d’un peu plus bas...
L’octet 7' th modifie un droit beaucoup après que nous l’envoyions ce bRequest 0 x 31 (circulation automobile). Cela implique que cette lecture des données sont en quelque sorte affectées par le moteur, éventuellement un octet de rétroaction moteur ?
Vérifier un démontage de l’appareil (à partir d’iFixit) nous voyons qu’il y a un « inclinomètre » / accéléromètre (Kionix KXSD9). La fiche technique indique il est utilisé pour la stabilisation d’image, et il a 3 axes (X Y et Z) avec 10 bits de données par axe.
Permet de lire en permanence ces données
importation usb.core
importation usb.util
import sys
moment de l’importation
# trouver notre dispositif
dev = usb.core.find (idVendor = 0x045e, idProduct = 0x02B0)
# a été trouvé ?
Si aucune n’est dev :
générer ValueError ("périphérique non trouvé")
dev.set_configuration()
While True :
# Récupérer des données de brequest 0 x 32
RET = dev.ctrl_transfer (0xC0, 0 x 32, 0 x 0, 0 x 0, 10)
impression carte (sortilège, ret)
Secouant la Kinect tout en exécutant le script vous verrez clairement que les modifications de données avec le mouvement.
Pour identifier les axes de l’accéléromètre, ne tournez-le que d’une façon à la fois et notez quels changements. Vous pouvez aussi voir comment ces données sont exprimée en octets, mais les données de l’accéléromètre doivent être un mot signé parce qu’il y retourne de 0xfff7 à 0x0007, ce qui indiquerait un fait négatif positif conversion.
Nous pouvons effectuer un cast de deux octets à une valeur signée par « la main » (en C, c’est un peu plus facile, nous le savons)
importation usb.core
importation usb.util
import sys
moment de l’importation
# trouver notre dispositif
dev = usb.core.find (idVendor = 0x045e, idProduct = 0x02B0)
# a été trouvé ?
Si aucune n’est dev :
générer ValueError ("périphérique non trouvé")
dev.set_configuration()
While True :
# Récupérer des données de brequest 0 x 32
RET = dev.ctrl_transfer (0xC0, 0 x 32, 0 x 0, 0 x 0, 10)
#print carte (sortilège, ret)
x = (ret [2] << 8) | ret [3]
x = (x + 2 * 15) % 2 ** 16 - 2 ** 15 # àen signé 16 b
y = (ret [4] << 8) | ret [5]
y = (y + 2 ** 15) % 2 ** 16 - 2 ** 15 # àen signé 16 b
z = (ret [6] << 8) | ret [7]
z = (z + 2 ** 15) % 2 ** 16 - 2 ** 15 # àen signé 16 b
z, y, x impression, « \t », « \t »
Maintenant, lorsque vous exécutez le script, vous verrez les données signées s’affichent correctement